| From c4aa8dff6091cc9536aeb255e544b0b4ba29faf4 Mon Sep 17 00:00:00 2001 |
| From: Madhav Chauhan <madhav.chauhan@amd.com> |
| Date: Fri, 16 Oct 2020 18:03:07 +0530 |
| Subject: drm/amdgpu: don't map BO in reserved region |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Madhav Chauhan <madhav.chauhan@amd.com> |
| |
| commit c4aa8dff6091cc9536aeb255e544b0b4ba29faf4 upstream. |
| |
| 2MB area is reserved at top inside VM. |
| |
| Suggested-by: Christian König <christian.koenig@amd.com> |
| Signed-off-by: Madhav Chauhan <madhav.chauhan@amd.com> |
| Reviewed-by: Christian König <christian.koenig@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c |
| @@ -596,6 +596,7 @@ int amdgpu_gem_va_ioctl(struct drm_devic |
| struct ww_acquire_ctx ticket; |
| struct list_head list, duplicates; |
| uint64_t va_flags; |
| + uint64_t vm_size; |
| int r = 0; |
| |
| if (args->va_address < AMDGPU_VA_RESERVED_SIZE) { |
| @@ -616,6 +617,15 @@ int amdgpu_gem_va_ioctl(struct drm_devic |
| |
| args->va_address &= AMDGPU_GMC_HOLE_MASK; |
| |
| + vm_size = adev->vm_manager.max_pfn * AMDGPU_GPU_PAGE_SIZE; |
| + vm_size -= AMDGPU_VA_RESERVED_SIZE; |
| + if (args->va_address + args->map_size > vm_size) { |
| + dev_dbg(&dev->pdev->dev, |
| + "va_address 0x%llx is in top reserved area 0x%llx\n", |
| + args->va_address + args->map_size, vm_size); |
| + return -EINVAL; |
| + } |
| + |
| if ((args->flags & ~valid_flags) && (args->flags & ~prt_flags)) { |
| dev_dbg(&dev->pdev->dev, "invalid flags combination 0x%08X\n", |
| args->flags); |