[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