drm/radeon: fix adding all VAs to the freed list on remove v2
authorChristian König <christian.koenig@amd.com>
Fri, 26 Jun 2015 10:31:29 +0000 (12:31 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 29 Jun 2015 15:21:50 +0000 (11:21 -0400)
We only should do so when the BO_VA was actually mapped.
Otherwise we get a nice error message on the next CS.

v2: It actually doesn't matter if it was invalidated or not,
    if it was mapped we need to clear the area where it was mapped.

Signed-off-by: Christian König <christian.koenig@amd.com>
Tested-by: Michel Dänzer <michel.daenzer@amd.com> (v1)
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/radeon/radeon_vm.c

index 9739ded91b7a6d5a5b422c018f793bff728c98c6..618ab5ec8e6249483050bc5a1f3c88916850bf08 100644 (file)
@@ -1122,12 +1122,12 @@ void radeon_vm_bo_rmv(struct radeon_device *rdev,
                interval_tree_remove(&bo_va->it, &vm->va);
 
        spin_lock(&vm->status_lock);
-       if (list_empty(&bo_va->vm_status)) {
+       list_del(&bo_va->vm_status);
+       if (bo_va->it.start || bo_va->it.last) {
                bo_va->bo = radeon_bo_ref(bo_va->bo);
                list_add(&bo_va->vm_status, &vm->freed);
        } else {
                radeon_fence_unref(&bo_va->last_pt_update);
-               list_del(&bo_va->vm_status);
                kfree(bo_va);
        }
        spin_unlock(&vm->status_lock);