Lines Matching defs:pdd

75 static void kfd_process_device_destroy_cwsr_dgpu(struct kfd_process_device *pdd);
88 struct kfd_process_device *pdd;
102 struct kfd_process_device *pdd;
115 pdd = workarea->pdd;
116 if (!pdd)
118 dqm = pdd->dev->dqm;
119 qpd = &pdd->qpd;
124 * Past SDMA count is stored in pdd.
174 workarea->sdma_activity_counter = pdd->sdma_past_activity_counter;
184 mm = get_task_mm(pdd->process->lead_thread);
211 workarea->sdma_activity_counter += pdd->sdma_past_activity_counter;
272 struct kfd_process_device *pdd = NULL;
274 pdd = container_of(attr, struct kfd_process_device, attr_cu_occupancy);
275 dev = pdd->dev;
280 proc = pdd->process;
281 if (pdd->qpd.queue_count == 0) {
307 struct kfd_process_device *pdd = container_of(attr, struct kfd_process_device,
309 return snprintf(buffer, PAGE_SIZE, "%llu\n", atomic64_read(&pdd->vram_usage));
311 struct kfd_process_device *pdd = container_of(attr, struct kfd_process_device,
318 sdma_activity_work_handler.pdd = pdd;
399 struct kfd_process_device *pdd = container_of(attr,
404 evict_jiffies = atomic64_read(&pdd->evict_duration_counter);
424 struct kfd_process_device *pdd;
427 pdd = container_of(attr, struct kfd_process_device,
429 return sysfs_emit(buf, "%llu\n", READ_ONCE(pdd->faults));
432 pdd = container_of(attr, struct kfd_process_device,
434 return sysfs_emit(buf, "%llu\n", READ_ONCE(pdd->page_in));
437 pdd = container_of(attr, struct kfd_process_device,
439 return sysfs_emit(buf, "%llu\n", READ_ONCE(pdd->page_out));
551 struct kfd_process_device *pdd = p->pdds[i];
554 "stats_%u", pdd->dev->id);
555 pdd->kobj_stats = kfd_alloc_struct(pdd->kobj_stats);
556 if (!pdd->kobj_stats)
559 ret = kobject_init_and_add(pdd->kobj_stats,
567 kobject_put(pdd->kobj_stats);
568 pdd->kobj_stats = NULL;
572 kfd_sysfs_create_file(pdd->kobj_stats, &pdd->attr_evict,
575 if (pdd->dev->kfd2kgd->get_cu_occupancy)
576 kfd_sysfs_create_file(pdd->kobj_stats,
577 &pdd->attr_cu_occupancy,
599 struct kfd_process_device *pdd = p->pdds[i];
603 "counters_%u", pdd->dev->id);
617 pdd->kobj_counters = kobj_counters;
618 kfd_sysfs_create_file(kobj_counters, &pdd->attr_faults,
620 kfd_sysfs_create_file(kobj_counters, &pdd->attr_page_in,
622 kfd_sysfs_create_file(kobj_counters, &pdd->attr_page_out,
640 struct kfd_process_device *pdd = p->pdds[i];
642 snprintf(pdd->vram_filename, MAX_SYSFS_FILENAME_LEN, "vram_%u",
643 pdd->dev->id);
644 kfd_sysfs_create_file(p->kobj, &pdd->attr_vram,
645 pdd->vram_filename);
647 snprintf(pdd->sdma_filename, MAX_SYSFS_FILENAME_LEN, "sdma_%u",
648 pdd->dev->id);
649 kfd_sysfs_create_file(p->kobj, &pdd->attr_sdma,
650 pdd->sdma_filename);
691 struct kfd_process_device *pdd, void **kptr)
693 struct kfd_node *dev = pdd->dev;
700 amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(dev->adev, mem, pdd->drm_priv);
701 amdgpu_amdkfd_gpuvm_free_memory_of_gpu(dev->adev, mem, pdd->drm_priv,
711 static int kfd_process_alloc_gpuvm(struct kfd_process_device *pdd,
715 struct kfd_node *kdev = pdd->dev;
719 pdd->drm_priv, mem, NULL,
725 pdd->drm_priv);
747 amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(kdev->adev, *mem, pdd->drm_priv);
750 amdgpu_amdkfd_gpuvm_free_memory_of_gpu(kdev->adev, *mem, pdd->drm_priv,
764 static int kfd_process_device_reserve_ib_mem(struct kfd_process_device *pdd)
766 struct qcm_process_device *qpd = &pdd->qpd;
779 ret = kfd_process_alloc_gpuvm(pdd, qpd->ib_base, PAGE_SIZE, flags,
790 static void kfd_process_device_destroy_ib_mem(struct kfd_process_device *pdd)
792 struct qcm_process_device *qpd = &pdd->qpd;
797 kfd_process_free_gpuvm(qpd->ib_mem, pdd, &qpd->ib_kaddr);
955 static void kfd_process_device_free_bos(struct kfd_process_device *pdd)
957 struct kfd_process *p = pdd->process;
966 idr_for_each_entry(&pdd->alloc_idr, mem, id) {
977 amdgpu_amdkfd_gpuvm_free_memory_of_gpu(pdd->dev->adev, mem,
978 pdd->drm_priv, NULL);
979 kfd_process_device_remove_obj_handle(pdd, id);
989 struct kfd_process_device *pdd;
999 pdd = kfd_get_process_device_data(kdev, p);
1000 if (!pdd)
1004 pdd, GET_IDR_HANDLE(p->signal_handle));
1027 struct kfd_process_device *pdd = p->pdds[i];
1029 pr_debug("Releasing pdd (topology id %d) for process (pasid 0x%x)\n",
1030 pdd->dev->id, p->pasid);
1032 kfd_process_device_destroy_cwsr_dgpu(pdd);
1033 kfd_process_device_destroy_ib_mem(pdd);
1035 if (pdd->drm_file) {
1037 pdd->dev->adev, pdd->drm_priv);
1038 fput(pdd->drm_file);
1041 if (pdd->qpd.cwsr_kaddr && !pdd->qpd.cwsr_base)
1042 free_pages((unsigned long)pdd->qpd.cwsr_kaddr,
1045 idr_destroy(&pdd->alloc_idr);
1047 kfd_free_process_doorbells(pdd->dev->kfd, pdd);
1049 if (pdd->dev->kfd->shared_resources.enable_mes)
1050 amdgpu_amdkfd_free_gtt_mem(pdd->dev->adev,
1051 &pdd->proc_ctx_bo);
1053 * before destroying pdd, make sure to report availability
1056 if (pdd->runtime_inuse) {
1057 pm_runtime_mark_last_busy(adev_to_drm(pdd->dev->adev)->dev);
1058 pm_runtime_put_autosuspend(adev_to_drm(pdd->dev->adev)->dev);
1059 pdd->runtime_inuse = false;
1062 kfree(pdd);
1070 struct kfd_process_device *pdd;
1082 pdd = p->pdds[i];
1084 sysfs_remove_file(p->kobj, &pdd->attr_vram);
1085 sysfs_remove_file(p->kobj, &pdd->attr_sdma);
1087 sysfs_remove_file(pdd->kobj_stats, &pdd->attr_evict);
1088 if (pdd->dev->kfd2kgd->get_cu_occupancy)
1089 sysfs_remove_file(pdd->kobj_stats,
1090 &pdd->attr_cu_occupancy);
1091 kobject_del(pdd->kobj_stats);
1092 kobject_put(pdd->kobj_stats);
1093 pdd->kobj_stats = NULL;
1097 pdd = p->pdds[i];
1099 sysfs_remove_file(pdd->kobj_counters, &pdd->attr_faults);
1100 sysfs_remove_file(pdd->kobj_counters, &pdd->attr_page_in);
1101 sysfs_remove_file(pdd->kobj_counters, &pdd->attr_page_out);
1102 kobject_del(pdd->kobj_counters);
1103 kobject_put(pdd->kobj_counters);
1104 pdd->kobj_counters = NULL;
1181 struct kfd_process_device *pdd = p->pdds[i];
1184 if (!kfd_dbg_is_rlc_restore_supported(pdd->dev) && p->runtime_info.ttmp_setup)
1185 amdgpu_gfx_off_ctrl(pdd->dev->adev, true);
1331 static int kfd_process_device_init_cwsr_dgpu(struct kfd_process_device *pdd)
1333 struct kfd_node *dev = pdd->dev;
1334 struct qcm_process_device *qpd = &pdd->qpd;
1346 ret = kfd_process_alloc_gpuvm(pdd, qpd->cwsr_base,
1357 kfd_process_set_trap_debug_flag(&pdd->qpd,
1358 pdd->process->debug_trap_enabled);
1367 static void kfd_process_device_destroy_cwsr_dgpu(struct kfd_process_device *pdd)
1369 struct kfd_node *dev = pdd->dev;
1370 struct qcm_process_device *qpd = &pdd->qpd;
1375 kfd_process_free_gpuvm(qpd->cwsr_mem, pdd, &qpd->cwsr_kaddr);
1573 struct kfd_process_device *pdd = NULL;
1578 pdd = kzalloc(sizeof(*pdd), GFP_KERNEL);
1579 if (!pdd)
1582 pdd->dev = dev;
1583 INIT_LIST_HEAD(&pdd->qpd.queues_list);
1584 INIT_LIST_HEAD(&pdd->qpd.priv_queue_list);
1585 pdd->qpd.dqm = dev->dqm;
1586 pdd->qpd.pqm = &p->pqm;
1587 pdd->qpd.evicted = 0;
1588 pdd->qpd.mapped_gws_queue = false;
1589 pdd->process = p;
1590 pdd->bound = PDD_UNBOUND;
1591 pdd->already_dequeued = false;
1592 pdd->runtime_inuse = false;
1593 atomic64_set(&pdd->vram_usage, 0);
1594 pdd->sdma_past_activity_counter = 0;
1595 pdd->user_gpu_id = dev->id;
1596 atomic64_set(&pdd->evict_duration_counter, 0);
1601 &pdd->proc_ctx_bo,
1602 &pdd->proc_ctx_gpu_addr,
1603 &pdd->proc_ctx_cpu_ptr,
1609 memset(pdd->proc_ctx_cpu_ptr, 0, AMDGPU_MES_PROC_CTX_SIZE);
1612 p->pdds[p->n_pdds++] = pdd;
1613 if (kfd_dbg_is_per_vmid_supported(pdd->dev))
1614 pdd->spi_dbg_override = pdd->dev->kfd2kgd->disable_debug_trap(
1615 pdd->dev->adev,
1620 idr_init(&pdd->alloc_idr);
1622 return pdd;
1625 kfree(pdd);
1632 * @pdd: The process-device
1636 * that file descriptor. If successful, the @pdd takes ownership of
1643 int kfd_process_device_init_vm(struct kfd_process_device *pdd,
1655 if (pdd->drm_priv)
1663 p = pdd->process;
1664 dev = pdd->dev;
1673 pdd->drm_priv = drm_file->private_data;
1674 atomic64_set(&pdd->tlb_seq, 0);
1676 ret = kfd_process_device_reserve_ib_mem(pdd);
1679 ret = kfd_process_device_init_cwsr_dgpu(pdd);
1687 pdd->drm_file = drm_file;
1692 kfd_process_device_destroy_cwsr_dgpu(pdd);
1694 kfd_process_device_destroy_ib_mem(pdd);
1696 pdd->drm_priv = NULL;
1712 struct kfd_process_device *pdd;
1715 pdd = kfd_get_process_device_data(dev, p);
1716 if (!pdd) {
1721 if (!pdd->drm_priv)
1726 * further runtime suspend once device pdd is created until
1727 * pdd is destroyed.
1729 if (!pdd->runtime_inuse) {
1739 * per pdd
1741 pdd->runtime_inuse = true;
1743 return pdd;
1749 int kfd_process_device_create_obj_handle(struct kfd_process_device *pdd,
1752 return idr_alloc(&pdd->alloc_idr, mem, 0, 0, GFP_KERNEL);
1758 void *kfd_process_device_translate_handle(struct kfd_process_device *pdd,
1764 return idr_find(&pdd->alloc_idr, handle);
1770 void kfd_process_device_remove_obj_handle(struct kfd_process_device *pdd,
1774 idr_remove(&pdd->alloc_idr, handle);
1826 struct kfd_process_device *pdd = p->pdds[i];
1828 kfd_smi_event_queue_eviction(pdd->dev, p->lead_thread->pid,
1831 r = pdd->dev->dqm->ops.evict_process_queues(pdd->dev->dqm,
1832 &pdd->qpd);
1851 struct kfd_process_device *pdd = p->pdds[i];
1856 kfd_smi_event_queue_restore(pdd->dev, p->lead_thread->pid);
1858 if (pdd->dev->dqm->ops.restore_process_queues(pdd->dev->dqm,
1859 &pdd->qpd))
1875 struct kfd_process_device *pdd = p->pdds[i];
1877 kfd_smi_event_queue_restore(pdd->dev, p->lead_thread->pid);
1879 r = pdd->dev->dqm->ops.restore_process_queues(pdd->dev->dqm,
1880 &pdd->qpd);
2038 struct kfd_process_device *pdd;
2046 pdd = kfd_get_process_device_data(dev, process);
2047 if (!pdd)
2049 qpd = &pdd->qpd;
2066 void kfd_flush_tlb(struct kfd_process_device *pdd, enum TLB_FLUSH_TYPE type)
2068 struct amdgpu_vm *vm = drm_priv_to_vm(pdd->drm_priv);
2070 struct kfd_node *dev = pdd->dev;
2079 if (atomic64_xchg(&pdd->tlb_seq, tlb_seq) == tlb_seq)
2086 if (pdd->qpd.vmid)
2088 pdd->qpd.vmid);
2092 dev->adev, pdd->process->pasid, type, xcc);
2097 int kfd_process_drain_interrupts(struct kfd_process_device *pdd)
2103 if (!KFD_IS_SOC15(pdd->dev))
2106 pdd->process->irq_drain_is_open = true;
2111 irq_drain_fence[3] = pdd->process->pasid;
2116 if (KFD_GC_VERSION(pdd->dev->kfd) == IP_VERSION(9, 4, 3)) {
2117 node_id = ffs(pdd->dev->interrupt_bitmap) - 1;
2122 if (amdgpu_amdkfd_send_close_event_drain_irq(pdd->dev->adev,
2124 pdd->process->irq_drain_is_open = false;
2128 r = wait_event_interruptible(pdd->process->wait_irq_drain,
2129 !READ_ONCE(pdd->process->irq_drain_is_open));
2131 pdd->process->irq_drain_is_open = false;
2225 struct kfd_process_device *pdd = p->pdds[i];
2227 if (pdd->user_gpu_id == gpu_id)
2228 return pdd;
2242 struct kfd_process_device *pdd = p->pdds[i];
2244 if (pdd->dev->id == actual_gpu_id)
2245 return pdd->user_gpu_id;