From 3b3291708b284b3d78f8a7b7a47f98125f3273dd Mon Sep 17 00:00:00 2001 From: Jim Qu Date: Mon, 22 Jan 2018 16:01:18 +0800 Subject: [PATCH 3180/4131] Revert "drm/amdgpu: always allocate a PASIDs for each VM v2" This reverts commit c5867fb4c587e9469aca28265ecd2ba6a74d8269. The original patch depend on dma-buf: make returning the exclusive fence optional in core kernel. now revert the patch until dma-buf patch is ready in kernel distro. Signed-off-by: Jim Qu --- drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 43 +++++++++++---------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index 65d69a9..efa2b48 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -862,7 +862,7 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv) { struct amdgpu_device *adev = dev->dev_private; struct amdgpu_fpriv *fpriv; - int r, pasid; + int r; file_priv->driver_priv = NULL; @@ -876,25 +876,28 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv) goto out_suspend; } - pasid = amdgpu_pasid_alloc(16); - if (pasid < 0) { - dev_warn(adev->dev, "No more PASIDs available!"); - pasid = 0; + r = amdgpu_vm_init(adev, &fpriv->vm, + AMDGPU_VM_CONTEXT_GFX, 0); + if (r) { + kfree(fpriv); + goto out_suspend; } - r = amdgpu_vm_init(adev, &fpriv->vm, AMDGPU_VM_CONTEXT_GFX, pasid); - if (r) - goto error_pasid; fpriv->prt_va = amdgpu_vm_bo_add(adev, &fpriv->vm, NULL); if (!fpriv->prt_va) { r = -ENOMEM; - goto error_vm; + amdgpu_vm_fini(adev, &fpriv->vm); + kfree(fpriv); + goto out_suspend; } if (amdgpu_sriov_vf(adev)) { r = amdgpu_map_static_csa(adev, &fpriv->vm, &fpriv->csa_va); - if (r) - goto error_vm; + if (r) { + amdgpu_vm_fini(adev, &fpriv->vm); + kfree(fpriv); + goto out_suspend; + } } mutex_init(&fpriv->bo_list_lock); @@ -905,16 +908,6 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv) amdgpu_ctx_mgr_init(&fpriv->ctx_mgr); file_priv->driver_priv = fpriv; - goto out_suspend; - -error_vm: - amdgpu_vm_fini(adev, &fpriv->vm); - -error_pasid: - if (pasid) - amdgpu_pasid_free(pasid); - - kfree(fpriv); out_suspend: pm_runtime_mark_last_busy(dev->dev); @@ -938,8 +931,6 @@ void amdgpu_driver_postclose_kms(struct drm_device *dev, struct amdgpu_fpriv *fpriv = file_priv->driver_priv; struct amdgpu_bo_list *list; struct amdgpu_sem *sem; - struct amdgpu_bo *pd; - unsigned int pasid; int handle; if (!fpriv) @@ -964,13 +955,7 @@ void amdgpu_driver_postclose_kms(struct drm_device *dev, amdgpu_bo_unreserve(adev->virt.csa_obj); } - pasid = fpriv->vm.pasid; - pd = amdgpu_bo_ref(fpriv->vm.root.base.bo); - amdgpu_vm_fini(adev, &fpriv->vm); - if (pasid) - amdgpu_pasid_free_delayed(pd->tbo.resv, pasid); - amdgpu_bo_unref(&pd); idr_for_each_entry(&fpriv->bo_list_handles, list, handle) amdgpu_bo_list_free(list); -- 2.7.4