drm/ttm: Fix 'buf' pointer update in ttm_bo_vm_access_kmap() (v2)
authorTom St Denis <tom.stdenis@amd.com>
Fri, 26 Jan 2018 14:32:29 +0000 (09:32 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Feb 2018 14:42:25 +0000 (15:42 +0100)
commit 95244db2d3f743f37e69446a2807dd1a42750542 upstream.

The buf pointer was not being incremented inside the loop
meaning the same block of data would be read or written
repeatedly.
(v2) Change 'buf' pointer to uint8_t* type

Cc: stable@vger.kernel.org
Fixes: 09ac4fcb3f25 ("drm/ttm: Implement vm_operations_struct.access v2")

Signed-off-by: Tom St Denis <tom.stdenis@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/ttm/ttm_bo_vm.c

index c8ebb757e36b524f2074d67067888b61a012d9cd..b17d0d38f290a645cf4402b60f3c02616c3c8504 100644 (file)
@@ -299,7 +299,7 @@ static void ttm_bo_vm_close(struct vm_area_struct *vma)
 
 static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,
                                 unsigned long offset,
-                                void *buf, int len, int write)
+                                uint8_t *buf, int len, int write)
 {
        unsigned long page = offset >> PAGE_SHIFT;
        unsigned long bytes_left = len;
@@ -328,6 +328,7 @@ static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,
                ttm_bo_kunmap(&map);
 
                page++;
+               buf += bytes;
                bytes_left -= bytes;
                offset = 0;
        } while (bytes_left);