64,10 → 64,7 |
return r; |
} |
|
r = radeon_semaphore_create(rdev, &ib->semaphore); |
if (r) { |
return r; |
} |
radeon_sync_create(&ib->sync); |
|
ib->ring = ring; |
ib->fence = NULL; |
96,7 → 93,7 |
*/ |
void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib) |
{ |
radeon_semaphore_free(rdev, &ib->semaphore, ib->fence); |
radeon_sync_free(rdev, &ib->sync, ib->fence); |
radeon_sa_bo_free(rdev, &ib->sa_bo, ib->fence); |
radeon_fence_unref(&ib->fence); |
} |
145,11 → 142,11 |
if (ib->vm) { |
struct radeon_fence *vm_id_fence; |
vm_id_fence = radeon_vm_grab_id(rdev, ib->vm, ib->ring); |
radeon_semaphore_sync_to(ib->semaphore, vm_id_fence); |
radeon_sync_fence(&ib->sync, vm_id_fence); |
} |
|
/* sync with other rings */ |
r = radeon_semaphore_sync_rings(rdev, ib->semaphore, ib->ring); |
r = radeon_sync_rings(rdev, &ib->sync, ib->ring); |
if (r) { |
dev_err(rdev->dev, "failed to sync rings (%d)\n", r); |
radeon_ring_unlock_undo(rdev, ring); |
157,11 → 154,12 |
} |
|
if (ib->vm) |
radeon_vm_flush(rdev, ib->vm, ib->ring); |
radeon_vm_flush(rdev, ib->vm, ib->ring, |
ib->sync.last_vm_update); |
|
if (const_ib) { |
radeon_ring_ib_execute(rdev, const_ib->ring, const_ib); |
radeon_semaphore_free(rdev, &const_ib->semaphore, NULL); |
radeon_sync_free(rdev, &const_ib->sync, NULL); |
} |
radeon_ring_ib_execute(rdev, ib->ring, ib); |
r = radeon_fence_emit(rdev, &ib->fence, ib->ring); |
269,6 → 267,7 |
|
r = radeon_ib_test(rdev, i, ring); |
if (r) { |
radeon_fence_driver_force_completion(rdev, i); |
ring->ready = false; |
rdev->needs_reset = false; |
|