Prepare for the support of specific queue reset.

v2: also input node_id to the handler.

Signed-off-by: Tao Zhou <[email protected]>
---
 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

Reply via email to