aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0388-drm-amdgpu-always-wait-before-kmap-a-BO.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0388-drm-amdgpu-always-wait-before-kmap-a-BO.patch')
-rw-r--r--common/recipes-kernel/linux/files/0388-drm-amdgpu-always-wait-before-kmap-a-BO.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0388-drm-amdgpu-always-wait-before-kmap-a-BO.patch b/common/recipes-kernel/linux/files/0388-drm-amdgpu-always-wait-before-kmap-a-BO.patch
new file mode 100644
index 00000000..b75d2cb6
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0388-drm-amdgpu-always-wait-before-kmap-a-BO.patch
@@ -0,0 +1,59 @@
+From 8d3e36dd379aa625ce65810010be8e42facb6e83 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Thu, 10 Mar 2016 16:21:04 +0100
+Subject: [PATCH 0388/1110] drm/amdgpu: always wait before kmap a BO
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When a BO is currently moving we otherwise would blindly
+access the new location without checking.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+index c980cba..7700867 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+@@ -308,7 +308,7 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
+ int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr)
+ {
+ bool is_iomem;
+- int r;
++ long r;
+
+ if (bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS)
+ return -EPERM;
+@@ -319,14 +319,20 @@ int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr)
+ }
+ return 0;
+ }
++
++ r = reservation_object_wait_timeout_rcu(bo->tbo.resv, false, false,
++ MAX_SCHEDULE_TIMEOUT);
++ if (r < 0)
++ return r;
++
+ r = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, &bo->kmap);
+- if (r) {
++ if (r)
+ return r;
+- }
++
+ bo->kptr = ttm_kmap_obj_virtual(&bo->kmap, &is_iomem);
+- if (ptr) {
++ if (ptr)
+ *ptr = bo->kptr;
+- }
++
+ return 0;
+ }
+
+--
+2.7.4
+