[PATCH] drm/amdkfd: add smi events for process start and end
Russell, Kent
Kent.Russell at amd.com
Fri Apr 11 14:49:34 UTC 2025
[Public]
Reviewed-by: Kent Russell <kent.russell at amd.com>
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Eric Huang
> Sent: Friday, April 11, 2025 9:45 AM
> To: Huang, JinHuiEric <JinHuiEric.Huang at amd.com>; amd-
> gfx at lists.freedesktop.org
> Subject: Re: [PATCH] drm/amdkfd: add smi events for process start and end
>
> Ping ...
>
> On 2025-04-07 16:52, Eric Huang wrote:
> > 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 at amd.com>
> > ---
> > drivers/gpu/drm/amd/amdkfd/kfd_process.c | 4 ++++
> > drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c | 21 +++++++++++++++++++++
> > drivers/gpu/drm/amd/amdkfd/kfd_smi_events.h | 1 +
> > include/uapi/linux/kfd_ioctl.h | 5 +++++
> > 4 files changed, 31 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> > index 7c0c24732481..41d7dc8c2850 100644
> > --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> > @@ -1054,6 +1054,8 @@ static void kfd_process_destroy_pdds(struct
> kfd_process *p)
> > for (i = 0; i < p->n_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",
> > pdd->dev->id, p->lead_thread->pid);
> > 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->drm_file = drm_file;
> >
> > + kfd_smi_event_process(pdd, true);
> > +
> > return 0;
> >
> > err_get_pasid:
> > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
> b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
> > index 9b8169761ec5..727a4ce29fe6 100644
> > --- a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
> > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
> > @@ -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));
> > }
> >
> > +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)
> > {
> > struct kfd_smi_client *client;
> > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.h
> b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.h
> > index 503bff13d815..bb4d72b57387 100644
> > --- a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.h
> > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.h
> > @@ -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,
> > unsigned long address, unsigned long last,
> > uint32_t trigger);
> > +void kfd_smi_event_process(struct kfd_process_device *pdd, bool start);
> > #endif
> > diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h
> > index 1e59344c5673..04c7d283dc7d 100644
> > --- a/include/uapi/linux/kfd_ioctl.h
> > +++ b/include/uapi/linux/kfd_ioctl.h
> > @@ -536,6 +536,8 @@ enum kfd_smi_event {
> > KFD_SMI_EVENT_QUEUE_EVICTION = 9,
> > KFD_SMI_EVENT_QUEUE_RESTORE = 10,
> > 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,
> > @@ -651,6 +653,9 @@ struct kfd_ioctl_smi_events_args {
> > "%lld -%d @%lx(%lx) %x %d\n", (ns), (pid), (addr), (size),\
> > (node), (unmap_trigger)
> >
> > +#define KFD_EVENT_FMT_PROCESS(pid, task_name)\
> > + "%x %s\n", (pid), (task_name)
> > +
> >
> /************************************************************************************************
> **
> > * CRIU IOCTLs (Checkpoint Restore In Userspace)
> > *
-------------- next part --------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 18409 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20250411/9902b201/attachment-0001.bin>
More information about the amd-gfx
mailing list