[PATCH] drm: Disable XNACK on SRIOV environment

Liu, Shaoyun Shaoyun.Liu at amd.com
Thu Nov 2 16:11:20 UTC 2023


[AMD Official Use Only - General]

Looks ok to me .
Reviewed-by: Shaoyun.liu <Shaoyun.liu at amd.com>

-----Original Message-----
From: Kakarya, Surbhi <Surbhi.Kakarya at amd.com>
Sent: Thursday, November 2, 2023 12:10 PM
To: Kakarya, Surbhi <Surbhi.Kakarya at amd.com>; amd-gfx at lists.freedesktop.org; Yang, Philip <Philip.Yang at amd.com>; Liu, Shaoyun <Shaoyun.Liu at amd.com>
Subject: RE: [PATCH] drm: Disable XNACK on SRIOV environment

[AMD Official Use Only - General]

Ping..

-----Original Message-----
From: Surbhi Kakarya <surbhi.kakarya at amd.com>
Sent: Monday, October 30, 2023 9:54 PM
To: amd-gfx at lists.freedesktop.org; Yang, Philip <Philip.Yang at amd.com>
Cc: Kakarya, Surbhi <Surbhi.Kakarya at amd.com>
Subject: [PATCH] drm: Disable XNACK on SRIOV environment

The purpose of this patch is to disable XNACK or set XNACK OFF mode on SRIOV platform which doesn't support it.

This will prevent user-space application to fail or result into unexpected behaviour whenever the application need to run test-case in XNACK ON mode.

Signed-off-by: Surbhi Kakarya <surbhi.kakarya at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c  |  5 ++++-  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c |  9 +++++++++  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h |  1 +  drivers/gpu/drm/amd/amdkfd/kfd_process.c | 10 ++++++++--
 4 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
index 2dce338b0f1e..d582b240f919 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
@@ -826,7 +826,10 @@ void amdgpu_gmc_noretry_set(struct amdgpu_device *adev)
                                gc_ver == IP_VERSION(9, 4, 3) ||
                                gc_ver >= IP_VERSION(10, 3, 0));

-       gmc->noretry = (amdgpu_noretry == -1) ? noretry_default : amdgpu_noretry;
+       if (!amdgpu_sriov_xnack_support(adev))
+               gmc->norety = 1;
+       else
+               gmc->noretry = (amdgpu_noretry == -1) ? noretry_default :
+amdgpu_noretry;
 }

 void amdgpu_gmc_set_vm_fault_masks(struct amdgpu_device *adev, int hub_type, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index a0aa624f5a92..41c77d5c5a79 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -1093,3 +1093,12 @@ u32 amdgpu_sriov_rreg(struct amdgpu_device *adev,
        else
                return RREG32(offset);
 }
+bool amdgpu_sriov_xnack_support(struct amdgpu_device *adev) {
+       bool xnack_mode = 1;
+
+       if (amdgpu_sriov_vf(adev) && (adev->ip_versions[GC_HWIP][0] == IP_VERSION(9, 4, 2)))
+               xnack_mode = 0;
+
+       return xnack_mode;
+}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
index 858ef21ae515..935ca736300e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
@@ -365,4 +365,5 @@ u32 amdgpu_sriov_rreg(struct amdgpu_device *adev,  bool amdgpu_virt_fw_load_skip_check(struct amdgpu_device *adev,
                        uint32_t ucode_id);  void amdgpu_virt_post_reset(struct amdgpu_device *adev);
+bool amdgpu_sriov_xnack_support(struct amdgpu_device *adev);
 #endif
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
index fbf053001af9..69954a2a8503 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
@@ -1416,8 +1416,14 @@ bool kfd_process_xnack_mode(struct kfd_process *p, bool supported)
                 * per-process XNACK mode selection. But let the dev->noretry
                 * setting still influence the default XNACK mode.
                 */
-               if (supported && KFD_SUPPORT_XNACK_PER_PROCESS(dev))
-                       continue;
+               if (supported && KFD_SUPPORT_XNACK_PER_PROCESS(dev)) {
+                       if (!amdgpu_sriov_xnack_support(dev->kfd->adev)) {
+                               pr_debug("SRIOV platform xnack not supported\n");
+                               return false;
+                       }
+                       else
+                               continue;
+               }

                /* GFXv10 and later GPUs do not support shader preemption
                 * during page faults. This can lead to poor QoS for queue
--
2.25.1




More information about the amd-gfx mailing list