All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nirmoy <nirmodas@amd.com>
To: "Christian König" <ckoenig.leichtzumerken@gmail.com>,
	"Nirmoy Das" <nirmoy.das@amd.com>,
	Christian.Koenig@amd.com, Felix.Kuehling@amd.com
Cc: amd-gfx@lists.freedesktop.org
Subject: Re: [PATCH v2 3/3] drm/amdgpu: drm/amdkfd: add amdgpu_kfd_bo struct
Date: Wed, 3 Mar 2021 14:06:20 +0100	[thread overview]
Message-ID: <c4dea918-3421-5b37-c0cc-2cacdcdd8c2d@amd.com> (raw)
In-Reply-To: <93d5ce90-c0ba-09bd-dea1-e41f13c288d2@gmail.com>


On 3/3/21 1:04 PM, Christian König wrote:
> Am 03.03.21 um 10:25 schrieb Nirmoy Das:
>> Implement a new struct based on amdgpu_bo base class
>> for BOs created by kfd device so that kfd related memeber
>> of amdgpu_bo can be moved there.
>
> You should probably restructure which patch has which code in it here.
>
> The first one adds the general infrastructure and makes the necessary 
> modification to allow allocating BO structures with different 
> structure size.
>
> And the second then adds the amdgpu_kfd_bo structure so that the KFD 
> can use it.


Thanks, I will split this into two.


>
> You should also double check with Felix if we don't support importing 
> BOs from elsewhere here and if that approach is correct.


Waiting for Felix to come back from vacation.


Nirmoy




>
> Regards,
> Christian.
>
>>
>> v2: rename AMDGPU_GEM_USER_KFD -> AMDGPU_GEM_CREATE_KFD
>>
>> Signed-off-by: Nirmoy Das <nirmoy.das@amd.com>
>> ---
>>   .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c  | 10 ++++--
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c        |  3 +-
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c    | 32 ++++++++++++++-----
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.h    |  8 ++++-
>>   4 files changed, 40 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> index 57798707cd5f..1f52ae4de609 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> @@ -1152,6 +1152,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>>       struct sg_table *sg = NULL;
>>       uint64_t user_addr = 0;
>>       struct amdgpu_bo *bo;
>> +    struct amdgpu_kfd_bo *kbo;
>>       struct amdgpu_bo_param bp;
>>       u32 domain, alloc_domain;
>>       u64 alloc_flags;
>> @@ -1227,17 +1228,20 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>>       bp.flags = alloc_flags;
>>       bp.type = bo_type;
>>       bp.resv = NULL;
>> -    ret = amdgpu_kfd_bo_create(adev, &bp, &bo);
>> +    ret = amdgpu_kfd_bo_create(adev, &bp, &kbo);
>>       if (ret) {
>>           pr_debug("Failed to create BO on domain %s. ret %d\n",
>>                   domain_string(alloc_domain), ret);
>>           goto err_bo_create;
>>       }
>> +
>> +    bo = &kbo->bo;
>>       if (bo_type == ttm_bo_type_sg) {
>>           bo->tbo.sg = sg;
>>           bo->tbo.ttm->sg = sg;
>>       }
>> -    bo->kfd_bo = *mem;
>> +
>> +    kbo->kfd_bo = *mem;
>>       (*mem)->bo = bo;
>>       if (user_addr)
>>           bo->flags |= AMDGPU_AMDKFD_USERPTR_BO;
>> @@ -1261,7 +1265,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>>
>>   allocate_init_user_pages_failed:
>>       remove_kgd_mem_from_kfd_bo_list(*mem, avm->process_info);
>> -    amdgpu_bo_unref(&bo);
>> +    amdgpu_kfd_bo_unref(&kbo);
>>       /* Don't unreserve system mem limit twice */
>>       goto err_reserve_limit;
>>   err_bo_create:
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
>> index 1da67cf812b1..eaaf4940abcb 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
>> @@ -102,6 +102,7 @@ static bool amdgpu_mn_invalidate_hsa(struct 
>> mmu_interval_notifier *mni,
>>                        unsigned long cur_seq)
>>   {
>>       struct amdgpu_bo *bo = container_of(mni, struct amdgpu_bo, 
>> notifier);
>> +    struct amdgpu_kfd_bo *kbo = container_of(bo, struct 
>> amdgpu_kfd_bo, bo);
>>       struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>>
>>       if (!mmu_notifier_range_blockable(range))
>> @@ -111,7 +112,7 @@ static bool amdgpu_mn_invalidate_hsa(struct 
>> mmu_interval_notifier *mni,
>>
>>       mmu_interval_set_seq(mni, cur_seq);
>>
>> -    amdgpu_amdkfd_evict_userptr(bo->kfd_bo, bo->notifier.mm);
>> +    amdgpu_amdkfd_evict_userptr(kbo->kfd_bo, bo->notifier.mm);
>>       mutex_unlock(&adev->notifier_lock);
>>
>>       return true;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> index 1b41b4870c99..787eb99119a2 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> @@ -551,8 +551,10 @@ static int amdgpu_bo_do_create(struct 
>> amdgpu_device *adev,
>>
>>       acc_size = ttm_bo_dma_acc_size(&adev->mman.bdev, size,
>>                          sizeof(struct amdgpu_bo));
>> +    if (bp->bo_ptr_size < sizeof(struct amdgpu_bo))
>> +        bp->bo_ptr_size = sizeof(struct amdgpu_bo);
>>
>> -    bo = kzalloc(sizeof(struct amdgpu_bo), GFP_KERNEL);
>> +    bo = kzalloc(bp->bo_ptr_size, GFP_KERNEL);
>>       if (bo == NULL)
>>           return -ENOMEM;
>>       drm_gem_private_object_init(adev_to_drm(adev), &bo->tbo.base, 
>> size);
>> @@ -714,35 +716,37 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
>>
>>   int amdgpu_kfd_bo_create(struct amdgpu_device *adev,
>>                struct amdgpu_bo_param *bp,
>> -             struct amdgpu_bo **bo_ptr)
>> +             struct amdgpu_kfd_bo **kfd_bo_ptr)
>>   {
>> +    struct amdgpu_bo *bo_ptr;
>>       u64 flags = bp->flags;
>>       int r;
>>
>>       bp->flags = bp->flags & ~AMDGPU_GEM_CREATE_SHADOW;
>>       bp->flags = bp->flags | AMDGPU_GEM_CREATE_KFD;
>> -    r = amdgpu_bo_do_create(adev, bp, bo_ptr);
>> +    bp->bo_ptr_size = sizeof(struct amdgpu_kfd_bo);
>> +    r = amdgpu_bo_do_create(adev, bp, &bo_ptr);
>>       if (r)
>>           return r;
>>
>> +    *kfd_bo_ptr = (struct amdgpu_kfd_bo *)bo_ptr;
>>       if ((flags & AMDGPU_GEM_CREATE_SHADOW) && !(adev->flags & 
>> AMD_IS_APU)) {
>>           if (!bp->resv)
>> -            WARN_ON(dma_resv_lock((*bo_ptr)->tbo.base.resv,
>> + WARN_ON(dma_resv_lock((*kfd_bo_ptr)->bo.tbo.base.resv,
>>                               NULL));
>>
>> -        r = amdgpu_bo_create_shadow(adev, bp->size, *bo_ptr);
>> +        r = amdgpu_bo_create_shadow(adev, bp->size, 
>> &(*kfd_bo_ptr)->bo);
>>
>>           if (!bp->resv)
>> -            dma_resv_unlock((*bo_ptr)->tbo.base.resv);
>> + dma_resv_unlock((*kfd_bo_ptr)->bo.tbo.base.resv);
>>
>>           if (r)
>> -            amdgpu_bo_unref(bo_ptr);
>> +            amdgpu_kfd_bo_unref(kfd_bo_ptr);
>>       }
>>
>>       return r;
>>   }
>>
>> -
>>   /**
>>    * amdgpu_bo_validate - validate an &amdgpu_bo buffer object
>>    * @bo: pointer to the buffer object
>> @@ -910,6 +914,18 @@ void amdgpu_bo_unref(struct amdgpu_bo **bo)
>>       *bo = NULL;
>>   }
>>
>> +void amdgpu_kfd_bo_unref(struct amdgpu_kfd_bo **kbo)
>> +{
>> +    struct ttm_buffer_object *tbo;
>> +
>> +    if ((*kbo) == NULL)
>> +        return;
>> +
>> +    tbo = &((*kbo)->bo.tbo);
>> +    ttm_bo_put(tbo);
>> +    *kbo = NULL;
>> +}
>> +
>>   /**
>>    * amdgpu_bo_pin_restricted - pin an &amdgpu_bo buffer object
>>    * @bo: &amdgpu_bo buffer object to be pinned
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>> index 665ee0015f06..fa98a1fe2574 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>> @@ -43,6 +43,8 @@ struct amdgpu_bo_param {
>>       u32                domain;
>>       u32                preferred_domain;
>>       u64                flags;
>> +    /* size of a subclass using amdgpu_bo as base class */
>> +    u32                bo_ptr_size;
>>       enum ttm_bo_type        type;
>>       bool                no_wait_gpu;
>>       struct dma_resv    *resv;
>> @@ -109,7 +111,10 @@ struct amdgpu_bo {
>>   #endif
>>
>>       struct list_head        shadow_list;
>> +};
>>
>> +struct amdgpu_kfd_bo {
>> +    struct amdgpu_bo        bo;
>>       struct kgd_mem                  *kfd_bo;
>>   };
>>
>> @@ -247,7 +252,7 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
>>                struct amdgpu_bo **bo_ptr);
>>   int amdgpu_kfd_bo_create(struct amdgpu_device *adev,
>>                struct amdgpu_bo_param *bp,
>> -             struct amdgpu_bo **bo_ptr);
>> +             struct amdgpu_kfd_bo **bo_ptr);
>>   int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
>>                     unsigned long size, int align,
>>                     u32 domain, struct amdgpu_bo **bo_ptr,
>> @@ -266,6 +271,7 @@ void *amdgpu_bo_kptr(struct amdgpu_bo *bo);
>>   void amdgpu_bo_kunmap(struct amdgpu_bo *bo);
>>   struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo);
>>   void amdgpu_bo_unref(struct amdgpu_bo **bo);
>> +void amdgpu_kfd_bo_unref(struct amdgpu_kfd_bo **kbo);
>>   int amdgpu_bo_pin(struct amdgpu_bo *bo, u32 domain);
>>   int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
>>                    u64 min_offset, u64 max_offset);
>> -- 
>> 2.30.1
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx@lists.freedesktop.org
>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=04%7C01%7Cnirmoy.das%40amd.com%7C96a11e5487d445a1aed608d8de3c801c%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637503698719785279%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=5ZHeoPPXcqfNiEBe%2FM64jEnTUnnGS34PfblzkKIp%2FkE%3D&amp;reserved=0 
>>
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

  reply	other threads:[~2021-03-03 13:06 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-03  9:25 [PATCH 1/3] drm/amdgpu: drm/amdkfd: split amdgpu_mn_register Nirmoy Das
2021-03-03  9:25 ` [PATCH v2 2/3] drm/amdgpu: introduce kfd user flag for amdgpu_bo Nirmoy Das
2021-03-03 12:01   ` Christian König
2021-03-03 12:41     ` Nirmoy
2021-03-03 12:46       ` Christian König
2021-03-03  9:25 ` [PATCH v2 3/3] drm/amdgpu: drm/amdkfd: add amdgpu_kfd_bo struct Nirmoy Das
2021-03-03 12:04   ` Christian König
2021-03-03 13:06     ` Nirmoy [this message]
2021-03-05  0:37     ` Felix Kuehling
2021-03-05  9:13       ` Nirmoy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c4dea918-3421-5b37-c0cc-2cacdcdd8c2d@amd.com \
    --to=nirmodas@amd.com \
    --cc=Christian.Koenig@amd.com \
    --cc=Felix.Kuehling@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=ckoenig.leichtzumerken@gmail.com \
    --cc=nirmoy.das@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.