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
