Patch "drm/amdgpu: fix issue with overlapping userptrs" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
drm/amdgpu: fix issue with overlapping userptrs
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-amdgpu-fix-issue-with-overlapping-userptrs.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
cc1de6e800c253172334f8774c419dc64401cd2eMon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20K=C3=B6nig?= <[email protected]>
Date: Mon, 8 Feb 2016 10:57:22 +0100
Subject: drm/amdgpu: fix issue with overlapping userptrs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Christian König <[email protected]>
commit cc1de6e800c253172334f8774c419dc64401cd2e upstream.
Otherwise we could try to evict overlapping userptr BOs in get_user_pages(), leading to a possible circular locking dependency.
--- 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(-)
drivers/gpu/drm/amd/amdgpu/amdgpu.h +2 -0
@@ -2312,6 +2312,8 @@ bool amdgpu_ttm_bo_is_amdgpu_bo(struct tint 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);
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c +2 -1
@@ -142,7 +142,8 @@ static void amdgpu_mn_invalidate_range_slist_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);
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +19 -0
@@ -783,6 +783,25 @@ bool amdgpu_ttm_tt_has_userptr(struct ttreturn !!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;
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/drm-amdgpu-use-post-decrement-in-error-handling.patch queue-4.4/drm-amdgpu-drop-topaz-support-from-gmc8-module.patch queue-4.4/drm-amdgpu-remove-exp-hardware-support-from-iceland.patch queue-4.4/drm-amdgpu-fix-issue-with-overlapping-userptrs.patch queue-4.4/drm-amdgpu-pull-topaz-gmc-bits-into-gmc_v7.patch queue-4.4/drm-amdgpu-the-vi-specific-exe-bit-should-only-apply-to-gmc-v8.0-above.patch queue-4.4/drm-amdgpu-move-gmc7-support-out-of-cik-dependency.patch queue-4.4/drm-amdgpu-iceland-use-ci-based-mc-ip.patch queue-4.4/drm-amdgpu-fix-off-by-one-errors-in-amdgpu_vm_bo_map.patch queue-4.4/drm-amdgpu-fix-amdgpu_bo_pin_restricted-vram-placing-v2.patch queue-4.4/drm-amdgpu-remove-unnecessary-forward-declaration.patch queue-4.4/drm-amdgpu-fix-tonga-smu-resume.patch queue-4.4/drm-amdgpu-don-t-load-mec2-on-topaz.patch queue-4.4/drm-amdgpu-pm-adjust-display-configuration-after-powerstate.patch queue-4.4/drm-amdgpu-hold-reference-to-fences-in-amdgpu_sa_bo_new-v2.patch queue-4.4/drm-amdgpu-fix-lost-sync_to-if-scheduler-is-enabled.patch