mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
drm/amdkfd: Ensure user queue buffers residency
Add atomic queue_refcount to struct bo_va, return -EBUSY to fail unmap BO from the GPU if the bo_va queue_refcount is not zero. Create queue to increase the bo_va queue_refcount, destroy queue to decrease the bo_va queue_refcount, to ensure the queue buffers mapped on the GPU when queue is active. Signed-off-by: Philip Yang <Philip.Yang@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
22a9d5cbf8
commit
834368eab3
@@ -1252,7 +1252,7 @@ static int unreserve_bo_and_vms(struct bo_vm_reservation_context *ctx,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void unmap_bo_from_gpuvm(struct kgd_mem *mem,
|
||||
static int unmap_bo_from_gpuvm(struct kgd_mem *mem,
|
||||
struct kfd_mem_attachment *entry,
|
||||
struct amdgpu_sync *sync)
|
||||
{
|
||||
@@ -1260,11 +1260,18 @@ static void unmap_bo_from_gpuvm(struct kgd_mem *mem,
|
||||
struct amdgpu_device *adev = entry->adev;
|
||||
struct amdgpu_vm *vm = bo_va->base.vm;
|
||||
|
||||
if (bo_va->queue_refcount) {
|
||||
pr_debug("bo_va->queue_refcount %d\n", bo_va->queue_refcount);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
amdgpu_vm_bo_unmap(adev, bo_va, entry->va);
|
||||
|
||||
amdgpu_vm_clear_freed(adev, vm, &bo_va->last_pt_update);
|
||||
|
||||
amdgpu_sync_fence(sync, bo_va->last_pt_update);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int update_gpuvm_pte(struct kgd_mem *mem,
|
||||
@@ -2191,7 +2198,10 @@ int amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(
|
||||
pr_debug("\t unmap VA 0x%llx - 0x%llx from entry %p\n",
|
||||
entry->va, entry->va + bo_size, entry);
|
||||
|
||||
unmap_bo_from_gpuvm(mem, entry, ctx.sync);
|
||||
ret = unmap_bo_from_gpuvm(mem, entry, ctx.sync);
|
||||
if (ret)
|
||||
goto unreserve_out;
|
||||
|
||||
entry->is_mapped = false;
|
||||
|
||||
mem->mapped_to_gpu_memory--;
|
||||
|
||||
Reference in New Issue
Block a user