Lines Matching full:process
69 struct amdgpu_mes_process *process, in amdgpu_mes_queue_doorbell_get() argument
76 found = find_next_zero_bit(process->doorbell_bitmap, in amdgpu_mes_queue_doorbell_get()
80 found = find_first_zero_bit(process->doorbell_bitmap, in amdgpu_mes_queue_doorbell_get()
89 set_bit(found, process->doorbell_bitmap); in amdgpu_mes_queue_doorbell_get()
92 process->doorbell_index, found); in amdgpu_mes_queue_doorbell_get()
98 struct amdgpu_mes_process *process, in amdgpu_mes_queue_doorbell_free() argument
104 (process->doorbell_index * in amdgpu_mes_queue_doorbell_free()
108 old = test_and_clear_bit(doorbell_id, process->doorbell_bitmap); in amdgpu_mes_queue_doorbell_free()
269 struct amdgpu_mes_process *process; in amdgpu_mes_create_process() local
272 /* allocate the mes process buffer */ in amdgpu_mes_create_process()
273 process = kzalloc(sizeof(struct amdgpu_mes_process), GFP_KERNEL); in amdgpu_mes_create_process()
274 if (!process) { in amdgpu_mes_create_process()
275 DRM_ERROR("no more memory to create mes process\n"); in amdgpu_mes_create_process()
279 process->doorbell_bitmap = in amdgpu_mes_create_process()
282 if (!process->doorbell_bitmap) { in amdgpu_mes_create_process()
284 kfree(process); in amdgpu_mes_create_process()
288 /* allocate the process context bo and map it */ in amdgpu_mes_create_process()
291 &process->proc_ctx_bo, in amdgpu_mes_create_process()
292 &process->proc_ctx_gpu_addr, in amdgpu_mes_create_process()
293 &process->proc_ctx_cpu_ptr); in amdgpu_mes_create_process()
295 DRM_ERROR("failed to allocate process context bo\n"); in amdgpu_mes_create_process()
298 memset(process->proc_ctx_cpu_ptr, 0, AMDGPU_MES_PROC_CTX_SIZE); in amdgpu_mes_create_process()
306 /* add the mes process to idr list */ in amdgpu_mes_create_process()
307 r = idr_alloc(&adev->mes.pasid_idr, process, pasid, pasid + 1, in amdgpu_mes_create_process()
314 /* allocate the starting doorbell index of the process */ in amdgpu_mes_create_process()
315 r = amdgpu_mes_alloc_process_doorbells(adev, &process->doorbell_index); in amdgpu_mes_create_process()
317 DRM_ERROR("failed to allocate doorbell for process\n"); in amdgpu_mes_create_process()
321 DRM_DEBUG("process doorbell index = %d\n", process->doorbell_index); in amdgpu_mes_create_process()
323 INIT_LIST_HEAD(&process->gang_list); in amdgpu_mes_create_process()
324 process->vm = vm; in amdgpu_mes_create_process()
325 process->pasid = pasid; in amdgpu_mes_create_process()
326 process->process_quantum = adev->mes.default_process_quantum; in amdgpu_mes_create_process()
327 process->pd_gpu_addr = amdgpu_bo_gpu_offset(vm->root.bo); in amdgpu_mes_create_process()
336 amdgpu_bo_free_kernel(&process->proc_ctx_bo, in amdgpu_mes_create_process()
337 &process->proc_ctx_gpu_addr, in amdgpu_mes_create_process()
338 &process->proc_ctx_cpu_ptr); in amdgpu_mes_create_process()
340 kfree(process->doorbell_bitmap); in amdgpu_mes_create_process()
341 kfree(process); in amdgpu_mes_create_process()
347 struct amdgpu_mes_process *process; in amdgpu_mes_destroy_process() local
360 process = idr_find(&adev->mes.pasid_idr, pasid); in amdgpu_mes_destroy_process()
361 if (!process) { in amdgpu_mes_destroy_process()
368 list_for_each_entry_safe(gang, tmp1, &process->gang_list, list) { in amdgpu_mes_destroy_process()
386 amdgpu_mes_free_process_doorbells(adev, process->doorbell_index); in amdgpu_mes_destroy_process()
390 /* free all memory allocated by the process */ in amdgpu_mes_destroy_process()
391 list_for_each_entry_safe(gang, tmp1, &process->gang_list, list) { in amdgpu_mes_destroy_process()
405 amdgpu_bo_free_kernel(&process->proc_ctx_bo, in amdgpu_mes_destroy_process()
406 &process->proc_ctx_gpu_addr, in amdgpu_mes_destroy_process()
407 &process->proc_ctx_cpu_ptr); in amdgpu_mes_destroy_process()
408 kfree(process->doorbell_bitmap); in amdgpu_mes_destroy_process()
409 kfree(process); in amdgpu_mes_destroy_process()
416 struct amdgpu_mes_process *process; in amdgpu_mes_add_gang() local
433 DRM_ERROR("failed to allocate process context bo\n"); in amdgpu_mes_add_gang()
444 process = idr_find(&adev->mes.pasid_idr, pasid); in amdgpu_mes_add_gang()
445 if (!process) { in amdgpu_mes_add_gang()
463 gang->process = process; in amdgpu_mes_add_gang()
469 list_add_tail(&gang->list, &process->gang_list); in amdgpu_mes_add_gang()
523 struct amdgpu_mes_process *process; in amdgpu_mes_suspend() local
536 idr_for_each_entry(idp, process, pasid) { in amdgpu_mes_suspend()
537 list_for_each_entry(gang, &process->gang_list, list) { in amdgpu_mes_suspend()
552 struct amdgpu_mes_process *process; in amdgpu_mes_resume() local
565 idr_for_each_entry(idp, process, pasid) { in amdgpu_mes_resume()
566 list_for_each_entry(gang, &process->gang_list, list) { in amdgpu_mes_resume()
680 r = amdgpu_mes_queue_doorbell_get(adev, gang->process, in amdgpu_mes_add_hw_queue()
690 queue_input.process_id = gang->process->pasid; in amdgpu_mes_add_hw_queue()
693 adev->vm_manager.vram_base_offset + gang->process->pd_gpu_addr - in amdgpu_mes_add_hw_queue()
699 queue_input.process_quantum = gang->process->process_quantum; in amdgpu_mes_add_hw_queue()
700 queue_input.process_context_addr = gang->process->proc_ctx_gpu_addr; in amdgpu_mes_add_hw_queue()
722 gang->process->pasid, gang_id, qprops->queue_type, in amdgpu_mes_add_hw_queue()
738 amdgpu_mes_queue_doorbell_free(adev, gang->process, in amdgpu_mes_add_hw_queue()
793 amdgpu_mes_queue_doorbell_free(adev, gang->process, in amdgpu_mes_remove_hw_queue()
1001 pasid = gang->process->pasid; in amdgpu_mes_add_ring()
1044 dma_fence_wait(gang->process->vm->last_update, false); in amdgpu_mes_add_ring()
1262 /* create a gang for the process */ in amdgpu_mes_test_create_gang_and_queues()
1370 DRM_ERROR("failed to create MES process\n"); in amdgpu_mes_self_test()