2010-04-26 09:55:39

by David Miller

[permalink] [raw]
Subject: [PATCH] drm/radeon: Fix sparc regression in r300_scratch()


Commit b4fe945405e477cded91772b4fec854705443dd5 ("drm/radeon: Fix
memory allocation failures in the preKMS command stream checking.")
added a regression in that it completely tossed the get_unaligned()
done by r300_scratch() which we added in commit
958a6f8ccb1964adc3eec84cf401c5baeb4fbca0 ("drm: radeon: Fix unaligned
access in r300_scratch().").

Put it back.

Signed-off-by: David S. Miller <[email protected]>

diff --git a/drivers/gpu/drm/radeon/r300_cmdbuf.c b/drivers/gpu/drm/radeon/r300_cmdbuf.c
index ea46d55..c5c2742 100644
--- a/drivers/gpu/drm/radeon/r300_cmdbuf.c
+++ b/drivers/gpu/drm/radeon/r300_cmdbuf.c
@@ -921,7 +921,7 @@ static int r300_scratch(drm_radeon_private_t *dev_priv,

ptr_addr = drm_buffer_read_object(cmdbuf->buffer,
sizeof(stack_ptr_addr), &stack_ptr_addr);
- ref_age_base = (u32 *)(unsigned long)*ptr_addr;
+ ref_age_base = (u32 *)(unsigned long)get_unaligned(ptr_addr);

for (i=0; i < header.scratch.n_bufs; i++) {
buf_idx = drm_buffer_pointer_to_dword(cmdbuf->buffer, 0);


2010-04-26 14:36:11

by Matt Turner

[permalink] [raw]
Subject: Re: [PATCH] drm/radeon: Fix sparc regression in r300_scratch()

On Mon, Apr 26, 2010 at 5:55 AM, David Miller <[email protected]> wrote:
>
> Commit b4fe945405e477cded91772b4fec854705443dd5 ("drm/radeon: Fix
> memory allocation failures in the preKMS command stream checking.")
> added a regression in that it completely tossed the get_unaligned()
> done by r300_scratch() which we added in commit
> 958a6f8ccb1964adc3eec84cf401c5baeb4fbca0 ("drm: radeon: Fix unaligned
> access in r300_scratch().").
>
> Put it back.
>
> Signed-off-by: David S. Miller <[email protected]>
>
> diff --git a/drivers/gpu/drm/radeon/r300_cmdbuf.c b/drivers/gpu/drm/radeon/r300_cmdbuf.c
> index ea46d55..c5c2742 100644
> --- a/drivers/gpu/drm/radeon/r300_cmdbuf.c
> +++ b/drivers/gpu/drm/radeon/r300_cmdbuf.c
> @@ -921,7 +921,7 @@ static int r300_scratch(drm_radeon_private_t *dev_priv,
>
> ? ? ? ?ptr_addr = drm_buffer_read_object(cmdbuf->buffer,
> ? ? ? ? ? ? ? ? ? ? ? ?sizeof(stack_ptr_addr), &stack_ptr_addr);
> - ? ? ? ref_age_base = (u32 *)(unsigned long)*ptr_addr;
> + ? ? ? ref_age_base = (u32 *)(unsigned long)get_unaligned(ptr_addr);
>
> ? ? ? ?for (i=0; i < header.scratch.n_bufs; i++) {
> ? ? ? ? ? ? ? ?buf_idx = drm_buffer_pointer_to_dword(cmdbuf->buffer, 0);
> _______________________________________________
> dri-devel mailing list
> [email protected]
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>

Should help Alpha as well.

Acked-by: Matt Turner <[email protected]>