Commit 7442148e authored by Daniel Vetter's avatar Daniel Vetter

drm/rockchip: Nuke pending event handling in preclose

This is now handled by the core, drivers can totally ignore lifetime
issues of drm events.

Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Cc: Mark yao <mark.yao@rock-chips.com>
Tested-by: default avatarTomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: default avatarTomeu Vizoso <tomeu.vizoso@collabora.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1465388359-8070-11-git-send-email-daniel.vetter@ffwll.ch
parent 893b6cad
...@@ -263,27 +263,6 @@ static void rockchip_drm_unbind(struct device *dev) ...@@ -263,27 +263,6 @@ static void rockchip_drm_unbind(struct device *dev)
dev_set_drvdata(dev, NULL); dev_set_drvdata(dev, NULL);
} }
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) void rockchip_drm_lastclose(struct drm_device *dev)
{ {
struct rockchip_drm_private *priv = dev->dev_private; struct rockchip_drm_private *priv = dev->dev_private;
...@@ -307,7 +286,6 @@ static const struct file_operations rockchip_drm_driver_fops = { ...@@ -307,7 +286,6 @@ static const struct file_operations rockchip_drm_driver_fops = {
static struct drm_driver rockchip_drm_driver = { static struct drm_driver rockchip_drm_driver = {
.driver_features = DRIVER_MODESET | DRIVER_GEM | .driver_features = DRIVER_MODESET | DRIVER_GEM |
DRIVER_PRIME | DRIVER_ATOMIC, DRIVER_PRIME | DRIVER_ATOMIC,
.preclose = rockchip_drm_preclose,
.lastclose = rockchip_drm_lastclose, .lastclose = rockchip_drm_lastclose,
.get_vblank_counter = drm_vblank_no_hw_counter, .get_vblank_counter = drm_vblank_no_hw_counter,
.enable_vblank = rockchip_drm_crtc_enable_vblank, .enable_vblank = rockchip_drm_crtc_enable_vblank,
......
...@@ -40,7 +40,6 @@ struct rockchip_crtc_funcs { ...@@ -40,7 +40,6 @@ struct rockchip_crtc_funcs {
int (*enable_vblank)(struct drm_crtc *crtc); int (*enable_vblank)(struct drm_crtc *crtc);
void (*disable_vblank)(struct drm_crtc *crtc); void (*disable_vblank)(struct drm_crtc *crtc);
void (*wait_for_update)(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 { struct rockchip_crtc_state {
......
...@@ -894,30 +894,10 @@ static void vop_crtc_wait_for_update(struct drm_crtc *crtc) ...@@ -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)); 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 = { static const struct rockchip_crtc_funcs private_crtc_funcs = {
.enable_vblank = vop_crtc_enable_vblank, .enable_vblank = vop_crtc_enable_vblank,
.disable_vblank = vop_crtc_disable_vblank, .disable_vblank = vop_crtc_disable_vblank,
.wait_for_update = vop_crtc_wait_for_update, .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, static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment