Re: [PATCH] drm/amdgpu: Unmap CSA under SR-IOV in KFD path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 28.04.19 um 12:25 schrieb Trigger Huang:
In amdgpu open path, CSA will be mappened in VM, so when opening
KFD, calling mdgpu_vm_make_compute  will fail because it found this
VM is not a clean VM with some mappings, as a result, it will lead
to failed to create process VM object

The fix is try to unmap CSA, and actually CSA is not needed in
compute VF world switch

Well we should rather try to avoid that.

The plan with that was that we do this so that one VM can be used both by compute and gfx.

I would rather lower the check in amdgpu_vm_make_compute() to make sure that we don't have page tables filled, instead of checking for a mapping.

Christian.


Signed-off-by: Trigger Huang <Trigger.Huang@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 10 ++++++++++
  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c          |  2 +-
  2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 697b8ef..e0bc457 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -956,6 +956,16 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd,
  	if (avm->process_info)
  		return -EINVAL;
+ /* Delete CSA mapping to make sure this VM is a clean VM before
+	 *  converting VM
+	 */
+	if (amdgpu_sriov_vf(adev) && drv_priv->csa_va) {
+		amdgpu_bo_reserve(adev->virt.csa_obj, true);
+		amdgpu_vm_bo_rmv(adev, drv_priv->csa_va);
+		drv_priv->csa_va = NULL;
+		amdgpu_bo_unreserve(adev->virt.csa_obj);
+	}
+
  	/* Convert VM into a compute VM */
  	ret = amdgpu_vm_make_compute(adev, avm, pasid);
  	if (ret)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index da7b4fe..361c2e5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -1069,7 +1069,7 @@ void amdgpu_driver_postclose_kms(struct drm_device *dev,
amdgpu_vm_bo_rmv(adev, fpriv->prt_va); - if (amdgpu_sriov_vf(adev)) {
+	if (amdgpu_sriov_vf(adev) && fpriv->csa_va) {
  		/* TODO: how to handle reserve failure */
  		BUG_ON(amdgpu_bo_reserve(adev->virt.csa_obj, true));
  		amdgpu_vm_bo_rmv(adev, fpriv->csa_va);

_______________________________________________
amd-gfx mailing list
amd-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/amd-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux