aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/omap_irq.c
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2017-03-24 03:58:49 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2017-04-03 05:36:40 -0400
commitc9af3ed7311f5fbc4b0e109daddfcc8a47267331 (patch)
tree0b5a437ebd933e642e6a1a488900a3a6521f7371 /drivers/gpu/drm/omapdrm/omap_irq.c
parent8a54aa92850058fd60f07fa2621cab94bf53b5f0 (diff)
drm/omap: fix crash on module unload
When unloading omapdrm we get a NULL pointer deref in omap_drm_irq_uninstall(). This is caused by: 967dd48417874dd25491a4e933648f394a64f70f ("drm: remove drm_vblank_no_hw_counter assignment from driver code") We shut down all the crtcs at unload time before calling omap_drm_irq_uninstall, so the code in omap_drm_irq_uninstall() is unnecessary and can be removed. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_irq.c')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_irq.c14
1 files changed, 0 insertions, 14 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_irq.c b/drivers/gpu/drm/omapdrm/omap_irq.c
index 26a3c06aa14d..115104cdcc59 100644
--- a/drivers/gpu/drm/omapdrm/omap_irq.c
+++ b/drivers/gpu/drm/omapdrm/omap_irq.c
@@ -285,25 +285,11 @@ int omap_drm_irq_install(struct drm_device *dev)
285void omap_drm_irq_uninstall(struct drm_device *dev) 285void omap_drm_irq_uninstall(struct drm_device *dev)
286{ 286{
287 struct omap_drm_private *priv = dev->dev_private; 287 struct omap_drm_private *priv = dev->dev_private;
288 unsigned long irqflags;
289 int i;
290 288
291 if (!dev->irq_enabled) 289 if (!dev->irq_enabled)
292 return; 290 return;
293 291
294 dev->irq_enabled = false; 292 dev->irq_enabled = false;
295 293
296 /* Wake up any waiters so they don't hang. */
297 if (dev->num_crtcs) {
298 spin_lock_irqsave(&dev->vbl_lock, irqflags);
299 for (i = 0; i < dev->num_crtcs; i++) {
300 wake_up(&dev->vblank[i].queue);
301 dev->vblank[i].enabled = false;
302 dev->vblank[i].last =
303 dev->driver->get_vblank_counter(dev, i);
304 }
305 spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
306 }
307
308 priv->dispc_ops->free_irq(dev); 294 priv->dispc_ops->free_irq(dev);
309} 295}