On 9/3/2026 16:08, Gang Ba wrote:
@@ -240,6 +254,11 @@ bool kfd_set_dbg_ev_from_interrupt(struct kfd_node *dev,
mutex_unlock(&p->mutex);
} else if (trap_mask & KFD_EC_MASK(EC_DEVICE_MEMORY_VIOLATION))
{
kfd_evict_process_device(pdd);
+
+ /* GPR cleaner shader for MI2XX */
+ if (KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 2))
+ gfx942_clean_fault(pdd);
+
kfd_signal_vm_fault_event(pdd, NULL, exception_data);
signaled_to_debugger_or_runtime = true;
This code runs conditionally on:
if (!kfd_dbg_ev_raise(trap_mask, p, dev, doorbell_id, true,
exception_data, exception_data_size)) {
It returns true if the process or debugger (I'm unclear on the logic)
receives the exception. This is not what we want: this code must run
unconditionally.