]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Revert "drm/amdkfd: Improve signal event slow path"
authorPhilip Yang <Philip.Yang@amd.com>
Wed, 29 Oct 2025 13:41:04 +0000 (09:41 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 4 Nov 2025 16:53:22 +0000 (11:53 -0500)
To fix regression report on gfx8, which requires the exhaustive search
path for signaled event.

The high CPU usage of KFD interrupt wq issue is gone after HIP/ROCr add
option to reduce HW event interrupts, safe to revert this optimization
patch now.

This reverts commit de844846f72b152119faaef1b363448dc8ea368f.

Signed-off-by: Philip Yang <Philip.Yang@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_events.c

index 82905f3e54ddd3ca7c591392d26e0cfdd00b9b3a..5a190dd6be4e27ed69828870cdcebaaf7fbf75de 100644 (file)
@@ -748,16 +748,6 @@ void kfd_signal_event_interrupt(u32 pasid, uint32_t partial_id,
                uint64_t *slots = page_slots(p->signal_page);
                uint32_t id;
 
-               /*
-                * If id is valid but slot is not signaled, GPU may signal the same event twice
-                * before driver have chance to process the first interrupt, then signal slot is
-                * auto-reset after set_event wakeup the user space, just drop the second event as
-                * the application only need wakeup once.
-                */
-               if ((valid_id_bits > 31 || (1U << valid_id_bits) >= KFD_SIGNAL_EVENT_LIMIT) &&
-                   partial_id < KFD_SIGNAL_EVENT_LIMIT && slots[partial_id] == UNSIGNALED_EVENT_SLOT)
-                       goto out_unlock;
-
                if (valid_id_bits)
                        pr_debug_ratelimited("Partial ID invalid: %u (%u valid bits)\n",
                                             partial_id, valid_id_bits);
@@ -786,7 +776,6 @@ void kfd_signal_event_interrupt(u32 pasid, uint32_t partial_id,
                }
        }
 
-out_unlock:
        rcu_read_unlock();
        kfd_unref_process(p);
 }