Lines Matching full:process

57 /* For process termination handling */
184 mm = get_task_mm(pdd->process->lead_thread); in kfd_sdma_activity_worker()
255 * by current process. Translates acquired wave count into number of compute units
283 proc = pdd->process; in kfd_get_cu_occupancy()
285 pr_debug("Gpu-Id: %d has no active queues for process pid %d\n", in kfd_get_cu_occupancy()
525 if (!q || !q->process) in kfd_procfs_add_queue()
527 proc = q->process; in kfd_procfs_add_queue()
732 /* kfd_process_alloc_gpuvm - Allocate GPU VM for the KFD process
733 * This function should be only called right after the process
786 * process for IB usage The memory reserved is for KFD to submit
827 int kfd_create_process_sysfs(struct kfd_process *process) in kfd_create_process_sysfs() argument
832 if (process->kobj) { in kfd_create_process_sysfs()
837 process->kobj = kfd_alloc_struct(process->kobj); in kfd_create_process_sysfs()
838 if (!process->kobj) { in kfd_create_process_sysfs()
843 if (process->context_id == KFD_CONTEXT_ID_PRIMARY) in kfd_create_process_sysfs()
844 ret = kobject_init_and_add(process->kobj, &procfs_type, in kfd_create_process_sysfs()
846 (int)process->lead_thread->pid); in kfd_create_process_sysfs()
848 primary_process = kfd_lookup_process_by_mm(process->lead_thread->mm); in kfd_create_process_sysfs()
852 ret = kobject_init_and_add(process->kobj, &procfs_type, in kfd_create_process_sysfs()
854 process->context_id); in kfd_create_process_sysfs()
860 kobject_put(process->kobj); in kfd_create_process_sysfs()
864 kfd_sysfs_create_file(process->kobj, &process->attr_pasid, in kfd_create_process_sysfs()
867 process->kobj_queues = kobject_create_and_add("queues", in kfd_create_process_sysfs()
868 process->kobj); in kfd_create_process_sysfs()
869 if (!process->kobj_queues) in kfd_create_process_sysfs()
872 kfd_procfs_add_sysfs_stats(process); in kfd_create_process_sysfs()
873 kfd_procfs_add_sysfs_files(process); in kfd_create_process_sysfs()
874 kfd_procfs_add_sysfs_counters(process); in kfd_create_process_sysfs()
879 static int kfd_process_alloc_id(struct kfd_process *process) in kfd_process_alloc_id() argument
885 if (process->context_id == KFD_CONTEXT_ID_PRIMARY) in kfd_process_alloc_id()
888 primary_process = kfd_lookup_process_by_mm(process->lead_thread->mm); in kfd_process_alloc_id()
898 process->context_id = ret; in kfd_process_alloc_id()
907 static void kfd_process_free_id(struct kfd_process *process) in kfd_process_free_id() argument
911 if (process->context_id != KFD_CONTEXT_ID_PRIMARY) in kfd_process_free_id()
914 primary_process = kfd_lookup_process_by_mm(process->lead_thread->mm); in kfd_process_free_id()
918 ida_free(&primary_process->id_table, process->context_id); in kfd_process_free_id()
925 struct kfd_process *process; in kfd_create_process() local
931 /* If the process just called exec(3), it is possible that the in kfd_create_process()
933 * of the old process image) is still in the cleanup work queue. in kfd_create_process()
935 * resource for this process. in kfd_create_process()
940 * take kfd processes mutex before starting of process creation in kfd_create_process()
941 * so there won't be a case where two threads of the same process in kfd_create_process()
947 pr_warn("no gpu node! Cannot create KFD process"); in kfd_create_process()
948 process = ERR_PTR(-EINVAL); in kfd_create_process()
953 pr_debug("KFD is locked! Cannot create process"); in kfd_create_process()
954 process = ERR_PTR(-EINVAL); in kfd_create_process()
958 /* A prior open of /dev/kfd could have already created the process. in kfd_create_process()
959 * find_process will increase process kref in this case in kfd_create_process()
961 process = find_process(thread, true); in kfd_create_process()
962 if (process) { in kfd_create_process()
963 pr_debug("Process already found\n"); in kfd_create_process()
965 process = create_process(thread, true); in kfd_create_process()
966 if (IS_ERR(process)) in kfd_create_process()
972 ret = kfd_create_process_sysfs(process); in kfd_create_process()
976 kfd_debugfs_add_process(process); in kfd_create_process()
978 init_waitqueue_head(&process->wait_irq_drain); in kfd_create_process()
984 return process; in kfd_create_process()
989 struct kfd_process *process; in find_process_by_mm() local
991 hash_for_each_possible_rcu(kfd_processes_table, process, in find_process_by_mm()
993 if (process->mm == mm && process->context_id == KFD_CONTEXT_ID_PRIMARY) in find_process_by_mm()
994 return process; in find_process_by_mm()
1019 /* This increments the process->ref counter. */
1042 struct kfd_process *p = pdd->process; in kfd_process_device_free_bos()
1208 /* No process locking is needed in this function, because the process
1210 * using it any more, otherwise we couldn't safely free the process
1253 /* the last step is removing process entries under /sys in kfd_process_wq_release()
1254 * to indicate the process has been terminated. in kfd_process_wq_release()
1271 /* This increments p->ref counter if kfd process p exists */ in kfd_process_alloc_notifier()
1312 * exit_mmap free process memory afterwards. in kfd_process_notifier_release_internal()
1387 * Move all remaining kfd_process from the process table to a in kfd_cleanup_processes()
1481 pdd->process->debug_trap_enabled); in kfd_process_device_init_cwsr_dgpu()
1530 * XNACK mode for this process that's compatible with all GPUs. in kfd_process_xnack_mode()
1548 * per-process XNACK mode selection. But let the dev->noretry in kfd_process_xnack_mode()
1591 struct kfd_process *process; in create_process() local
1595 process = kzalloc_obj(*process); in create_process()
1596 if (!process) in create_process()
1599 kref_init(&process->ref); in create_process()
1600 mutex_init(&process->mutex); in create_process()
1601 process->mm = thread->mm; in create_process()
1602 process->lead_thread = thread->group_leader; in create_process()
1603 process->n_pdds = 0; in create_process()
1604 process->queues_paused = false; in create_process()
1606 INIT_DELAYED_WORK(&process->eviction_work, evict_process_worker); in create_process()
1607 INIT_DELAYED_WORK(&process->restore_work, restore_process_worker); in create_process()
1608 process->last_restore_timestamp = get_jiffies_64(); in create_process()
1609 err = kfd_event_init_process(process); in create_process()
1612 process->is_32bit_user_mode = in_compat_syscall(); in create_process()
1613 process->debug_trap_enabled = false; in create_process()
1614 process->debugger_process = NULL; in create_process()
1615 process->exception_enable_mask = 0; in create_process()
1616 atomic_set(&process->debugged_process_count, 0); in create_process()
1617 sema_init(&process->runtime_enable_sema, 0); in create_process()
1619 err = pqm_init(&process->pqm, process); in create_process()
1623 /* init process apertures*/ in create_process()
1624 err = kfd_init_apertures(process); in create_process()
1629 process->xnack_enabled = kfd_process_xnack_mode(process, false); in create_process()
1631 err = svm_range_list_init(process); in create_process()
1635 /* alloc_notifier needs to find the process in the hash table */ in create_process()
1636 hash_add_rcu(kfd_processes_table, &process->kfd_processes, in create_process()
1637 (uintptr_t)process->mm); in create_process()
1642 kref_get(&process->ref); in create_process()
1645 * because after this point we cannot unwind the process creation. in create_process()
1647 * dropping the last process reference in the free_notifier. in create_process()
1650 process->context_id = KFD_CONTEXT_ID_PRIMARY; in create_process()
1651 mn = mmu_notifier_get(&kfd_process_mmu_notifier_ops, process->mm); in create_process()
1656 BUG_ON(mn != &process->mmu_notifier); in create_process()
1657 ida_init(&process->id_table); in create_process()
1660 err = kfd_process_alloc_id(process); in create_process()
1662 pr_err("Creating kfd process: failed to alloc an id\n"); in create_process()
1666 kfd_unref_process(process); in create_process()
1667 get_task_struct(process->lead_thread); in create_process()
1669 INIT_WORK(&process->debug_event_workarea, debug_event_write_work_handler); in create_process()
1671 return process; in create_process()
1674 kfd_process_free_id(process); in create_process()
1676 hash_del_rcu(&process->kfd_processes); in create_process()
1677 svm_range_list_fini(process); in create_process()
1679 kfd_process_free_outstanding_kfd_bos(process); in create_process()
1680 kfd_process_destroy_pdds(process); in create_process()
1682 pqm_uninit(&process->pqm); in create_process()
1684 kfd_event_free_process(process); in create_process()
1686 mutex_destroy(&process->mutex); in create_process()
1687 kfree(process); in create_process()
1722 pdd->process = p; in kfd_create_process_device_data()
1747 * kfd_process_device_init_vm - Initialize a VM for a process-device
1749 * @pdd: The process-device
1778 p = pdd->process; in kfd_process_device_init_vm()
1785 dev_err(dev->adev->dev, "Failed to create process VM object\n"); in kfd_process_device_init_vm()
1827 * Direct the IOMMU to bind the process (specifically the pasid->mm)
1829 * Unbinding occurs when the process dies or the device is removed.
1831 * Assumes that the process lock is held.
1841 dev_err(dev->adev->dev, "Process device data doesn't exist\n"); in kfd_bind_process_to_device()
1870 /* Create specific handle mapped to mem from process local memory idr
1871 * Assumes that the process lock is held.
1879 /* Translate specific handle from process local memory idr
1880 * Assumes that the process lock is held.
1891 /* Remove specific handle from process local memory idr
1892 * Assumes that the process lock is held.
1921 /* This increments the process->ref counter. */
1933 kref_get(&ret_p->process->ref); in kfd_lookup_process_by_pasid()
1936 return ret_p->process; in kfd_lookup_process_by_pasid()
1947 /* This increments the process->ref counter. */
1963 /* This increments the process->ref counter. */
1984 /* kfd_process_evict_queues - Evict all user queues of a process
1986 * Eviction is reference-counted per process-device. This means multiple
2009 dev_err(dev, "Failed to evict process queues\n"); in kfd_process_evict_queues()
2042 /* kfd_process_restore_queues - Restore all user queues of a process */
2057 dev_err(dev, "Failed to restore process queues\n"); in kfd_process_restore_queues()
2116 /* Process termination destroys this worker thread. So during the in evict_process_worker()
2121 pr_debug("Started evicting process pid %d\n", p->lead_thread->pid); in evict_process_worker()
2133 pr_debug("Finished evicting process pid %d\n", p->lead_thread->pid); in evict_process_worker()
2135 pr_err("Failed to evict queues of process pid %d\n", p->lead_thread->pid); in evict_process_worker()
2152 pr_debug("Finished restoring process pid %d\n", in restore_process_helper()
2155 pr_err("Failed to restore queues of process pid %d\n", in restore_process_helper()
2169 /* Process termination destroys this worker thread. So during the in restore_process_worker()
2173 pr_debug("Started restoring process pasid %d\n", (int)p->lead_thread->pid); in restore_process_worker()
2177 * before KFD BOs are unreserved. If not, the process can be evicted in restore_process_worker()
2189 pr_debug("Failed to restore BOs of process pid %d, retry after %d ms\n", in restore_process_worker()
2206 pr_err("Failed to suspend process pid %d\n", p->lead_thread->pid); in kfd_suspend_all_processes()
2220 pr_err("Restore process pid %d failed during resume\n", in kfd_resume_all_processes()
2229 int kfd_reserved_mem_mmap(struct kfd_node *dev, struct kfd_process *process, in kfd_reserved_mem_mmap() argument
2240 pdd = kfd_get_process_device_data(dev, process); in kfd_reserved_mem_mmap()
2249 "Error allocating per process CWSR buffer.\n"); in kfd_reserved_mem_mmap()
2255 /* Mapping pages to user process */ in kfd_reserved_mem_mmap()
2261 /* assumes caller holds process lock. */
2271 pdd->process->irq_drain_is_open = true; in kfd_process_drain_interrupts()
2292 pdd->process->irq_drain_is_open = false; in kfd_process_drain_interrupts()
2296 r = wait_event_interruptible(pdd->process->wait_irq_drain, in kfd_process_drain_interrupts()
2297 !READ_ONCE(pdd->process->irq_drain_is_open)); in kfd_process_drain_interrupts()
2299 pdd->process->irq_drain_is_open = false; in kfd_process_drain_interrupts()
2429 seq_printf(m, "Process %d PASID %d:\n", in kfd_debugfs_mqds_by_process()