[PATCH 2/2] drm/vblank: Unexport drm_vblank_cleanup
Daniel Vetter
daniel at ffwll.ch
Tue Jun 27 07:56:53 UTC 2017
On Mon, Jun 26, 2017 at 06:19:49PM +0200, Daniel Vetter wrote:
> There's no reason for drivers to call this, and all the ones I've
> removed looked very fishy:
> - Proper quiescenting of the vblank machinery should be done by
> calling drm_crtc_vblank_off(), which is best done by shutting down
> the entire display engine with drm_atomic_helper_shutdown.
>
> - Releasing of allocated memory is done by the core already, it calls
> drm_vblank_cleanup as a fallback.
>
> - drm_vblank_cleanup also has checks for drivers which forget to clean
> up vblank interrupts.
>
> This essentially reverts
>
> commit e77cef9c2d87db835ad9d70cde4a9b00b0ca2262
> Author: Jerome Glisse <jglisse at redhat.com>
> Date: Thu Jan 7 15:39:13 2010 +0100
>
> drm: Avoid calling vblank function is vblank wasn't initialized
>
> which was done to fix a bug in radeon code with msi interrupts:
>
> commit 003e69f9862bcda89a75c27750efdbc17ac02945
> Author: Jerome Glisse <jglisse at redhat.com>
> Date: Thu Jan 7 15:39:14 2010 +0100
>
> drm/radeon/kms: Don't try to enable IRQ if we have no handler installed
>
> Afaict from digging around in old code, this was needed to avoid
> blowing up in the ums fallback, and has stopped serving it's purpose
> long ago - if irq init fails, the driver fails to load, and there's
> really no way to blow up anymore.
>
> Long story short, this was most likely a small ums compat/fallback
> hack that became a thing of it's own and got cargo-cult duplicated all
> over the drm codebase for essentially no gain at all.
>
> v2: Mention that for drivers with a ->release callback cleanup is
> handled by drm_dev_fini() (Thierry).
>
> Cc: Thierry Reding <treding at nvidia.com>
> Acked-by: Thierry Reding <treding at nvidia.com>
> Cc: Jerome Glisse <jglisse at redhat.com>
> Reviewed-by: Sean Paul <seanpaul at chromium.org>
> Acked-by: Alex Deucher <alexander.deucher at amd.com>
> Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
Vacuumed up all the remaining patches here, thx to everyon who helped with
the reviews.
-Daniel
> ---
> drivers/gpu/drm/drm_internal.h | 1 +
> drivers/gpu/drm/drm_vblank.c | 19 ++-----------------
> include/drm/drm_vblank.h | 1 -
> 3 files changed, 3 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
> index f89371e920e6..068b685608cf 100644
> --- a/drivers/gpu/drm/drm_internal.h
> +++ b/drivers/gpu/drm/drm_internal.h
> @@ -57,6 +57,7 @@ int drm_gem_name_info(struct seq_file *m, void *data);
> /* drm_vblank.c */
> extern unsigned int drm_timestamp_monotonic;
> void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe);
> +void drm_vblank_cleanup(struct drm_device *dev);
>
> /* IOCTLS */
> int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
> diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
> index 7e3f59182571..05d043e9219f 100644
> --- a/drivers/gpu/drm/drm_vblank.c
> +++ b/drivers/gpu/drm/drm_vblank.c
> @@ -394,19 +394,6 @@ static void vblank_disable_fn(unsigned long arg)
> spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
> }
>
> -/**
> - * drm_vblank_cleanup - cleanup vblank support
> - * @dev: DRM device
> - *
> - * This function cleans up any resources allocated in drm_vblank_init(). It is
> - * called by the DRM core when @dev is finalized.
> - *
> - * Drivers can call drm_vblank_cleanup() if they need to quiescent the vblank
> - * interrupt in their unload code. But in general this should be handled by
> - * disabling all active &drm_crtc through e.g. drm_atomic_helper_shutdown, which
> - * should end up calling drm_crtc_vblank_off().
> - *
> - */
> void drm_vblank_cleanup(struct drm_device *dev)
> {
> unsigned int pipe;
> @@ -428,7 +415,6 @@ void drm_vblank_cleanup(struct drm_device *dev)
>
> dev->num_crtcs = 0;
> }
> -EXPORT_SYMBOL(drm_vblank_cleanup);
>
> /**
> * drm_vblank_init - initialize vblank support
> @@ -436,9 +422,8 @@ EXPORT_SYMBOL(drm_vblank_cleanup);
> * @num_crtcs: number of CRTCs supported by @dev
> *
> * This function initializes vblank support for @num_crtcs display pipelines.
> - * Drivers do not need to call drm_vblank_cleanup(), cleanup is already handled
> - * by the DRM core, or through calling drm_dev_fini() for drivers with a
> - * &drm_driver.release callback.
> + * Cleanup is handled by the DRM core, or through calling drm_dev_fini() for
> + * drivers with a &drm_driver.release callback.
> *
> * Returns:
> * Zero on success or a negative error code on failure.
> diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h
> index 4ceef128582f..7fba9efe4951 100644
> --- a/include/drm/drm_vblank.h
> +++ b/include/drm/drm_vblank.h
> @@ -168,7 +168,6 @@ void drm_crtc_wait_one_vblank(struct drm_crtc *crtc);
> void drm_crtc_vblank_off(struct drm_crtc *crtc);
> void drm_crtc_vblank_reset(struct drm_crtc *crtc);
> void drm_crtc_vblank_on(struct drm_crtc *crtc);
> -void drm_vblank_cleanup(struct drm_device *dev);
> u32 drm_crtc_accurate_vblank_count(struct drm_crtc *crtc);
>
> bool drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
> --
> 2.11.0
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list