[AMD Official Use Only - Internal Distribution Only]

Acked-by: Ramesh Errabolu <ramesh.errab...@amd.com>

-----Original Message-----
From: amd-gfx <amd-gfx-boun...@lists.freedesktop.org> On Behalf Of Kuehling, 
Felix
Sent: Wednesday, April 21, 2021 8:31 PM
To: amd-...@lists.freedesktop.org; dri-devel@lists.freedesktop.org
Subject: [PATCH v2 03/10] drm/amdgpu: Keep a bo-reference per-attachment

For now they all reference the same BO. For correct DMA mappings they will 
refer to different BOs per-GPU.

Signed-off-by: Felix Kuehling <felix.kuehl...@amd.com>
---
 .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c  | 22 ++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index fee4c64dd051..34c9a2d0028e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -489,11 +489,11 @@ static int kfd_mem_attach(struct amdgpu_device *adev, 
struct kgd_mem *mem,
                struct amdgpu_vm *vm, bool is_aql,
                struct kfd_mem_attachment **p_attachment)  {
-       int ret;
-       struct kfd_mem_attachment *attachment;
-       struct amdgpu_bo *bo = mem->bo;
+       unsigned long bo_size = mem->bo->tbo.base.size;
        uint64_t va = mem->va;
-       unsigned long bo_size = bo->tbo.base.size;
+       struct kfd_mem_attachment *attachment;
+       struct amdgpu_bo *bo;
+       int ret;
 
        if (!va) {
                pr_err("Invalid VA when adding BO to VM\n"); @@ -510,6 +510,14 
@@ static int kfd_mem_attach(struct amdgpu_device *adev, struct kgd_mem *mem,
        pr_debug("\t add VA 0x%llx - 0x%llx to vm %p\n", va,
                        va + bo_size, vm);
 
+       /* FIXME: For now all attachments use the same BO. This is incorrect
+        * because one BO can only have one DMA mapping for one GPU. We need
+        * one BO per GPU, e.g. a DMABuf import with dynamic attachment. This
+        * will be addressed one BO-type at a time in subsequent patches.
+        */
+       bo = mem->bo;
+       drm_gem_object_get(&bo->tbo.base);
+
        /* Add BO to VM internal data structures*/
        attachment->bo_va = amdgpu_vm_bo_add(adev, vm, bo);
        if (!attachment->bo_va) {
@@ -529,7 +537,7 @@ static int kfd_mem_attach(struct amdgpu_device *adev, 
struct kgd_mem *mem,
 
        /* Allocate validate page tables if needed */
        ret = vm_validate_pt_pd_bos(vm);
-       if (ret) {
+       if (unlikely(ret)) {
                pr_err("validate_pt_pd_bos() failed\n");
                goto err_alloc_pts;
        }
@@ -540,15 +548,19 @@ static int kfd_mem_attach(struct amdgpu_device *adev, 
struct kgd_mem *mem,
        amdgpu_vm_bo_rmv(adev, attachment->bo_va);
        list_del(&attachment->list);
 err_vmadd:
+       drm_gem_object_put(&bo->tbo.base);
        kfree(attachment);
        return ret;
 }
 
 static void kfd_mem_detach(struct kfd_mem_attachment *attachment)  {
+       struct amdgpu_bo *bo = attachment->bo_va->base.bo;
+
        pr_debug("\t remove VA 0x%llx in entry %p\n",
                        attachment->va, attachment);
        amdgpu_vm_bo_rmv(attachment->adev, attachment->bo_va);
+       drm_gem_object_put(&bo->tbo.base);
        list_del(&attachment->list);
        kfree(attachment);
 }
--
2.31.1

_______________________________________________
amd-gfx mailing list
amd-...@lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=04%7C01%7Cphilip.yang%40amd.com%7C45e84767a4a54ffcf1e908d9052e6301%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637546519079854064%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=h9%2BK4amKsU5EZUkaA5tI3j1x7xSWECROzVi%2FAY%2FgtLs%3D&amp;reserved=0

Reply via email to