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

David Francis <[email protected]> Fri, 7 Aug 2026 09:42:41 -0400
Newsgroups org.freedesktop.lists.amd-gfx
Message-ID <[email protected]>
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.

v2: Deregister in fini, not destroy.

cc: Sunil Khatri <[email protected]>
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..2aeda13e49dd 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..48a725a0154e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -2543,6 +2543,10 @@ void amdgpu_vm_set_task_info(struct amdgpu_vm *vm)
 	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);
 
@@ -2803,6 +2807,9 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
 			 ti->process_name, ti->task.pid, ti->task.comm, ti->tgid);
 	}
 
+	if (vm->task_info->task.pid)
+		trace_amdgpu_deregister_pid(vm->task_info->task.pid);
+
 	amdgpu_vm_put_task_info(vm->task_info);
 }
 
-- 
2.34.1