|
@@ -105,30 +105,6 @@ int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned ndw)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * amdgpu_ring_lock - lock the ring and allocate space on it
|
|
|
- *
|
|
|
- * @adev: amdgpu_device pointer
|
|
|
- * @ring: amdgpu_ring structure holding ring information
|
|
|
- * @ndw: number of dwords to allocate in the ring buffer
|
|
|
- *
|
|
|
- * Lock the ring and allocate @ndw dwords in the ring buffer
|
|
|
- * (all asics).
|
|
|
- * Returns 0 on success, error on failure.
|
|
|
- */
|
|
|
-int amdgpu_ring_lock(struct amdgpu_ring *ring, unsigned ndw)
|
|
|
-{
|
|
|
- int r;
|
|
|
-
|
|
|
- mutex_lock(ring->ring_lock);
|
|
|
- r = amdgpu_ring_alloc(ring, ndw);
|
|
|
- if (r) {
|
|
|
- mutex_unlock(ring->ring_lock);
|
|
|
- return r;
|
|
|
- }
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/** amdgpu_ring_insert_nop - insert NOP packets
|
|
|
*
|
|
|
* @ring: amdgpu_ring structure holding ring information
|
|
@@ -167,20 +143,6 @@ void amdgpu_ring_commit(struct amdgpu_ring *ring)
|
|
|
amdgpu_ring_set_wptr(ring);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * amdgpu_ring_unlock_commit - tell the GPU to execute the new
|
|
|
- * commands on the ring buffer and unlock it
|
|
|
- *
|
|
|
- * @ring: amdgpu_ring structure holding ring information
|
|
|
- *
|
|
|
- * Call amdgpu_ring_commit() then unlock the ring (all asics).
|
|
|
- */
|
|
|
-void amdgpu_ring_unlock_commit(struct amdgpu_ring *ring)
|
|
|
-{
|
|
|
- amdgpu_ring_commit(ring);
|
|
|
- mutex_unlock(ring->ring_lock);
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* amdgpu_ring_undo - reset the wptr
|
|
|
*
|
|
@@ -193,19 +155,6 @@ void amdgpu_ring_undo(struct amdgpu_ring *ring)
|
|
|
ring->wptr = ring->wptr_old;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * amdgpu_ring_unlock_undo - reset the wptr and unlock the ring
|
|
|
- *
|
|
|
- * @ring: amdgpu_ring structure holding ring information
|
|
|
- *
|
|
|
- * Call amdgpu_ring_undo() then unlock the ring (all asics).
|
|
|
- */
|
|
|
-void amdgpu_ring_unlock_undo(struct amdgpu_ring *ring)
|
|
|
-{
|
|
|
- amdgpu_ring_undo(ring);
|
|
|
- mutex_unlock(ring->ring_lock);
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* amdgpu_ring_backup - Back up the content of a ring
|
|
|
*
|
|
@@ -218,43 +167,32 @@ unsigned amdgpu_ring_backup(struct amdgpu_ring *ring,
|
|
|
{
|
|
|
unsigned size, ptr, i;
|
|
|
|
|
|
- /* just in case lock the ring */
|
|
|
- mutex_lock(ring->ring_lock);
|
|
|
*data = NULL;
|
|
|
|
|
|
- if (ring->ring_obj == NULL) {
|
|
|
- mutex_unlock(ring->ring_lock);
|
|
|
+ if (ring->ring_obj == NULL)
|
|
|
return 0;
|
|
|
- }
|
|
|
|
|
|
/* it doesn't make sense to save anything if all fences are signaled */
|
|
|
- if (!amdgpu_fence_count_emitted(ring)) {
|
|
|
- mutex_unlock(ring->ring_lock);
|
|
|
+ if (!amdgpu_fence_count_emitted(ring))
|
|
|
return 0;
|
|
|
- }
|
|
|
|
|
|
ptr = le32_to_cpu(*ring->next_rptr_cpu_addr);
|
|
|
|
|
|
size = ring->wptr + (ring->ring_size / 4);
|
|
|
size -= ptr;
|
|
|
size &= ring->ptr_mask;
|
|
|
- if (size == 0) {
|
|
|
- mutex_unlock(ring->ring_lock);
|
|
|
+ if (size == 0)
|
|
|
return 0;
|
|
|
- }
|
|
|
|
|
|
/* and then save the content of the ring */
|
|
|
*data = kmalloc_array(size, sizeof(uint32_t), GFP_KERNEL);
|
|
|
- if (!*data) {
|
|
|
- mutex_unlock(ring->ring_lock);
|
|
|
+ if (!*data)
|
|
|
return 0;
|
|
|
- }
|
|
|
for (i = 0; i < size; ++i) {
|
|
|
(*data)[i] = ring->ring[ptr++];
|
|
|
ptr &= ring->ptr_mask;
|
|
|
}
|
|
|
|
|
|
- mutex_unlock(ring->ring_lock);
|
|
|
return size;
|
|
|
}
|
|
|
|
|
@@ -276,7 +214,7 @@ int amdgpu_ring_restore(struct amdgpu_ring *ring,
|
|
|
return 0;
|
|
|
|
|
|
/* restore the saved ring content */
|
|
|
- r = amdgpu_ring_lock(ring, size);
|
|
|
+ r = amdgpu_ring_alloc(ring, size);
|
|
|
if (r)
|
|
|
return r;
|
|
|
|
|
@@ -284,7 +222,7 @@ int amdgpu_ring_restore(struct amdgpu_ring *ring,
|
|
|
amdgpu_ring_write(ring, data[i]);
|
|
|
}
|
|
|
|
|
|
- amdgpu_ring_unlock_commit(ring);
|
|
|
+ amdgpu_ring_commit(ring);
|
|
|
kfree(data);
|
|
|
return 0;
|
|
|
}
|
|
@@ -352,7 +290,6 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
- ring->ring_lock = &adev->ring_lock;
|
|
|
/* Align ring size */
|
|
|
rb_bufsz = order_base_2(ring_size / 8);
|
|
|
ring_size = (1 << (rb_bufsz + 1)) * 4;
|
|
@@ -410,15 +347,10 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring)
|
|
|
int r;
|
|
|
struct amdgpu_bo *ring_obj;
|
|
|
|
|
|
- if (ring->ring_lock == NULL)
|
|
|
- return;
|
|
|
-
|
|
|
- mutex_lock(ring->ring_lock);
|
|
|
ring_obj = ring->ring_obj;
|
|
|
ring->ready = false;
|
|
|
ring->ring = NULL;
|
|
|
ring->ring_obj = NULL;
|
|
|
- mutex_unlock(ring->ring_lock);
|
|
|
|
|
|
amdgpu_wb_free(ring->adev, ring->fence_offs);
|
|
|
amdgpu_wb_free(ring->adev, ring->rptr_offs);
|