[PATCH 2/3] drm/amdgpu: introduce kfd user flag for amdgpu_bo
Christian König
christian.koenig at amd.com
Tue Mar 2 13:06:05 UTC 2021
Am 02.03.21 um 14:01 schrieb Nirmoy:
>
> On 3/2/21 1:40 PM, Christian König wrote:
>>
>>
>> Am 02.03.21 um 12:33 schrieb Nirmoy Das:
>>> Introduce a new flag for amdgpu_bo->flags to identify if
>>> a BO is created by KFD.
>>>
>>> Signed-off-by: Nirmoy Das <nirmoy.das at amd.com>
>>> ---
>>> .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 2 +-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 3 +-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 48
>>> ++++++++++++++++++-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 3 ++
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 +-
>>> include/uapi/drm/amdgpu_drm.h | 5 ++
>>> 6 files changed, 59 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>>> index 89d0e4f7c6a8..57798707cd5f 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>>> @@ -1227,7 +1227,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
>>> bp.flags = alloc_flags;
>>> bp.type = bo_type;
>>> bp.resv = NULL;
>>> - ret = amdgpu_bo_create(adev, &bp, &bo);
>>> + ret = amdgpu_kfd_bo_create(adev, &bp, &bo);
>>> if (ret) {
>>> pr_debug("Failed to create BO on domain %s. ret %d\n",
>>> domain_string(alloc_domain), ret);
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>>> index 8e9b8a6e6ef0..97d19f6b572d 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>>> @@ -234,7 +234,8 @@ int amdgpu_gem_create_ioctl(struct drm_device
>>> *dev, void *data,
>>> AMDGPU_GEM_CREATE_VRAM_CLEARED |
>>> AMDGPU_GEM_CREATE_VM_ALWAYS_VALID |
>>> AMDGPU_GEM_CREATE_EXPLICIT_SYNC |
>>> - AMDGPU_GEM_CREATE_ENCRYPTED))
>>> + AMDGPU_GEM_CREATE_ENCRYPTED |
>>> + AMDGPU_GEM_USER_KFD))
>>
>> Please stick with the naming here. And why _USER_KFD and not just _KFD?
>
> Ok, I will rename it to AMDGPU_GEM_KFD which sounds much better.
No. When you want to use those flags you should probably call this
AMDGPU_GEM_CREATE_KFD.
Christian.
>
>
> Thanks,
>
> Nirmoy
>
>>
>>
>> Christian.
>>
>>> return -EINVAL;
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>>> index 0bd22ed1dacf..5ebce6d6784a 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>>> @@ -697,6 +697,52 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
>>> return r;
>>> }
>>> +/**
>>> + * amdgpu_kfd_bo_create - create an &amdgpu_bo buffer object with
>>> kfd user flag
>>> + * @adev: amdgpu device object
>>> + * @bp: parameters to be used for the buffer object
>>> + * @bo_ptr: pointer to the buffer object pointer
>>> + *
>>> + * Creates an &amdgpu_bo buffer object; and if requested, also
>>> creates a
>>> + * shadow object.
>>> + * Shadow object is used to backup the original buffer object, and
>>> is always
>>> + * in GTT.
>>> + *
>>> + * Returns:
>>> + * 0 for success or a negative error code on failure.
>>> + */
>>> +
>>> +int amdgpu_kfd_bo_create(struct amdgpu_device *adev,
>>> + struct amdgpu_bo_param *bp,
>>> + 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_USER_KFD;
>>> + r = amdgpu_bo_do_create(adev, bp, bo_ptr);
>>> + if (r)
>>> + return r;
>>> +
>>> + if ((flags & AMDGPU_GEM_CREATE_SHADOW) && !(adev->flags &
>>> AMD_IS_APU)) {
>>> + if (!bp->resv)
>>> + WARN_ON(dma_resv_lock((*bo_ptr)->tbo.base.resv,
>>> + NULL));
>>> +
>>> + r = amdgpu_bo_create_shadow(adev, bp->size, *bo_ptr);
>>> +
>>> + if (!bp->resv)
>>> + dma_resv_unlock((*bo_ptr)->tbo.base.resv);
>>> +
>>> + if (r)
>>> + amdgpu_bo_unref(bo_ptr);
>>> + }
>>> +
>>> + return r;
>>> +}
>>> +
>>> +
>>> /**
>>> * amdgpu_bo_validate - validate an &amdgpu_bo buffer object
>>> * @bo: pointer to the buffer object
>>> @@ -1309,7 +1355,7 @@ void amdgpu_bo_release_notify(struct
>>> ttm_buffer_object *bo)
>>> abo = ttm_to_amdgpu_bo(bo);
>>> - if (abo->kfd_bo)
>>> + if (abo->flags & AMDGPU_GEM_USER_KFD)
>>> amdgpu_amdkfd_unreserve_memory_limit(abo);
>>> /* We only remove the fence if the resv has individualized. */
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>>> index 8cd96c9330dd..665ee0015f06 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>>> @@ -245,6 +245,9 @@ void amdgpu_bo_placement_from_domain(struct
>>> amdgpu_bo *abo, u32 domain);
>>> int amdgpu_bo_create(struct amdgpu_device *adev,
>>> struct amdgpu_bo_param *bp,
>>> struct amdgpu_bo **bo_ptr);
>>> +int amdgpu_kfd_bo_create(struct amdgpu_device *adev,
>>> + struct amdgpu_bo_param *bp,
>>> + struct amdgpu_bo **bo_ptr);
>>> int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
>>> unsigned long size, int align,
>>> u32 domain, struct amdgpu_bo **bo_ptr,
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> index 7b2db779f313..d36b1932db78 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> @@ -164,7 +164,7 @@ static int amdgpu_verify_access(struct
>>> ttm_buffer_object *bo, struct file *filp)
>>> * Don't verify access for KFD BOs. They don't have a GEM
>>> * object associated with them.
>>> */
>>> - if (abo->kfd_bo)
>>> + if (abo->flags & AMDGPU_GEM_USER_KFD)
>>> return 0;
>>> if (amdgpu_ttm_tt_get_usermm(bo->ttm))
>>> diff --git a/include/uapi/drm/amdgpu_drm.h
>>> b/include/uapi/drm/amdgpu_drm.h
>>> index 8b832f7458f2..f7157bd8a1f0 100644
>>> --- a/include/uapi/drm/amdgpu_drm.h
>>> +++ b/include/uapi/drm/amdgpu_drm.h
>>> @@ -142,6 +142,11 @@ extern "C" {
>>> */
>>> #define AMDGPU_GEM_CREATE_ENCRYPTED (1 << 10)
>>> +/* Flag that the allocating BO's user is KFD. It should never be
>>> used by
>>> + * user space applications
>>> + */
>>> +#define AMDGPU_GEM_USER_KFD (1 << 20)
>>> +
>>> struct drm_amdgpu_gem_create_in {
>>> /** the requested memory size */
>>> __u64 bo_size;
>>
More information about the amd-gfx
mailing list