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

Reply via email to