Re: [PATCH] drm/amdgpu: Add trace events for pid register/deregister

"Khatri, Sunil" <[email protected]> Tue, 28 Jul 2026 19:05:22 +0530
Newsgroups org.freedesktop.lists.amd-gfx
Message-ID <[email protected]>
On 28-07-2026 07:02 pm, Khatri, Sunil wrote:
>
> On 28-07-2026 06:45 pm, Francis, David wrote:
>>> This function is called from many places and will not match when a
>>> process start and similarly for stop. Better find a unique function,
>>> also this will be called for KGD and KFD processes too.
>> This function is called when the last ref to an task_info is put.
>> Many places in the code temporarily acquire references to a task_info
>> but only amdgpu_vm holds the long-term reference, acquired in
>> amdgpu_vm_create_task_info and relased in amdgpu_vm_fini.
>>
>> Tying the trace to the lifetime of task_info also guarantees that
>> there will be exactly one such trace for each task_info, matching
>> the register trace semantics
>
> For begining, amdgpu_vm_init sounds like a better choice

Anywhere After line , r = amdgpu_vm_create_task_info(vm);

Regards
Sunil Khatri

> for ending, amdgpu_vm_destroy_task_info is correct.
>
> Regards
> Sunil Khatri
>
>>
>> David Francis
>>
>>
>> ________________________________________
>> From: Khatri, Sunil <[email protected]>
>> Sent: Tuesday, July 28, 2026 8:26 AM
>> To: Francis, David; [email protected]
>> Cc: Liu, Shuzhou (Bill); Khatri, Sunil
>> Subject: Re: [PATCH] drm/amdgpu: Add trace events for pid 
>> register/deregister
>>
>>
>> On 24-07-2026 06:51 pm, David Francis wrote:
>>> Some debugging applications need to track when a process starts
>>> or stops using the amdgpu driver. For those processes, add ftrace
>>> events that track when a amdgpu_vm task info is changed or destroyed.
>>>
>>> Signed-off-by: David Francis <[email protected]>
>>> ---
>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 17 +++++++++++++++++
>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c    |  7 +++++++
>>>    2 files changed, 24 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h 
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>>> index 5324030a13f5..c79604b9dda1 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>>> @@ -732,6 +732,23 @@ TRACE_EVENT(amdgpu_userq_state_changed,
>>>                      __entry->client_id, __entry->queue_type, 
>>> __entry->doorbell_index, __entry->to)
>>>    );
>>>
>>> +TRACE_EVENT(amdgpu_register_pid,
>>> +     TP_PROTO(uint32_t pid),
>>> +     TP_ARGS(pid),
>>> +     TP_STRUCT__entry(__field(uint32_t, pid)),
>>> +     TP_fast_assign(__entry->pid = pid;),
>>> +     TP_printk("amdgpu register pid %d",
>>> +               __entry->pid)
>>> +);
>>> +TRACE_EVENT(amdgpu_deregister_pid,
>>> +     TP_PROTO(uint32_t pid),
>>> +     TP_ARGS(pid),
>>> +     TP_STRUCT__entry(__field(uint32_t, pid)),
>>> +     TP_fast_assign(__entry->pid = pid;),
>>> +     TP_printk("amdgpu deregister pid %d",
>>> +               __entry->pid)
>>> +);
>>> +
>>>    #undef AMDGPU_JOB_GET_TIMELINE_NAME
>>>    #endif
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> index aac8ace9d7a6..8d31a61e8c26 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>>> @@ -2457,6 +2457,9 @@ static void amdgpu_vm_destroy_task_info(struct 
>>> kref *kref)
>>>    {
>>>        struct amdgpu_task_info *ti = container_of(kref, struct 
>>> amdgpu_task_info, refcount);
>>>
>>> +     if (ti->task.pid)
>>> +             trace_amdgpu_deregister_pid(ti->task.pid);
>>> +
>>>        kfree(ti);
>>>    }
>>>
>>> @@ -2543,6 +2546,10 @@ void amdgpu_vm_set_task_info(struct amdgpu_vm 
>>> *vm)
>> This function is called from many places and will not match when a
>> process start and similarly for stop. Better find a unique function,
>> also this will be called for KGD and KFD processes too.
>> Chose a better function to add the trace although trace in itself is 
>> fine.
>>
>> Regards
>> Sunil Khatri
>>>        if (vm->task_info->task.pid == current->pid)
>>>                return;
>>>
>>> +     if (vm->task_info->task.pid)
>>> + trace_amdgpu_deregister_pid(vm->task_info->task.pid);
>>> +     trace_amdgpu_register_pid(current->pid);
>>> +
>>>        vm->task_info->task.pid = current->pid;
>>>        get_task_comm(vm->task_info->task.comm, current);
>>>