[PATCH 3/4] drm/amdkfd: add vmid/nodeid input for RAS poison consumption handler

Tao Zhou tao.zhou1 at amd.com
Wed Jun 11 03:34:52 UTC 2025


Prepare for the support of specific queue reset.

v2: also input node_id to the handler.

Signed-off-by: Tao Zhou <tao.zhou1 at amd.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c
index 4ceb251312a6..0018d04f4b33 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c
@@ -142,7 +142,8 @@ enum SQ_INTERRUPT_ERROR_TYPE {
 				>> KFD_DEBUG_CP_BAD_OP_ECODE_SHIFT)
 
 static void event_interrupt_poison_consumption_v9(struct kfd_node *dev,
-				uint16_t pasid, uint16_t client_id)
+				uint16_t pasid, uint16_t client_id,
+				uint16_t vmid, uint16_t node_id)
 {
 	enum amdgpu_ras_block block = 0;
 	uint32_t reset = 0;
@@ -357,7 +358,7 @@ static bool event_interrupt_isr_v9(struct kfd_node *dev,
 static void event_interrupt_wq_v9(struct kfd_node *dev,
 					const uint32_t *ih_ring_entry)
 {
-	uint16_t source_id, client_id, pasid, vmid;
+	uint16_t source_id, client_id, pasid, vmid, node_id;
 	uint32_t context_id0, context_id1;
 	uint32_t sq_intr_err, sq_int_data, encoding;
 
@@ -367,6 +368,7 @@ static void event_interrupt_wq_v9(struct kfd_node *dev,
 	vmid = SOC15_VMID_FROM_IH_ENTRY(ih_ring_entry);
 	context_id0 = SOC15_CONTEXT_ID0_FROM_IH_ENTRY(ih_ring_entry);
 	context_id1 = SOC15_CONTEXT_ID1_FROM_IH_ENTRY(ih_ring_entry);
+	node_id = SOC15_NODEID_FROM_IH_ENTRY(ih_ring_entry);
 
 	if (client_id == SOC15_IH_CLIENTID_GRBM_CP ||
 	    client_id == SOC15_IH_CLIENTID_SE0SH ||
@@ -501,7 +503,8 @@ static void event_interrupt_wq_v9(struct kfd_node *dev,
 					sq_intr_err);
 				if (sq_intr_err != SQ_INTERRUPT_ERROR_TYPE_ILLEGAL_INST &&
 					sq_intr_err != SQ_INTERRUPT_ERROR_TYPE_MEMVIOL) {
-					event_interrupt_poison_consumption_v9(dev, pasid, client_id);
+					event_interrupt_poison_consumption_v9(dev,
+						pasid, client_id, vmid, node_id);
 					return;
 				}
 				break;
@@ -527,7 +530,8 @@ static void event_interrupt_wq_v9(struct kfd_node *dev,
 		if (source_id == SOC15_INTSRC_SDMA_TRAP) {
 			kfd_signal_event_interrupt(pasid, context_id0 & 0xfffffff, 28);
 		} else if (source_id == SOC15_INTSRC_SDMA_ECC) {
-			event_interrupt_poison_consumption_v9(dev, pasid, client_id);
+			event_interrupt_poison_consumption_v9(dev, pasid,
+				client_id, vmid, node_id);
 			return;
 		}
 	} else if (client_id == SOC15_IH_CLIENTID_VMC ||
@@ -538,7 +542,8 @@ static void event_interrupt_wq_v9(struct kfd_node *dev,
 		struct kfd_hsa_memory_exception_data exception_data;
 
 		if (source_id == SOC15_INTSRC_VMC_UTCL2_POISON) {
-			event_interrupt_poison_consumption_v9(dev, pasid, client_id);
+			event_interrupt_poison_consumption_v9(dev,
+				pasid, client_id, vmid, node_id);
 			return;
 		}
 
-- 
2.34.1



More information about the amd-gfx mailing list