diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0934-drm-amdgpu-fix-issue-with-overlapping-userptrs.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0934-drm-amdgpu-fix-issue-with-overlapping-userptrs.patch | 80 |
1 files changed, 0 insertions, 80 deletions
diff --git a/common/recipes-kernel/linux/files/0934-drm-amdgpu-fix-issue-with-overlapping-userptrs.patch b/common/recipes-kernel/linux/files/0934-drm-amdgpu-fix-issue-with-overlapping-userptrs.patch deleted file mode 100644 index 260cbb44..00000000 --- a/common/recipes-kernel/linux/files/0934-drm-amdgpu-fix-issue-with-overlapping-userptrs.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 5620c84b36d29b1186b9179290bbfeab343ec7d2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Mon, 8 Feb 2016 10:57:22 +0100 -Subject: [PATCH 0934/1565] drm/amdgpu: fix issue with overlapping userptrs -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Otherwise we could try to evict overlapping userptr BOs in get_user_pages(), -leading to a possible circular locking dependency. - -Signed-off-by: Christian König <christian.koenig@amd.com> -Acked-by: Alex Deucher <alexander.deucher@amd.com> -Cc: stable@vger.kernel.org ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 ++ - drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 3 ++- - drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 19 +++++++++++++++++++ - 3 files changed, 23 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index 43e7ed1..5e7770f 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -2319,6 +2319,8 @@ bool amdgpu_ttm_bo_is_amdgpu_bo(struct ttm_buffer_object *bo); - int amdgpu_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr, - uint32_t flags); - bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm); -+bool amdgpu_ttm_tt_affect_userptr(struct ttm_tt *ttm, unsigned long start, -+ unsigned long end); - bool amdgpu_ttm_tt_is_readonly(struct ttm_tt *ttm); - uint32_t amdgpu_ttm_tt_pte_flags(struct amdgpu_device *adev, struct ttm_tt *ttm, - struct ttm_mem_reg *mem); -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c -index b1969f2..d4e2780 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c -@@ -142,7 +142,8 @@ static void amdgpu_mn_invalidate_range_start(struct mmu_notifier *mn, - - list_for_each_entry(bo, &node->bos, mn_list) { - -- if (!bo->tbo.ttm || bo->tbo.ttm->state != tt_bound) -+ if (!amdgpu_ttm_tt_affect_userptr(bo->tbo.ttm, start, -+ end)) - continue; - - r = amdgpu_bo_reserve(bo, true); -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c -index 55cf05e..6442a06 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c -@@ -783,6 +783,25 @@ bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm) - return !!gtt->userptr; - } - -+bool amdgpu_ttm_tt_affect_userptr(struct ttm_tt *ttm, unsigned long start, -+ unsigned long end) -+{ -+ struct amdgpu_ttm_tt *gtt = (void *)ttm; -+ unsigned long size; -+ -+ if (gtt == NULL) -+ return false; -+ -+ if (gtt->ttm.ttm.state != tt_bound || !gtt->userptr) -+ return false; -+ -+ size = (unsigned long)gtt->ttm.ttm.num_pages * PAGE_SIZE; -+ if (gtt->userptr > end || gtt->userptr + size <= start) -+ return false; -+ -+ return true; -+} -+ - bool amdgpu_ttm_tt_is_readonly(struct ttm_tt *ttm) - { - struct amdgpu_ttm_tt *gtt = (void *)ttm; --- -1.9.1 - |