kernel_samsung_a53x/drivers/gpu/drm/amd/amdkfd
Lancelot SIX 64c2a79382 drm/amdkfd: Flush the process wq before creating a kfd_process
[ Upstream commit f5b9053398e70a0c10aa9cb4dd5910ab6bc457c5 ]

There is a race condition when re-creating a kfd_process for a process.
This has been observed when a process under the debugger executes
exec(3).  In this scenario:
- The process executes exec.
 - This will eventually release the process's mm, which will cause the
   kfd_process object associated with the process to be freed
   (kfd_process_free_notifier decrements the reference count to the
   kfd_process to 0).  This causes kfd_process_ref_release to enqueue
   kfd_process_wq_release to the kfd_process_wq.
- The debugger receives the PTRACE_EVENT_EXEC notification, and tries to
  re-enable AMDGPU traps (KFD_IOC_DBG_TRAP_ENABLE).
 - When handling this request, KFD tries to re-create a kfd_process.
   This eventually calls kfd_create_process and kobject_init_and_add.

At this point the call to kobject_init_and_add can fail because the
old kfd_process.kobj has not been freed yet by kfd_process_wq_release.

This patch proposes to avoid this race by making sure to drain
kfd_process_wq before creating a new kfd_process object.  This way, we
know that any cleanup task is done executing when we reach
kobject_init_and_add.

Signed-off-by: Lancelot SIX <lancelot.six@amd.com>
Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-19 12:26:52 +01:00
..
cik_event_interrupt.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cik_int.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cik_regs.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cwsr_trap_handler.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cwsr_trap_handler_gfx8.asm Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cwsr_trap_handler_gfx9.asm Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cwsr_trap_handler_gfx10.asm Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_chardev.c amdkfd: use calloc instead of kzalloc to avoid integer overflow 2024-11-19 09:22:13 +01:00
kfd_crat.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_crat.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_dbgdev.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_dbgdev.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_dbgmgr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_dbgmgr.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_debugfs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_device.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_device_queue_manager.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_device_queue_manager.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_device_queue_manager_cik.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_device_queue_manager_v9.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_device_queue_manager_v10.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_device_queue_manager_vi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_doorbell.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_events.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_events.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_flat_memory.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_int_process_v9.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_interrupt.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_iommu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_iommu.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_kernel_queue.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_kernel_queue.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_module.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_mqd_manager.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_mqd_manager.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_mqd_manager_cik.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_mqd_manager_v9.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_mqd_manager_v10.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_mqd_manager_vi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_packet_manager.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_packet_manager_v9.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_packet_manager_vi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_pasid.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_pm4_headers.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_pm4_headers_ai.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_pm4_headers_diq.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_pm4_headers_vi.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_pm4_opcodes.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_priv.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_process.c drm/amdkfd: Flush the process wq before creating a kfd_process 2024-11-19 12:26:52 +01:00
kfd_process_queue_manager.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_queue.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_smi_events.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_smi_events.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_topology.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kfd_topology.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
soc15_int.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00