[PATCH] amdgpu: Query uvd handles info

Koenig, Christian Christian.Koenig at amd.com
Tue Apr 30 12:32:18 UTC 2019


Am 30.04.19 um 14:03 schrieb Sahu, Satyajit:
> On 4/30/2019 5:02 PM, Christian König wrote:
>> [CAUTION: External Email]
>>
>> Am 30.04.19 um 13:12 schrieb Sahu, Satyajit:
>>> On 4/30/2019 4:29 PM, Christian König wrote:
>>>> [CAUTION: External Email]
>>>>
>>>> Am 30.04.19 um 12:51 schrieb Sahu, Satyajit:
>>>>> Query the max uvd handles and used uvd handles.
>>>> NAK, please use the generic amdgpu_query_info() function for this.
>>>>
>>>> Regards,
>>>> Christian.
>>> Currently amdgpu_query_info does not provide an option to specify the
>>> hw_ip_type. For AMDGPU_INFO_NUM_HANDLES the hw_ip_type needs to be
>>> AMDGPU_HW_IP_UVD, otherwise the kernel returns error.
>> Ok, that makes sense.
>>
>> But please still add a generic query function which takes query and
>> hw_ip_type instead of hard coding those values.
> Should I add a new parameter in amdgpu_query_info or add a new query_info?

Add a new one and please double check if there isn't something existing 
which can be used.

>> BTW: What do you need this for? The number returned is pretty useless on
>> newer hardware.
> On stoney chromebook when  simultaneous used uvd handles exceeds max
> supported uvd handles, there is a failure which is not handled. Thatswhy
> there is a need to check it before allocation so that we can fallback to
> software decoding.

Well that is still racy, e.g. two processes can at the same time query 
that there is only 1 handle slot left and then both try to use it.

Better would be to add the missing handling that we can't create an UVD 
context in this case.

Christian.

>> Regards,
>> Christian.
>>
>>> Regards,
>>>
>>> Satyajit
> Regards,
>
> Satyajit
>
>>>>> Signed-off-by: Satyajit Sahu <satyajit.sahu at amd.com>
>>>>> ---
>>>>>     amdgpu/amdgpu.h          | 14 ++++++++++++++
>>>>>     amdgpu/amdgpu_gpu_info.c | 15 +++++++++++++++
>>>>>     2 files changed, 29 insertions(+)
>>>>>
>>>>> diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
>>>>> index c44a495a..407b5fae 100644
>>>>> --- a/amdgpu/amdgpu.h
>>>>> +++ b/amdgpu/amdgpu.h
>>>>> @@ -1174,6 +1174,20 @@ int amdgpu_query_gpu_info(amdgpu_device_handle
>>>>> dev,
>>>>>     int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id,
>>>>>                       unsigned size, void *value);
>>>>>
>>>>> +/**
>>>>> + * Query uvd handles info.
>>>>> + *
>>>>> + *
>>>>> + * \param   dev     - \c [in] Device handle. See
>>>>> #amdgpu_device_initialize()
>>>>> + * \param   size    - \c [in] Size of the returned value.
>>>>> + * \param   value   - \c [out] Pointer to the return value.
>>>>> + *
>>>>> + * \return   0 on success\n
>>>>> + *          <0 - Negative POSIX error code
>>>>> + *
>>>>> +*/
>>>>> +int amdgpu_query_uvd_handles(amdgpu_device_handle dev,
>>>>> +                      unsigned size, void *value);
>>>>>     /**
>>>>>      * Query hardware or driver information.
>>>>>      *
>>>>> diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c
>>>>> index 777087f2..253c4da7 100644
>>>>> --- a/amdgpu/amdgpu_gpu_info.c
>>>>> +++ b/amdgpu/amdgpu_gpu_info.c
>>>>> @@ -44,6 +44,21 @@ drm_public int
>>>>> amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id,
>>>>>                                sizeof(struct drm_amdgpu_info));
>>>>>     }
>>>>>
>>>>> +drm_public int amdgpu_query_uvd_handles(amdgpu_device_handle dev,
>>>>> +                                        unsigned size, void *value)
>>>>> +{
>>>>> +     struct drm_amdgpu_info request;
>>>>> +
>>>>> +     memset(&request, 0, sizeof(request));
>>>>> +     request.return_pointer = (uintptr_t)value;
>>>>> +     request.return_size = size;
>>>>> +     request.query = AMDGPU_INFO_NUM_HANDLES;
>>>>> +     request.query_hw_ip.type = AMDGPU_HW_IP_UVD;
>>>>> +
>>>>> +     return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
>>>>> +                            sizeof(struct drm_amdgpu_info));
>>>>> +}
>>>>> +
>>>>>     drm_public int amdgpu_query_crtc_from_id(amdgpu_device_handle dev,
>>>>> unsigned id,
>>>>>                                          int32_t *result)
>>>>>     {
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel



More information about the dri-devel mailing list