[PATCH 21/27] drm/rockchip: Nuke pending event handling in preclose
Daniel Vetter
daniel at ffwll.ch
Fri Jun 10 15:21:13 UTC 2016
On Wed, Jun 08, 2016 at 02:19:13PM +0200, Daniel Vetter wrote:
> This is now handled by the core, drivers can totally ignore lifetime
> issues of drm events.
>
> Cc: Tomeu Vizoso <tomeu.vizoso at collabora.com>
> Cc: Mark yao <mark.yao at rock-chips.com>
> Tested-by: Tomeu Vizoso <tomeu.vizoso at collabora.com>
> Reviewed-by: Tomeu Vizoso <tomeu.vizoso at collabora.com>
> Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
Ok, I merged up to this one, excluding i915 code (that needs a tiny bit of
polish, plus close inspection by CI). Thanks to everyone who helped
testing and provided feedback on this work.
-Daniel
> ---
> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 22 ----------------------
> drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 1 -
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 20 --------------------
> 3 files changed, 43 deletions(-)
>
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index 2fac6799ceb2..2251121343e6 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -257,27 +257,6 @@ static int rockchip_drm_unload(struct drm_device *drm_dev)
> return 0;
> }
>
> -static void rockchip_drm_crtc_cancel_pending_vblank(struct drm_crtc *crtc,
> - struct drm_file *file_priv)
> -{
> - struct rockchip_drm_private *priv = crtc->dev->dev_private;
> - int pipe = drm_crtc_index(crtc);
> -
> - if (pipe < ROCKCHIP_MAX_CRTC &&
> - priv->crtc_funcs[pipe] &&
> - priv->crtc_funcs[pipe]->cancel_pending_vblank)
> - priv->crtc_funcs[pipe]->cancel_pending_vblank(crtc, file_priv);
> -}
> -
> -static void rockchip_drm_preclose(struct drm_device *dev,
> - struct drm_file *file_priv)
> -{
> - struct drm_crtc *crtc;
> -
> - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
> - rockchip_drm_crtc_cancel_pending_vblank(crtc, file_priv);
> -}
> -
> void rockchip_drm_lastclose(struct drm_device *dev)
> {
> struct rockchip_drm_private *priv = dev->dev_private;
> @@ -303,7 +282,6 @@ static struct drm_driver rockchip_drm_driver = {
> DRIVER_PRIME | DRIVER_ATOMIC,
> .load = rockchip_drm_load,
> .unload = rockchip_drm_unload,
> - .preclose = rockchip_drm_preclose,
> .lastclose = rockchip_drm_lastclose,
> .get_vblank_counter = drm_vblank_no_hw_counter,
> .enable_vblank = rockchip_drm_crtc_enable_vblank,
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h
> index 7684503ff765..005634484441 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h
> @@ -40,7 +40,6 @@ struct rockchip_crtc_funcs {
> int (*enable_vblank)(struct drm_crtc *crtc);
> void (*disable_vblank)(struct drm_crtc *crtc);
> void (*wait_for_update)(struct drm_crtc *crtc);
> - void (*cancel_pending_vblank)(struct drm_crtc *crtc, struct drm_file *file_priv);
> };
>
> struct rockchip_crtc_state {
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index d2932478ff59..8cd840f602b7 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -894,30 +894,10 @@ static void vop_crtc_wait_for_update(struct drm_crtc *crtc)
> WARN_ON(!wait_for_completion_timeout(&vop->wait_update_complete, 100));
> }
>
> -static void vop_crtc_cancel_pending_vblank(struct drm_crtc *crtc,
> - struct drm_file *file_priv)
> -{
> - struct drm_device *drm = crtc->dev;
> - struct vop *vop = to_vop(crtc);
> - struct drm_pending_vblank_event *e;
> - unsigned long flags;
> -
> - spin_lock_irqsave(&drm->event_lock, flags);
> - e = vop->event;
> - if (e && e->base.file_priv == file_priv) {
> - vop->event = NULL;
> -
> - kfree(&e->base);
> - file_priv->event_space += sizeof(e->event);
> - }
> - spin_unlock_irqrestore(&drm->event_lock, flags);
> -}
> -
> static const struct rockchip_crtc_funcs private_crtc_funcs = {
> .enable_vblank = vop_crtc_enable_vblank,
> .disable_vblank = vop_crtc_disable_vblank,
> .wait_for_update = vop_crtc_wait_for_update,
> - .cancel_pending_vblank = vop_crtc_cancel_pending_vblank,
> };
>
> static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
> --
> 2.8.1
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list