Commit 2a1398b3317fbc5d2efe1c0089dc56414286dc6b

Authored by Alex Deucher
Committed by Greg Kroah-Hartman
1 parent 7bb9e4a06e

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

commit 544143f9e01a60a93eb00ab4bfcb9bf4702a2a7d upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 2 changed files with 12 additions and 10 deletions Side-by-side Diff

drivers/gpu/drm/radeon/radeon_gem.c
... ... @@ -146,7 +146,8 @@
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  
... ... @@ -176,7 +177,8 @@
176 177 struct radeon_bo_va *bo_va;
177 178 int r;
178 179  
179   - if (rdev->family < CHIP_CAYMAN) {
  180 + if ((rdev->family < CHIP_CAYMAN) ||
  181 + (!rdev->accel_working)) {
180 182 return;
181 183 }
182 184  
drivers/gpu/drm/radeon/radeon_kms.c
... ... @@ -598,14 +598,14 @@
598 598 return -ENOMEM;
599 599 }
600 600  
601   - vm = &fpriv->vm;
602   - r = radeon_vm_init(rdev, vm);
603   - if (r) {
604   - kfree(fpriv);
605   - return r;
606   - }
607   -
608 601 if (rdev->accel_working) {
  602 + vm = &fpriv->vm;
  603 + r = radeon_vm_init(rdev, vm);
  604 + if (r) {
  605 + kfree(fpriv);
  606 + return r;
  607 + }
  608 +
609 609 r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false);
610 610 if (r) {
611 611 radeon_vm_fini(rdev, vm);
612 612  
... ... @@ -663,9 +663,9 @@
663 663 radeon_vm_bo_rmv(rdev, vm->ib_bo_va);
664 664 radeon_bo_unreserve(rdev->ring_tmp_bo.bo);
665 665 }
  666 + radeon_vm_fini(rdev, vm);
666 667 }
667 668  
668   - radeon_vm_fini(rdev, vm);
669 669 kfree(fpriv);
670 670 file_priv->driver_priv = NULL;
671 671 }