Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/radeon: don't init gpuvm if accel is disabled (v3)

If acceleration is disabled, it does not make sense
to init gpuvm since nothing will use it. Moreover,
if radeon_vm_init() gets called it uses accel to try
and clear the pde tables, etc. which results in a bug.

v2: handle vm_fini as well
v3: handle bo_open/close as well

Bug:
https://bugs.freedesktop.org/show_bug.cgi?id=88786

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org

+12 -10
+4 -2
drivers/gpu/drm/radeon/radeon_gem.c
··· 146 146 struct radeon_bo_va *bo_va; 147 147 int r; 148 148 149 - if (rdev->family < CHIP_CAYMAN) { 149 + if ((rdev->family < CHIP_CAYMAN) || 150 + (!rdev->accel_working)) { 150 151 return 0; 151 152 } 152 153 ··· 177 176 struct radeon_bo_va *bo_va; 178 177 int r; 179 178 180 - if (rdev->family < CHIP_CAYMAN) { 179 + if ((rdev->family < CHIP_CAYMAN) || 180 + (!rdev->accel_working)) { 181 181 return; 182 182 } 183 183
+8 -8
drivers/gpu/drm/radeon/radeon_kms.c
··· 605 605 return -ENOMEM; 606 606 } 607 607 608 - vm = &fpriv->vm; 609 - r = radeon_vm_init(rdev, vm); 610 - if (r) { 611 - kfree(fpriv); 612 - return r; 613 - } 614 - 615 608 if (rdev->accel_working) { 609 + vm = &fpriv->vm; 610 + r = radeon_vm_init(rdev, vm); 611 + if (r) { 612 + kfree(fpriv); 613 + return r; 614 + } 615 + 616 616 r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false); 617 617 if (r) { 618 618 radeon_vm_fini(rdev, vm); ··· 668 668 radeon_vm_bo_rmv(rdev, vm->ib_bo_va); 669 669 radeon_bo_unreserve(rdev->ring_tmp_bo.bo); 670 670 } 671 + radeon_vm_fini(rdev, vm); 671 672 } 672 673 673 - radeon_vm_fini(rdev, vm); 674 674 kfree(fpriv); 675 675 file_priv->driver_priv = NULL; 676 676 }