--- a/sys/dev/drm/amd/amdgpu/mxgpu_ai.c +++ b/sys/dev/drm/amd/amdgpu/mxgpu_ai.c @@ -347,14 +347,14 @@ static int xgpu_ai_set_mailbox_rcv_irq(str int xgpu_ai_mailbox_get_irq(struct amdgpu_device *adev) { int r; + /* Initialize flr_work BEFORE the RCV irq source can fire, + * otherwise a host-timed IDH_FLR_NOTIFICATION makes + * xgpu_ai_mailbox_rcv_irq() schedule_work() on a zeroed + * work_struct -> NULL func call (DF-4975, twin of DF-4755). + */ + INIT_WORK(&adev->virt.flr_work, xgpu_ai_mailbox_flr_work); + r = amdgpu_irq_get(adev, &adev->virt.rcv_irq, 0); if (r) return r; r = amdgpu_irq_get(adev, &adev->virt.ack_irq, 0); if (r) { amdgpu_irq_put(adev, &adev->virt.rcv_irq, 0); return r; } - - INIT_WORK(&adev->virt.flr_work, xgpu_ai_mailbox_flr_work); return 0; }