diff options
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_kms.c | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index 0cc47f12d995..eaaedba04675 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c | |||
| @@ -577,28 +577,29 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv) | |||
| 577 | return r; | 577 | return r; |
| 578 | } | 578 | } |
| 579 | 579 | ||
| 580 | r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false); | 580 | if (rdev->accel_working) { |
| 581 | if (r) { | 581 | r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false); |
| 582 | radeon_vm_fini(rdev, &fpriv->vm); | 582 | if (r) { |
| 583 | kfree(fpriv); | 583 | radeon_vm_fini(rdev, &fpriv->vm); |
| 584 | return r; | 584 | kfree(fpriv); |
| 585 | } | 585 | return r; |
| 586 | } | ||
| 586 | 587 | ||
| 587 | /* map the ib pool buffer read only into | 588 | /* map the ib pool buffer read only into |
| 588 | * virtual address space */ | 589 | * virtual address space */ |
| 589 | bo_va = radeon_vm_bo_add(rdev, &fpriv->vm, | 590 | bo_va = radeon_vm_bo_add(rdev, &fpriv->vm, |
| 590 | rdev->ring_tmp_bo.bo); | 591 | rdev->ring_tmp_bo.bo); |
| 591 | r = radeon_vm_bo_set_addr(rdev, bo_va, RADEON_VA_IB_OFFSET, | 592 | r = radeon_vm_bo_set_addr(rdev, bo_va, RADEON_VA_IB_OFFSET, |
| 592 | RADEON_VM_PAGE_READABLE | | 593 | RADEON_VM_PAGE_READABLE | |
| 593 | RADEON_VM_PAGE_SNOOPED); | 594 | RADEON_VM_PAGE_SNOOPED); |
| 594 | 595 | ||
| 595 | radeon_bo_unreserve(rdev->ring_tmp_bo.bo); | 596 | radeon_bo_unreserve(rdev->ring_tmp_bo.bo); |
| 596 | if (r) { | 597 | if (r) { |
| 597 | radeon_vm_fini(rdev, &fpriv->vm); | 598 | radeon_vm_fini(rdev, &fpriv->vm); |
| 598 | kfree(fpriv); | 599 | kfree(fpriv); |
| 599 | return r; | 600 | return r; |
| 601 | } | ||
| 600 | } | 602 | } |
| 601 | |||
| 602 | file_priv->driver_priv = fpriv; | 603 | file_priv->driver_priv = fpriv; |
| 603 | } | 604 | } |
| 604 | 605 | ||
| @@ -626,13 +627,15 @@ void radeon_driver_postclose_kms(struct drm_device *dev, | |||
| 626 | struct radeon_bo_va *bo_va; | 627 | struct radeon_bo_va *bo_va; |
| 627 | int r; | 628 | int r; |
| 628 | 629 | ||
| 629 | r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false); | 630 | if (rdev->accel_working) { |
| 630 | if (!r) { | 631 | r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false); |
| 631 | bo_va = radeon_vm_bo_find(&fpriv->vm, | 632 | if (!r) { |
| 632 | rdev->ring_tmp_bo.bo); | 633 | bo_va = radeon_vm_bo_find(&fpriv->vm, |
| 633 | if (bo_va) | 634 | rdev->ring_tmp_bo.bo); |
| 634 | radeon_vm_bo_rmv(rdev, bo_va); | 635 | if (bo_va) |
| 635 | radeon_bo_unreserve(rdev->ring_tmp_bo.bo); | 636 | radeon_vm_bo_rmv(rdev, bo_va); |
| 637 | radeon_bo_unreserve(rdev->ring_tmp_bo.bo); | ||
| 638 | } | ||
| 636 | } | 639 | } |
| 637 | 640 | ||
| 638 | radeon_vm_fini(rdev, &fpriv->vm); | 641 | radeon_vm_fini(rdev, &fpriv->vm); |
