[PATCH 1/1] drm/amd/amdgpu: get maximum and used UVD handles (v3)
Emil Velikov
emil.l.velikov at gmail.com
Wed Dec 14 15:56:01 UTC 2016
On 12 December 2016 at 18:49, <arindam.nath at amd.com> wrote:
> From: Arindam Nath <arindam.nath at amd.com>
>
> Change History
> --------------
>
> v3: changes suggested by Christian
> - Add a check for UVD IP block using AMDGPU_HW_IP_UVD
> query type.
> - Add a check for asic_type to be less than
> CHIP_POLARIS10 since starting Polaris, we support
> unlimited UVD instances.
> - Add kerneldoc style comment for
> amdgpu_uvd_used_handles().
>
> v2: as suggested by Christian
> - Add a new query AMDGPU_INFO_NUM_HANDLES
> - Create a helper function to return the number
> of currently used UVD handles.
> - Modify the logic to count the number of used
> UVD handles since handles can be freed in
> non-linear fashion.
>
> v1:
> - User might want to query the maximum number of UVD
> instances supported by firmware. In addition to that,
> if there are multiple applications using UVD handles
> at the same time, he might also want to query the
> currently used number of handles.
>
> For this we add two variables max_handles and
> used_handles inside drm_amdgpu_info_hw_ip. So now
> an application (or libdrm) can use AMDGPU_INFO IOCTL
> with AMDGPU_INFO_HW_IP_INFO query type to get these
> values.
>
> Signed-off-by: Arindam Nath <arindam.nath at amd.com>
> Reviewed-by: Christian König <christian.koenig at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 21 +++++++++++++++++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 25 +++++++++++++++++++++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h | 1 +
> include/uapi/drm/amdgpu_drm.h | 9 +++++++++
> 4 files changed, 56 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index 174eb59..3273d8c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -570,6 +570,27 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
> return -EINVAL;
> }
> }
> + case AMDGPU_INFO_NUM_HANDLES: {
> + struct drm_amdgpu_info_num_handles handle;
> +
> + switch (info->query_hw_ip.type) {
> + case AMDGPU_HW_IP_UVD:
> + /* Starting Polaris, we support unlimited UVD handles */
> + if (adev->asic_type < CHIP_POLARIS10) {
> + handle.uvd_max_handles = adev->uvd.max_handles;
> + handle.uvd_used_handles = amdgpu_uvd_used_handles(adev);
> +
> + return copy_to_user(out, &handle,
> + min((size_t)size, sizeof(handle))) ? -EFAULT : 0;
> + } else {
> + return -EINVAL;
Using EINVAL doesn't seem right here. As per man 3 ioctl
EINVAL The request or arg argument is not valid for this device.
A bit further down you can see the one you want.
ENODEV The fildes argument refers to a valid STREAMS device, but
the corresponding device driver does not support the ioctl() function.
Worth checking through the existing code and correcting similar thinkos ?
Thanks
Emil
More information about the dri-devel
mailing list