Obtain it from ring entry. v2: replace node id with logical xcc id. Signed-off-by: Tao Zhou <tao.zhou1@xxxxxxx> --- drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c | 14 ++++++++++++-- drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c index 9a06c6fb6605..a8e76287dde0 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c @@ -367,10 +367,20 @@ static void event_interrupt_wq_v10(struct kfd_node *dev, client_id == SOC15_IH_CLIENTID_UTCL2) { struct kfd_vm_fault_info info = {0}; uint16_t ring_id = SOC15_RING_ID_FROM_IH_ENTRY(ih_ring_entry); + uint32_t node_id = SOC15_NODEID_FROM_IH_ENTRY(ih_ring_entry); + uint32_t vmid_type = SOC15_VMID_TYPE_FROM_IH_ENTRY(ih_ring_entry); + int xcc_id = 0; struct kfd_hsa_memory_exception_data exception_data; - if (client_id == SOC15_IH_CLIENTID_UTCL2 && - amdgpu_amdkfd_ras_query_utcl2_poison_status(dev->adev)) { + if (!vmid_type && dev->adev->gfx.funcs->ih_node_to_logical_xcc) { + xcc_id = dev->adev->gfx.funcs->ih_node_to_logical_xcc(dev->adev, + node_id); + if (xcc_id < 0) + xcc_id = 0; + } + + if (client_id == SOC15_IH_CLIENTID_UTCL2 && !vmid_type && + amdgpu_amdkfd_ras_query_utcl2_poison_status(dev->adev, xcc_id)) { event_interrupt_poison_consumption(dev, pasid, client_id); return; } 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 91dd5e045b51..ff7392336795 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c @@ -413,10 +413,20 @@ static void event_interrupt_wq_v9(struct kfd_node *dev, client_id == SOC15_IH_CLIENTID_UTCL2) { struct kfd_vm_fault_info info = {0}; uint16_t ring_id = SOC15_RING_ID_FROM_IH_ENTRY(ih_ring_entry); + uint32_t node_id = SOC15_NODEID_FROM_IH_ENTRY(ih_ring_entry); + uint32_t vmid_type = SOC15_VMID_TYPE_FROM_IH_ENTRY(ih_ring_entry); + int xcc_id = 0; struct kfd_hsa_memory_exception_data exception_data; - if (client_id == SOC15_IH_CLIENTID_UTCL2 && - amdgpu_amdkfd_ras_query_utcl2_poison_status(dev->adev)) { + if (!vmid_type && dev->adev->gfx.funcs->ih_node_to_logical_xcc) { + xcc_id = dev->adev->gfx.funcs->ih_node_to_logical_xcc(dev->adev, + node_id); + if (xcc_id < 0) + xcc_id = 0; + } + + if (client_id == SOC15_IH_CLIENTID_UTCL2 && !vmid_type && + amdgpu_amdkfd_ras_query_utcl2_poison_status(dev->adev, xcc_id)) { event_interrupt_poison_consumption_v9(dev, pasid, client_id); return; } -- 2.34.1