aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3974-drm-amdkfd-Eliminate-get_atc_vmid_pasid_mapping_vali.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3974-drm-amdkfd-Eliminate-get_atc_vmid_pasid_mapping_vali.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3974-drm-amdkfd-Eliminate-get_atc_vmid_pasid_mapping_vali.patch442
1 files changed, 442 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3974-drm-amdkfd-Eliminate-get_atc_vmid_pasid_mapping_vali.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3974-drm-amdkfd-Eliminate-get_atc_vmid_pasid_mapping_vali.patch
new file mode 100644
index 00000000..d95209c7
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3974-drm-amdkfd-Eliminate-get_atc_vmid_pasid_mapping_vali.patch
@@ -0,0 +1,442 @@
+From b5b576539fb063762c79c45e9f9863353c8b8125 Mon Sep 17 00:00:00 2001
+From: Yong Zhao <Yong.Zhao@amd.com>
+Date: Wed, 25 Sep 2019 23:57:30 -0400
+Subject: [PATCH 3974/4256] drm/amdkfd: Eliminate
+ get_atc_vmid_pasid_mapping_valid
+
+get_atc_vmid_pasid_mapping_valid() is very similar to
+get_atc_vmid_pasid_mapping_pasid(), so they can be merged into a new
+function get_atc_vmid_pasid_mapping_info() to reduce register access
+times. More importantly, getting the PASID and the valid bit atomically
+with a single read fixes some potential race conditions where the
+mapping changes between the two reads.
+
+Change-Id: I255ebf2629012400b07fe6a69c3d075cfd46612e
+Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+---
+ .../drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c | 6 +--
+ .../drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c | 49 +++++++------------
+ .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 28 ++++-------
+ .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 32 ++++--------
+ .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 44 +++++++----------
+ .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h | 6 +--
+ .../gpu/drm/amd/amdkfd/cik_event_interrupt.c | 8 +--
+ drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c | 16 +++---
+ .../gpu/drm/amd/include/kgd_kfd_interface.h | 8 ++-
+ 9 files changed, 75 insertions(+), 122 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
+index 75a351739168..f0b19f20d1af 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
+@@ -279,10 +279,8 @@ static const struct kfd2kgd_calls kfd2kgd = {
+ .address_watch_execute = kgd_gfx_v9_address_watch_execute,
+ .wave_control_execute = kgd_gfx_v9_wave_control_execute,
+ .address_watch_get_offset = kgd_gfx_v9_address_watch_get_offset,
+- .get_atc_vmid_pasid_mapping_pasid =
+- kgd_gfx_v9_get_atc_vmid_pasid_mapping_pasid,
+- .get_atc_vmid_pasid_mapping_valid =
+- kgd_gfx_v9_get_atc_vmid_pasid_mapping_valid,
++ .get_atc_vmid_pasid_mapping_info =
++ kgd_gfx_v9_get_atc_vmid_pasid_mapping_info,
+ .get_tile_config = kgd_gfx_v9_get_tile_config,
+ .set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base,
+ .invalidate_tlbs = kgd_gfx_v9_invalidate_tlbs,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
+index 3ccaa088cafe..9bd81e1c3a46 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
+@@ -99,10 +99,8 @@ static uint32_t kgd_address_watch_get_offset(struct kgd_dev *kgd,
+ unsigned int watch_point_id,
+ unsigned int reg_offset);
+
+-static bool get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd,
+- uint8_t vmid);
+-static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+- uint8_t vmid);
++static bool get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
++ uint8_t vmid, uint16_t *p_pasid);
+ static void set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid,
+ uint64_t page_table_base);
+ static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid);
+@@ -156,10 +154,8 @@ static const struct kfd2kgd_calls kfd2kgd = {
+ .address_watch_execute = kgd_address_watch_execute,
+ .wave_control_execute = kgd_wave_control_execute,
+ .address_watch_get_offset = kgd_address_watch_get_offset,
+- .get_atc_vmid_pasid_mapping_pasid =
+- get_atc_vmid_pasid_mapping_pasid,
+- .get_atc_vmid_pasid_mapping_valid =
+- get_atc_vmid_pasid_mapping_valid,
++ .get_atc_vmid_pasid_mapping_info =
++ get_atc_vmid_pasid_mapping_info,
+ .get_tile_config = amdgpu_amdkfd_get_tile_config,
+ .set_vm_context_page_table_base = set_vm_context_page_table_base,
+ .invalidate_tlbs = invalidate_tlbs,
+@@ -776,26 +772,17 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
+ return 0;
+ }
+
+-static bool get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd,
+- uint8_t vmid)
++static bool get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
++ uint8_t vmid, uint16_t *p_pasid)
+ {
+- uint32_t reg;
++ uint32_t value;
+ struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
+
+- reg = RREG32(SOC15_REG_OFFSET(ATHUB, 0, mmATC_VMID0_PASID_MAPPING)
++ value = RREG32(SOC15_REG_OFFSET(ATHUB, 0, mmATC_VMID0_PASID_MAPPING)
+ + vmid);
+- return reg & ATC_VMID0_PASID_MAPPING__VALID_MASK;
+-}
+-
+-static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+- uint8_t vmid)
+-{
+- uint32_t reg;
+- struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
++ *p_pasid = value & ATC_VMID0_PASID_MAPPING__PASID_MASK;
+
+- reg = RREG32(SOC15_REG_OFFSET(ATHUB, 0, mmATC_VMID0_PASID_MAPPING)
+- + vmid);
+- return reg & ATC_VMID0_PASID_MAPPING__PASID_MASK;
++ return !!(value & ATC_VMID0_PASID_MAPPING__VALID_MASK);
+ }
+
+ static int invalidate_tlbs_with_kiq(struct amdgpu_device *adev, uint16_t pasid)
+@@ -827,6 +814,8 @@ static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid)
+ {
+ struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
+ int vmid;
++ uint16_t queried_pasid;
++ bool ret;
+ struct amdgpu_ring *ring = &adev->gfx.kiq.ring;
+
+ if (amdgpu_emu_mode == 0 && ring->sched.ready)
+@@ -835,13 +824,13 @@ static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid)
+ for (vmid = 0; vmid < 16; vmid++) {
+ if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid))
+ continue;
+- if (get_atc_vmid_pasid_mapping_valid(kgd, vmid)) {
+- if (get_atc_vmid_pasid_mapping_pasid(kgd, vmid)
+- == pasid) {
+- amdgpu_gmc_flush_gpu_tlb(adev, vmid,
+- AMDGPU_GFXHUB_0, 0);
+- break;
+- }
++
++ ret = get_atc_vmid_pasid_mapping_info(kgd, vmid,
++ &queried_pasid);
++ if (ret && queried_pasid == pasid) {
++ amdgpu_gmc_flush_gpu_tlb(adev, vmid,
++ AMDGPU_GFXHUB_0, 0);
++ break;
+ }
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
+index dd7548e9932b..ac811361246d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
+@@ -136,9 +136,8 @@ static uint32_t kgd_address_watch_get_offset(struct kgd_dev *kgd,
+ unsigned int watch_point_id,
+ unsigned int reg_offset);
+
+-static bool get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd, uint8_t vmid);
+-static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+- uint8_t vmid);
++static bool get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
++ uint8_t vmid, uint16_t *p_pasid);
+
+ static void set_scratch_backing_va(struct kgd_dev *kgd,
+ uint64_t va, uint32_t vmid);
+@@ -189,8 +188,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
+ .address_watch_execute = kgd_address_watch_execute,
+ .wave_control_execute = kgd_wave_control_execute,
+ .address_watch_get_offset = kgd_address_watch_get_offset,
+- .get_atc_vmid_pasid_mapping_pasid = get_atc_vmid_pasid_mapping_pasid,
+- .get_atc_vmid_pasid_mapping_valid = get_atc_vmid_pasid_mapping_valid,
++ .get_atc_vmid_pasid_mapping_info = get_atc_vmid_pasid_mapping_info,
+ .set_scratch_backing_va = set_scratch_backing_va,
+ .get_tile_config = get_tile_config,
+ .set_vm_context_page_table_base = set_vm_context_page_table_base,
+@@ -756,24 +754,16 @@ static uint32_t kgd_address_watch_get_offset(struct kgd_dev *kgd,
+ return watchRegs[watch_point_id * ADDRESS_WATCH_REG_MAX + reg_offset];
+ }
+
+-static bool get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd,
+- uint8_t vmid)
++static bool get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
++ uint8_t vmid, uint16_t *p_pasid)
+ {
+- uint32_t reg;
++ uint32_t value;
+ struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
+
+- reg = RREG32(mmATC_VMID0_PASID_MAPPING + vmid);
+- return reg & ATC_VMID0_PASID_MAPPING__VALID_MASK;
+-}
+-
+-static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+- uint8_t vmid)
+-{
+- uint32_t reg;
+- struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
++ value = RREG32(mmATC_VMID0_PASID_MAPPING + vmid);
++ *p_pasid = value & ATC_VMID0_PASID_MAPPING__PASID_MASK;
+
+- reg = RREG32(mmATC_VMID0_PASID_MAPPING + vmid);
+- return reg & ATC_VMID0_PASID_MAPPING__PASID_MASK;
++ return !!(value & ATC_VMID0_PASID_MAPPING__VALID_MASK);
+ }
+
+ static void set_scratch_backing_va(struct kgd_dev *kgd,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+index f12ac78707b4..b7f0d594ec7b 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+@@ -99,10 +99,8 @@ static uint32_t kgd_address_watch_get_offset(struct kgd_dev *kgd,
+ unsigned int watch_point_id,
+ unsigned int reg_offset);
+
+-static bool get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd,
+- uint8_t vmid);
+-static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+- uint8_t vmid);
++static bool get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
++ uint8_t vmid, uint16_t *p_pasid);
+ static void set_scratch_backing_va(struct kgd_dev *kgd,
+ uint64_t va, uint32_t vmid);
+ static void set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid,
+@@ -151,10 +149,8 @@ static const struct kfd2kgd_calls kfd2kgd = {
+ .address_watch_execute = kgd_address_watch_execute,
+ .wave_control_execute = kgd_wave_control_execute,
+ .address_watch_get_offset = kgd_address_watch_get_offset,
+- .get_atc_vmid_pasid_mapping_pasid =
+- get_atc_vmid_pasid_mapping_pasid,
+- .get_atc_vmid_pasid_mapping_valid =
+- get_atc_vmid_pasid_mapping_valid,
++ .get_atc_vmid_pasid_mapping_info =
++ get_atc_vmid_pasid_mapping_info,
+ .set_scratch_backing_va = set_scratch_backing_va,
+ .get_tile_config = get_tile_config,
+ .set_vm_context_page_table_base = set_vm_context_page_table_base,
+@@ -677,24 +673,16 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
+ return 0;
+ }
+
+-static bool get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd,
+- uint8_t vmid)
++static bool get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
++ uint8_t vmid, uint16_t *p_pasid)
+ {
+- uint32_t reg;
++ uint32_t value;
+ struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
+
+- reg = RREG32(mmATC_VMID0_PASID_MAPPING + vmid);
+- return reg & ATC_VMID0_PASID_MAPPING__VALID_MASK;
+-}
+-
+-static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+- uint8_t vmid)
+-{
+- uint32_t reg;
+- struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
++ value = RREG32(mmATC_VMID0_PASID_MAPPING + vmid);
++ *p_pasid = value & ATC_VMID0_PASID_MAPPING__PASID_MASK;
+
+- reg = RREG32(mmATC_VMID0_PASID_MAPPING + vmid);
+- return reg & ATC_VMID0_PASID_MAPPING__PASID_MASK;
++ return !!(value & ATC_VMID0_PASID_MAPPING__VALID_MASK);
+ }
+
+ static int kgd_address_watch_disable(struct kgd_dev *kgd)
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+index c6f27ad29d61..04448869abff 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+@@ -630,26 +630,17 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
+ return 0;
+ }
+
+-bool kgd_gfx_v9_get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd,
+- uint8_t vmid)
++bool kgd_gfx_v9_get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
++ uint8_t vmid, uint16_t *p_pasid)
+ {
+- uint32_t reg;
++ uint32_t value;
+ struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
+
+- reg = RREG32(SOC15_REG_OFFSET(ATHUB, 0, mmATC_VMID0_PASID_MAPPING)
++ value = RREG32(SOC15_REG_OFFSET(ATHUB, 0, mmATC_VMID0_PASID_MAPPING)
+ + vmid);
+- return reg & ATC_VMID0_PASID_MAPPING__VALID_MASK;
+-}
+-
+-uint16_t kgd_gfx_v9_get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+- uint8_t vmid)
+-{
+- uint32_t reg;
+- struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
++ *p_pasid = value & ATC_VMID0_PASID_MAPPING__PASID_MASK;
+
+- reg = RREG32(SOC15_REG_OFFSET(ATHUB, 0, mmATC_VMID0_PASID_MAPPING)
+- + vmid);
+- return reg & ATC_VMID0_PASID_MAPPING__PASID_MASK;
++ return !!(value & ATC_VMID0_PASID_MAPPING__VALID_MASK);
+ }
+
+ static int invalidate_tlbs_with_kiq(struct amdgpu_device *adev, uint16_t pasid,
+@@ -684,6 +675,8 @@ int kgd_gfx_v9_invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid)
+ {
+ struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
+ int vmid, i;
++ uint16_t queried_pasid;
++ bool ret;
+ struct amdgpu_ring *ring = &adev->gfx.kiq.ring;
+ uint32_t flush_type = 0;
+
+@@ -699,14 +692,13 @@ int kgd_gfx_v9_invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid)
+ for (vmid = 0; vmid < 16; vmid++) {
+ if (!amdgpu_amdkfd_is_kfd_vmid(adev, vmid))
+ continue;
+- if (kgd_gfx_v9_get_atc_vmid_pasid_mapping_valid(kgd, vmid)) {
+- if (kgd_gfx_v9_get_atc_vmid_pasid_mapping_pasid(kgd, vmid)
+- == pasid) {
+- for (i = 0; i < adev->num_vmhubs; i++)
+- amdgpu_gmc_flush_gpu_tlb(adev, vmid,
+- i, flush_type);
+- break;
+- }
++ ret = kgd_gfx_v9_get_atc_vmid_pasid_mapping_info(kgd, vmid,
++ &queried_pasid);
++ if (ret && queried_pasid == pasid) {
++ for (i = 0; i < adev->num_vmhubs; i++)
++ amdgpu_gmc_flush_gpu_tlb(adev, vmid,
++ i, flush_type);
++ break;
+ }
+ }
+
+@@ -1040,10 +1032,8 @@ static const struct kfd2kgd_calls kfd2kgd = {
+ .address_watch_execute = kgd_gfx_v9_address_watch_execute,
+ .wave_control_execute = kgd_gfx_v9_wave_control_execute,
+ .address_watch_get_offset = kgd_gfx_v9_address_watch_get_offset,
+- .get_atc_vmid_pasid_mapping_pasid =
+- kgd_gfx_v9_get_atc_vmid_pasid_mapping_pasid,
+- .get_atc_vmid_pasid_mapping_valid =
+- kgd_gfx_v9_get_atc_vmid_pasid_mapping_valid,
++ .get_atc_vmid_pasid_mapping_info =
++ kgd_gfx_v9_get_atc_vmid_pasid_mapping_info,
+ .get_tile_config = kgd_gfx_v9_get_tile_config,
+ .set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base,
+ .invalidate_tlbs = kgd_gfx_v9_invalidate_tlbs,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
+index a30e36341502..7611ba466aa4 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
+@@ -55,10 +55,8 @@ uint32_t kgd_gfx_v9_address_watch_get_offset(struct kgd_dev *kgd,
+ unsigned int watch_point_id,
+ unsigned int reg_offset);
+
+-bool kgd_gfx_v9_get_atc_vmid_pasid_mapping_valid(struct kgd_dev *kgd,
+- uint8_t vmid);
+-uint16_t kgd_gfx_v9_get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+- uint8_t vmid);
++bool kgd_gfx_v9_get_atc_vmid_pasid_mapping_info(struct kgd_dev *kgd,
++ uint8_t vmid, uint16_t *p_pasid);
+ void kgd_gfx_v9_set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid,
+ uint64_t page_table_base);
+ int kgd_gfx_v9_invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid);
+diff --git a/drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c b/drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c
+index 177d1e5329a5..9f59ba93cfe0 100644
+--- a/drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c
++++ b/drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c
+@@ -33,7 +33,9 @@ static bool cik_event_interrupt_isr(struct kfd_dev *dev,
+ const struct cik_ih_ring_entry *ihre =
+ (const struct cik_ih_ring_entry *)ih_ring_entry;
+ const struct kfd2kgd_calls *f2g = dev->kfd2kgd;
+- unsigned int vmid, pasid;
++ unsigned int vmid;
++ uint16_t pasid;
++ bool ret;
+
+ /* This workaround is due to HW/FW limitation on Hawaii that
+ * VMID and PASID are not written into ih_ring_entry
+@@ -48,13 +50,13 @@ static bool cik_event_interrupt_isr(struct kfd_dev *dev,
+ *tmp_ihre = *ihre;
+
+ vmid = f2g->read_vmid_from_vmfault_reg(dev->kgd);
+- pasid = f2g->get_atc_vmid_pasid_mapping_pasid(dev->kgd, vmid);
++ ret = f2g->get_atc_vmid_pasid_mapping_info(dev->kgd, vmid, &pasid);
+
+ tmp_ihre->ring_id &= 0x000000ff;
+ tmp_ihre->ring_id |= vmid << 8;
+ tmp_ihre->ring_id |= pasid << 16;
+
+- return (pasid != 0) &&
++ return ret && (pasid != 0) &&
+ vmid >= dev->vm_info.first_vmid_kfd &&
+ vmid <= dev->vm_info.last_vmid_kfd;
+ }
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c b/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c
+index 492951cad143..1eb0c2bedcd9 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.c
+@@ -775,6 +775,7 @@ int dbgdev_wave_reset_wavefronts(struct kfd_dev *dev, struct kfd_process *p)
+ {
+ int status = 0;
+ unsigned int vmid;
++ uint16_t queried_pasid;
+ union SQ_CMD_BITS reg_sq_cmd;
+ union GRBM_GFX_INDEX_BITS reg_gfx_index;
+ struct kfd_process_device *pdd;
+@@ -796,14 +797,13 @@ int dbgdev_wave_reset_wavefronts(struct kfd_dev *dev, struct kfd_process *p)
+ */
+
+ for (vmid = first_vmid_to_scan; vmid <= last_vmid_to_scan; vmid++) {
+- if (dev->kfd2kgd->get_atc_vmid_pasid_mapping_valid
+- (dev->kgd, vmid)) {
+- if (dev->kfd2kgd->get_atc_vmid_pasid_mapping_pasid
+- (dev->kgd, vmid) == p->pasid) {
+- pr_debug("Killing wave fronts of vmid %d and pasid 0x%x\n",
+- vmid, p->pasid);
+- break;
+- }
++ status = dev->kfd2kgd->get_atc_vmid_pasid_mapping_info
++ (dev->kgd, vmid, &queried_pasid);
++
++ if (status && queried_pasid == p->pasid) {
++ pr_debug("Killing wave fronts of vmid %d and pasid 0x%x\n",
++ vmid, p->pasid);
++ break;
+ }
+ }
+
+diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+index 57cf9aabedb4..db00c2ec9277 100644
+--- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
++++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+@@ -299,12 +299,10 @@ struct kfd2kgd_calls {
+ uint32_t (*address_watch_get_offset)(struct kgd_dev *kgd,
+ unsigned int watch_point_id,
+ unsigned int reg_offset);
+- bool (*get_atc_vmid_pasid_mapping_valid)(
++ bool (*get_atc_vmid_pasid_mapping_info)(
+ struct kgd_dev *kgd,
+- uint8_t vmid);
+- uint16_t (*get_atc_vmid_pasid_mapping_pasid)(
+- struct kgd_dev *kgd,
+- uint8_t vmid);
++ uint8_t vmid,
++ uint16_t *p_pasid);
+
+ /* No longer needed from GFXv9 onward. The scratch base address is
+ * passed to the shader by the CP. It's the user mode driver's
+--
+2.17.1
+