[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