Example #1
0
/**
 * amdgpu_ring_fini - tear down the driver ring struct.
 *
 * @adev: amdgpu_device pointer
 * @ring: amdgpu_ring structure holding ring information
 *
 * Tear down the driver information for the selected ring (all asics).
 */
void amdgpu_ring_fini(struct amdgpu_ring *ring)
{
    int r;
    struct amdgpu_bo *ring_obj;

    ring_obj = ring->ring_obj;
    ring->ready = false;
    ring->ring = NULL;
    ring->ring_obj = NULL;

    amdgpu_wb_free(ring->adev, ring->cond_exe_offs);
    amdgpu_wb_free(ring->adev, ring->fence_offs);
    amdgpu_wb_free(ring->adev, ring->rptr_offs);
    amdgpu_wb_free(ring->adev, ring->wptr_offs);

    if (ring_obj) {
        r = amdgpu_bo_reserve(ring_obj, false);
        if (likely(r == 0)) {
            amdgpu_bo_kunmap(ring_obj);
            amdgpu_bo_unpin(ring_obj);
            amdgpu_bo_unreserve(ring_obj);
        }
        amdgpu_bo_unref(&ring_obj);
    }
    amdgpu_debugfs_ring_fini(ring);
}
Example #2
0
/**
 * amdgpu_ring_fini - tear down the driver ring struct.
 *
 * @adev: amdgpu_device pointer
 * @ring: amdgpu_ring structure holding ring information
 *
 * Tear down the driver information for the selected ring (all asics).
 */
void amdgpu_ring_fini(struct amdgpu_ring *ring)
{
	ring->ready = false;

	amdgpu_wb_free(ring->adev, ring->cond_exe_offs);
	amdgpu_wb_free(ring->adev, ring->fence_offs);
	amdgpu_wb_free(ring->adev, ring->rptr_offs);
	amdgpu_wb_free(ring->adev, ring->wptr_offs);

	amdgpu_bo_free_kernel(&ring->ring_obj,
			      &ring->gpu_addr,
			      (void **)&ring->ring);

	amdgpu_debugfs_ring_fini(ring);

	ring->adev->rings[ring->idx] = NULL;
}