drm/omap: fix crash on module unload
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 24 Mar 2017 07:58:49 +0000 (09:58 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 3 Apr 2017 09:36:40 +0000 (12:36 +0300)
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>
drivers/gpu/drm/omapdrm/omap_irq.c

index 26a3c06aa14d8980befc378f659c2f796e6e598e..115104cdcc597e3bee84d673a7600795fcc9e0f0 100644 (file)
@@ -285,25 +285,11 @@ int omap_drm_irq_install(struct drm_device *dev)
 void omap_drm_irq_uninstall(struct drm_device *dev)
 {
        struct omap_drm_private *priv = dev->dev_private;
-       unsigned long irqflags;
-       int i;
 
        if (!dev->irq_enabled)
                return;
 
        dev->irq_enabled = false;
 
-       /* Wake up any waiters so they don't hang. */
-       if (dev->num_crtcs) {
-               spin_lock_irqsave(&dev->vbl_lock, irqflags);
-               for (i = 0; i < dev->num_crtcs; i++) {
-                       wake_up(&dev->vblank[i].queue);
-                       dev->vblank[i].enabled = false;
-                       dev->vblank[i].last =
-                               dev->driver->get_vblank_counter(dev, i);
-               }
-               spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
-       }
-
        priv->dispc_ops->free_irq(dev);
 }