diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0574-drm-amdgpu-fix-32-bit-compiler-warning.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0574-drm-amdgpu-fix-32-bit-compiler-warning.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0574-drm-amdgpu-fix-32-bit-compiler-warning.patch b/common/recipes-kernel/linux/files/0574-drm-amdgpu-fix-32-bit-compiler-warning.patch new file mode 100644 index 00000000..753949c0 --- /dev/null +++ b/common/recipes-kernel/linux/files/0574-drm-amdgpu-fix-32-bit-compiler-warning.patch @@ -0,0 +1,64 @@ +From 028423b0d8fa27c30a46da4af2a5cab230369de6 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann <arnd@arndb.de> +Date: Wed, 7 Oct 2015 09:41:27 +0200 +Subject: [PATCH 0574/1050] drm/amdgpu: fix 32-bit compiler warning +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The new amdgpu driver passes a user space pointer in a 64-bit structure +member, which is the correct way to do it, but it attempts to +directly cast it to a __user pointer in the kernel, which causes +a warning in three places: + +drm/amd/amdgpu/amdgpu_cs.c: In function 'amdgpu_cs_parser_init': +drm/amd/amdgpu/amdgpu_cs.c:180:21: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] + chunk_array_user = (uint64_t __user *)(cs->in.chunks); + +This changes all three to add an intermediate cast to 'unsigned long' +as other drivers do. This avoids the warning and works correctly on +both 32-bit and 64-bit architectures. + +Fixes: e60b344f6c0eff ("drm/amdgpu: optimize amdgpu_parser_init") + +Reviewed-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Arnd Bergmann <arnd@arndb.de> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +index cb3c274..fd16652 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -177,7 +177,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) + + /* get chunks */ + INIT_LIST_HEAD(&p->validated); +- chunk_array_user = (uint64_t __user *)(cs->in.chunks); ++ chunk_array_user = (uint64_t __user *)(unsigned long)(cs->in.chunks); + if (copy_from_user(chunk_array, chunk_array_user, + sizeof(uint64_t)*cs->in.num_chunks)) { + ret = -EFAULT; +@@ -197,7 +197,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) + struct drm_amdgpu_cs_chunk user_chunk; + uint32_t __user *cdata; + +- chunk_ptr = (void __user *)chunk_array[i]; ++ chunk_ptr = (void __user *)(unsigned long)chunk_array[i]; + if (copy_from_user(&user_chunk, chunk_ptr, + sizeof(struct drm_amdgpu_cs_chunk))) { + ret = -EFAULT; +@@ -208,7 +208,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data) + p->chunks[i].length_dw = user_chunk.length_dw; + + size = p->chunks[i].length_dw; +- cdata = (void __user *)user_chunk.chunk_data; ++ cdata = (void __user *)(unsigned long)user_chunk.chunk_data; + p->chunks[i].user_ptr = cdata; + + p->chunks[i].kdata = drm_malloc_ab(size, sizeof(uint32_t)); +-- +1.9.1 + |