Patch "drm/radeon: Fix off-by-one errors in radeon_vm_bo_set_addr" 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/radeon: Fix off-by-one errors in radeon_vm_bo_set_addr
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-radeon-fix-off-by-one-errors-in-radeon_vm_bo_set_addr.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
42ef344c0994cc453477afdc7a8eadc578ed0257Mon Sep 17 00:00:00 2001
From: Felix Kuehling <[email protected]>
Date: Mon, 23 Nov 2015 17:39:11 -0500
Subject: drm/radeon: Fix off-by-one errors in radeon_vm_bo_set_addr
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Felix Kuehling <[email protected]>
commit 42ef344c0994cc453477afdc7a8eadc578ed0257 upstream.
eoffset is sometimes treated as the last address inside the address range, and sometimes as the first address outside the range. This was resulting in errors when a test filled up the entire address space. Make it consistent to always be the last address within the range. Also fixed related errors when checking the VA limit and in radeon_vm_fence_pts.
--- drivers/gpu/drm/radeon/radeon_vm.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/gpu/drm/radeon/radeon_vm.c +6 -6
@@ -455,15 +455,15 @@ int radeon_vm_bo_set_addr(struct radeon_if (soffset) {/* make sure object fit at this offset */ - eoffset = soffset + size; + eoffset = soffset + size -1 ;if (soffset >= eoffset) { r = -EINVAL ; goto error_unreserve; } last_pfn = eoffset /RADEON_GPU_PAGE_SIZE ; -if (last_pfn > rdev->vm_manager.max_pfn) { -dev_err (rdev->dev,"va above limit (0x%08X > 0x%08X)\n" , +if (last_pfn >= rdev->vm_manager.max_pfn) { +dev_err (rdev->dev,"va above limit (0x%08X >= 0x%08X)\n" , last_pfn, rdev->vm_manager.max_pfn); r = -EINVAL ; goto error_unreserve;
@@ -478,7 +478,7 @@ int radeon_vm_bo_set_addr(struct radeon_ eoffset /=RADEON_GPU_PAGE_SIZE ;if (soffset || eoffset) {struct interval_tree_node *it; - it =interval_tree_iter_first (&vm->va, soffset, eoffset -1 ); + it =interval_tree_iter_first (&vm->va, soffset, eoffset);if (it && it != &bo_va->it) {struct radeon_bo_va *tmp; tmp = container_of(it, struct radeon_bo_va, it);
@@ -518,7 +518,7 @@ int radeon_vm_bo_set_addr(struct radeon_if (soffset || eoffset) {spin_lock (&vm->status_lock); bo_va->it.start = soffset; - bo_va->it.last = eoffset -1 ; + bo_va->it.last = eoffset;list_add (&bo_va->vm_status, &vm->cleared);spin_unlock (&vm->status_lock);interval_tree_insert (&bo_va->it, &vm->va);
@@ -888,7 +888,7 @@ static void radeon_vm_fence_pts(struct runsigned i; start >>= radeon_vm_block_size; - end >>= radeon_vm_block_size; + end = (end -1 ) >> radeon_vm_block_size;for (i = start; i <= end; ++i)radeon_bo_fence (vm->page_tables[i].bo, fence, true);
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/drm-radeon-fix-off-by-one-errors-in-radeon_vm_bo_set_addr.patch queue-4.4/drm-amdgpu-fix-off-by-one-errors-in-amdgpu_vm_bo_map.patch