diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_gem.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_gem.c | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c index 84d045245739..1b57b0058ad6 100644 --- a/drivers/gpu/drm/radeon/radeon_gem.c +++ b/drivers/gpu/drm/radeon/radeon_gem.c | |||
| @@ -134,25 +134,16 @@ void radeon_gem_object_close(struct drm_gem_object *obj, | |||
| 134 | struct radeon_device *rdev = rbo->rdev; | 134 | struct radeon_device *rdev = rbo->rdev; |
| 135 | struct radeon_fpriv *fpriv = file_priv->driver_priv; | 135 | struct radeon_fpriv *fpriv = file_priv->driver_priv; |
| 136 | struct radeon_vm *vm = &fpriv->vm; | 136 | struct radeon_vm *vm = &fpriv->vm; |
| 137 | struct radeon_bo_va *bo_va, *tmp; | ||
| 138 | 137 | ||
| 139 | if (rdev->family < CHIP_CAYMAN) { | 138 | if (rdev->family < CHIP_CAYMAN) { |
| 140 | return; | 139 | return; |
| 141 | } | 140 | } |
| 142 | 141 | ||
| 143 | if (radeon_bo_reserve(rbo, false)) { | 142 | if (radeon_bo_reserve(rbo, false)) { |
| 143 | dev_err(rdev->dev, "leaking bo va because we fail to reserve bo\n"); | ||
| 144 | return; | 144 | return; |
| 145 | } | 145 | } |
| 146 | list_for_each_entry_safe(bo_va, tmp, &rbo->va, bo_list) { | 146 | radeon_vm_bo_rmv(rdev, vm, rbo); |
| 147 | if (bo_va->vm == vm) { | ||
| 148 | /* remove from this vm address space */ | ||
| 149 | mutex_lock(&vm->mutex); | ||
| 150 | list_del(&bo_va->vm_list); | ||
| 151 | mutex_unlock(&vm->mutex); | ||
| 152 | list_del(&bo_va->bo_list); | ||
| 153 | kfree(bo_va); | ||
| 154 | } | ||
| 155 | } | ||
| 156 | radeon_bo_unreserve(rbo); | 147 | radeon_bo_unreserve(rbo); |
| 157 | } | 148 | } |
| 158 | 149 | ||
