diff options
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.patch | 59 |
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 + |