On 2026-08-25 15:39, michael wizardsound.com wrote:
[Some people who received this message don't often get email 
[email protected]. Learn why this is important 
athttps://aka.ms/LearnAboutSenderIdentification ]

Hi AMD,

I submitted some findings and I wanted to send this over.  I hope this helps.

On a 7900 XTX in a Proxmox host (kernel 6.14.8-2-pve, ROCm userspaces 7.2.x/7.14 in an LXC 
sharing the host kernel), a userspace bug (rocm-systems#10021; root cause filed as 
rocm-systems#10713, runtime fix proposed in rocm-systems PR #10714) can place a malformed 
packet on a user AQL queue. The CP raises gfx_v11_0_bad_op_irq ("Illegal opcode in command 
stream") followed by an HSA_STATUS_ERROR_INVALID_PACKET_FORMAT queue abort. After the 
process exits, its /sys/class/kfd/kfd/proc/<pid> entry persists and ~25.7 GB VRAM stays 
pinned. amdgpu mode1 reset succeeds but does not release it; unbind succeeds but re-probe fails 
with EEXIST on mem_info_preempt_used (stale sysfs child from the wedged teardown), and 
subsequent per-device remove/bind attempts leave D-state tasks in 
device_release_driver_internal / device_driver_attach. Only a reboot recovers the device. Clean 
SIGSEGV deaths of the same workload never leak; it is specific to the CP-fault teardown. Full 
logs, timelines, and a userspace reproducer chain available; patches and standalone reproducers 
for the userspace side are athttps://github.com/OhgurLabs/rocm-hipgraph-fixes.

The most common cause of this type of bug is a reference counting problem in struct kfd_process. In this case it appears to be in in the event handling code for SOC15_INTSRC_CP_BAD_OPCODE.  There used to be a missing kfd_unref_process in kfd_dqm_suspend_bad_queue_mes in kfd_device_queue_manager.c. This was fixed as part of this commit over a year ago:

commit 8544374c0f82edb285779f21b149826fe2c2977c
Author:     Xiaogang Chen<[email protected]>
AuthorDate: Mon Jan 13 17:35:59 2025 -0600
Commit:     Alex Deucher<[email protected]>
CommitDate: Wed Feb 12 21:02:55 2025 -0500

    drm/amdkfd: Have kfd driver use same PASID values from graphic driver

    Current kfd driver has its own PASID value for a kfd process and uses it to
    locate vm at interrupt handler or mapping between kfd process and vm. That
    design is not working when a physical gpu device has multiple spatial
    partitions, ex: adev in CPX mode. This patch has kfd driver use same pasid
    values that graphic driver generated which is per vm per pasid.

    These pasid values are passed to fw/hardware. We do not need change 
interrupt
    handler though more pasid values are used. Also, pasid values at log are
    replaced by user process pid; pasid values are not exposed to user. Users 
see
    their process pids that have meaning in user space.

    Signed-off-by: Xiaogang Chen<[email protected]>
    Reviewed-by: Felix Kuehling<[email protected]>
    Signed-off-by: Alex Deucher<[email protected]>

I guess you are using the driver that comes with your 6.14.8-2-pve kernel, not the DKMS package that shipped with ROCm. This fix landed in Linux 6.15.

Regards,
  Felix



Michael Levesque, MBA

Reply via email to