[PATCH 1/6] drm/amdgpu: allow ioctls to opt-out of runtime pm

Christian König christian.koenig at amd.com
Wed Jun 19 09:26:32 UTC 2024


Am 18.06.24 um 17:23 schrieb Pierre-Eric Pelloux-Prayer:
> Waking up a device can take multiple seconds, so if it's not
> going to be used we might as well not resume it.
>
> The safest default behavior for all ioctls is to resume the GPU,
> so this change allows specific ioctls to opt-out of generic
> runtime pm.

I'm really wondering if we shouldn't put that into the IOCTL description.

See amdgpu_ioctls_kms and DRM_IOCTL_DEF_DRV() for what I mean.

Regards,
Christian.

>
> Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 25 ++++++++++++++++++++-----
>   1 file changed, 20 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 60d5758939ae..a9831b243bfc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -2855,18 +2855,33 @@ long amdgpu_drm_ioctl(struct file *filp,
>   {
>   	struct drm_file *file_priv = filp->private_data;
>   	struct drm_device *dev;
> +	bool needs_device;
>   	long ret;
>   
>   	dev = file_priv->minor->dev;
> -	ret = pm_runtime_get_sync(dev->dev);
> -	if (ret < 0)
> -		goto out;
> +
> +	/* Some ioctl can opt-out of powermanagement handling
> +	 * if they don't require the device to be resumed.
> +	 */
> +	switch (cmd) {
> +	default:
> +		needs_device = true;
> +	}
> +
> +	if (needs_device) {
> +		ret = pm_runtime_get_sync(dev->dev);
> +		if (ret < 0)
> +			goto out;
> +	}
>   
>   	ret = drm_ioctl(filp, cmd, arg);
>   
> -	pm_runtime_mark_last_busy(dev->dev);
>   out:
> -	pm_runtime_put_autosuspend(dev->dev);
> +	if (needs_device) {
> +		pm_runtime_mark_last_busy(dev->dev);
> +		pm_runtime_put_autosuspend(dev->dev);
> +	}
> +
>   	return ret;
>   }
>   



More information about the amd-gfx mailing list