mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-06 21:14:18 +00:00
drm/amdkfd: add smi events for process start and end
rocm-smi will be able to show the events for KFD process start/end, it is the implementation of this feature. Signed-off-by: Eric Huang <jinhuieric.huang@amd.com> Reviewed-by: Kent Russell <kent.russell@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
1d9bff4cf8
commit
4172b556fd
@ -1054,6 +1054,8 @@ static void kfd_process_destroy_pdds(struct kfd_process *p)
|
|||||||
for (i = 0; i < p->n_pdds; i++) {
|
for (i = 0; i < p->n_pdds; i++) {
|
||||||
struct kfd_process_device *pdd = p->pdds[i];
|
struct kfd_process_device *pdd = p->pdds[i];
|
||||||
|
|
||||||
|
kfd_smi_event_process(pdd, false);
|
||||||
|
|
||||||
pr_debug("Releasing pdd (topology id %d, for pid %d)\n",
|
pr_debug("Releasing pdd (topology id %d, for pid %d)\n",
|
||||||
pdd->dev->id, p->lead_thread->pid);
|
pdd->dev->id, p->lead_thread->pid);
|
||||||
kfd_process_device_destroy_cwsr_dgpu(pdd);
|
kfd_process_device_destroy_cwsr_dgpu(pdd);
|
||||||
@ -1715,6 +1717,8 @@ int kfd_process_device_init_vm(struct kfd_process_device *pdd,
|
|||||||
pdd->pasid = avm->pasid;
|
pdd->pasid = avm->pasid;
|
||||||
pdd->drm_file = drm_file;
|
pdd->drm_file = drm_file;
|
||||||
|
|
||||||
|
kfd_smi_event_process(pdd, true);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_get_pasid:
|
err_get_pasid:
|
||||||
|
@ -345,6 +345,27 @@ void kfd_smi_event_unmap_from_gpu(struct kfd_node *node, pid_t pid,
|
|||||||
pid, address, last - address + 1, node->id, trigger));
|
pid, address, last - address + 1, node->id, trigger));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void kfd_smi_event_process(struct kfd_process_device *pdd, bool start)
|
||||||
|
{
|
||||||
|
struct amdgpu_task_info *task_info;
|
||||||
|
struct amdgpu_vm *avm;
|
||||||
|
|
||||||
|
if (pdd->drm_priv)
|
||||||
|
return;
|
||||||
|
|
||||||
|
avm = drm_priv_to_vm(pdd->drm_priv);
|
||||||
|
task_info = amdgpu_vm_get_task_info_vm(avm);
|
||||||
|
|
||||||
|
if (task_info) {
|
||||||
|
kfd_smi_event_add(0, pdd->dev,
|
||||||
|
start ? KFD_SMI_EVENT_PROCESS_START :
|
||||||
|
KFD_SMI_EVENT_PROCESS_END,
|
||||||
|
KFD_EVENT_FMT_PROCESS(task_info->pid,
|
||||||
|
task_info->task_name));
|
||||||
|
amdgpu_vm_put_task_info(task_info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int kfd_smi_event_open(struct kfd_node *dev, uint32_t *fd)
|
int kfd_smi_event_open(struct kfd_node *dev, uint32_t *fd)
|
||||||
{
|
{
|
||||||
struct kfd_smi_client *client;
|
struct kfd_smi_client *client;
|
||||||
|
@ -53,4 +53,5 @@ void kfd_smi_event_queue_restore_rescheduled(struct mm_struct *mm);
|
|||||||
void kfd_smi_event_unmap_from_gpu(struct kfd_node *node, pid_t pid,
|
void kfd_smi_event_unmap_from_gpu(struct kfd_node *node, pid_t pid,
|
||||||
unsigned long address, unsigned long last,
|
unsigned long address, unsigned long last,
|
||||||
uint32_t trigger);
|
uint32_t trigger);
|
||||||
|
void kfd_smi_event_process(struct kfd_process_device *pdd, bool start);
|
||||||
#endif
|
#endif
|
||||||
|
@ -536,6 +536,8 @@ enum kfd_smi_event {
|
|||||||
KFD_SMI_EVENT_QUEUE_EVICTION = 9,
|
KFD_SMI_EVENT_QUEUE_EVICTION = 9,
|
||||||
KFD_SMI_EVENT_QUEUE_RESTORE = 10,
|
KFD_SMI_EVENT_QUEUE_RESTORE = 10,
|
||||||
KFD_SMI_EVENT_UNMAP_FROM_GPU = 11,
|
KFD_SMI_EVENT_UNMAP_FROM_GPU = 11,
|
||||||
|
KFD_SMI_EVENT_PROCESS_START = 12,
|
||||||
|
KFD_SMI_EVENT_PROCESS_END = 13,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* max event number, as a flag bit to get events from all processes,
|
* max event number, as a flag bit to get events from all processes,
|
||||||
@ -651,6 +653,9 @@ struct kfd_ioctl_smi_events_args {
|
|||||||
"%lld -%d @%lx(%lx) %x %d\n", (ns), (pid), (addr), (size),\
|
"%lld -%d @%lx(%lx) %x %d\n", (ns), (pid), (addr), (size),\
|
||||||
(node), (unmap_trigger)
|
(node), (unmap_trigger)
|
||||||
|
|
||||||
|
#define KFD_EVENT_FMT_PROCESS(pid, task_name)\
|
||||||
|
"%x %s\n", (pid), (task_name)
|
||||||
|
|
||||||
/**************************************************************************************************
|
/**************************************************************************************************
|
||||||
* CRIU IOCTLs (Checkpoint Restore In Userspace)
|
* CRIU IOCTLs (Checkpoint Restore In Userspace)
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user