]> Gentwo Git Trees - linux/.git/commitdiff
drm/amdgpu/gmc6: Delegate VM faults to soft IRQ handler ring
authorTimur Kristóf <timur.kristof@gmail.com>
Wed, 26 Nov 2025 13:29:50 +0000 (14:29 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 2 Dec 2025 16:02:07 +0000 (11:02 -0500)
On old GPUs, it may be an issue that handling the interrupts from
VM faults is too slow and the interrupt handler (IH) ring may
overflow, which can cause an eventual hang.

Delegate the processing of all VM faults to the soft
IRQ handler ring.

As a result, we spend much less time in the IRQ handler that
interacts with the HW IH ring, which significantly reduces the
chance of hangs/reboots.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c

index bc6a74903f4ea295c4a8862c32dff14e11a4c3a5..a8ec95f42926b31a75551ef5ae0f60ee8d58a262 100644 (file)
@@ -1070,6 +1070,12 @@ static int gmc_v6_0_process_interrupt(struct amdgpu_device *adev,
 {
        u32 addr, status;
 
+       /* Delegate to the soft IRQ handler ring */
+       if (adev->irq.ih_soft.enabled && entry->ih != &adev->irq.ih_soft) {
+               amdgpu_irq_delegate(adev, entry, 4);
+               return 1;
+       }
+
        addr = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_ADDR);
        status = RREG32(mmVM_CONTEXT1_PROTECTION_FAULT_STATUS);
        WREG32_P(mmVM_CONTEXT1_CNTL2, 1, ~1);