[PATCH 09/14] drm: Remove the legacy DRM_IOCTL_MODESET_CTL ioctl
Alex Deucher
alexdeucher at gmail.com
Mon Nov 27 21:05:01 UTC 2023
On Wed, Nov 22, 2023 at 7:25 AM Thomas Zimmermann <tzimmermann at suse.de> wrote:
>
> DRM drivers with user-space mode setting have been removed in Linux
> v6.3. [1] Now remove the ioctl entry points for these drivers. Invoking
> any of the ioctl ops will unconditionally return -EINVAL to user space.
>
> Invoking DRM_IOCTL_MODESET_CTL is different from the other legacy
> ioctl ops as it returns 0 even without CONFIG_DRM_LEGACY set. From the
> original commit 29935554b384 ("drm: Disallow DRM_IOCTL_MODESET_CTL for
> KMS drivers") it is not apparent how or why the operation differs from
> the others. It is likely just an oversight in commit 61ae227032e7
> ("drm: allow removal of legacy codepaths (v4.1)"), which allowed
> disabling leagacy ioctls in the first place. Still keep this removal
> separate from the other ioctls to allow an easy revert, if necessary.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> Link: https://patchwork.freedesktop.org/series/111602/ # [1]
Acked-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/drm_internal.h | 2 -
> drivers/gpu/drm/drm_ioctl.c | 2 -
> drivers/gpu/drm/drm_vblank.c | 82 ----------------------------------
> 3 files changed, 86 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
> index b12c463bc4605..a538a48c7d952 100644
> --- a/drivers/gpu/drm/drm_internal.h
> +++ b/drivers/gpu/drm/drm_internal.h
> @@ -117,8 +117,6 @@ void drm_handle_vblank_works(struct drm_vblank_crtc *vblank);
> /* IOCTLS */
> int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
> struct drm_file *filp);
> -int drm_legacy_modeset_ctl_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv);
>
> /* drm_irq.c */
>
> diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
> index e6c32f76c7452..9c6326b908e74 100644
> --- a/drivers/gpu/drm/drm_ioctl.c
> +++ b/drivers/gpu/drm/drm_ioctl.c
> @@ -585,8 +585,6 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
>
> DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank_ioctl, DRM_UNLOCKED),
>
> - DRM_IOCTL_DEF(DRM_IOCTL_MODESET_CTL, drm_legacy_modeset_ctl_ioctl, 0),
> -
> DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
>
> DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_RENDER_ALLOW),
> diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
> index 877e2067534fa..a11f164b2384f 100644
> --- a/drivers/gpu/drm/drm_vblank.c
> +++ b/drivers/gpu/drm/drm_vblank.c
> @@ -1574,88 +1574,6 @@ void drm_crtc_vblank_restore(struct drm_crtc *crtc)
> }
> EXPORT_SYMBOL(drm_crtc_vblank_restore);
>
> -static void drm_legacy_vblank_pre_modeset(struct drm_device *dev,
> - unsigned int pipe)
> -{
> - struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
> -
> - /* vblank is not initialized (IRQ not installed ?), or has been freed */
> - if (!drm_dev_has_vblank(dev))
> - return;
> -
> - if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
> - return;
> -
> - /*
> - * To avoid all the problems that might happen if interrupts
> - * were enabled/disabled around or between these calls, we just
> - * have the kernel take a reference on the CRTC (just once though
> - * to avoid corrupting the count if multiple, mismatch calls occur),
> - * so that interrupts remain enabled in the interim.
> - */
> - if (!vblank->inmodeset) {
> - vblank->inmodeset = 0x1;
> - if (drm_vblank_get(dev, pipe) == 0)
> - vblank->inmodeset |= 0x2;
> - }
> -}
> -
> -static void drm_legacy_vblank_post_modeset(struct drm_device *dev,
> - unsigned int pipe)
> -{
> - struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
> -
> - /* vblank is not initialized (IRQ not installed ?), or has been freed */
> - if (!drm_dev_has_vblank(dev))
> - return;
> -
> - if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
> - return;
> -
> - if (vblank->inmodeset) {
> - spin_lock_irq(&dev->vbl_lock);
> - drm_reset_vblank_timestamp(dev, pipe);
> - spin_unlock_irq(&dev->vbl_lock);
> -
> - if (vblank->inmodeset & 0x2)
> - drm_vblank_put(dev, pipe);
> -
> - vblank->inmodeset = 0;
> - }
> -}
> -
> -int drm_legacy_modeset_ctl_ioctl(struct drm_device *dev, void *data,
> - struct drm_file *file_priv)
> -{
> - struct drm_modeset_ctl *modeset = data;
> - unsigned int pipe;
> -
> - /* If drm_vblank_init() hasn't been called yet, just no-op */
> - if (!drm_dev_has_vblank(dev))
> - return 0;
> -
> - /* KMS drivers handle this internally */
> - if (!drm_core_check_feature(dev, DRIVER_LEGACY))
> - return 0;
> -
> - pipe = modeset->crtc;
> - if (pipe >= dev->num_crtcs)
> - return -EINVAL;
> -
> - switch (modeset->cmd) {
> - case _DRM_PRE_MODESET:
> - drm_legacy_vblank_pre_modeset(dev, pipe);
> - break;
> - case _DRM_POST_MODESET:
> - drm_legacy_vblank_post_modeset(dev, pipe);
> - break;
> - default:
> - return -EINVAL;
> - }
> -
> - return 0;
> -}
> -
> static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
> u64 req_seq,
> union drm_wait_vblank *vblwait,
> --
> 2.42.1
>
More information about the dri-devel
mailing list