Message ID | 1490706496-4959-31-git-send-email-tomi.valkeinen@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Tomi, Thank you for the patch. On Tuesday 28 Mar 2017 16:08:16 Tomi Valkeinen wrote: > 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> > Cc: Daniel Vetter <daniel@ffwll.ch> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > drivers/gpu/drm/omapdrm/omap_irq.c | 14 -------------- > 1 file changed, 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) > 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); > }
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) 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); }
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> Cc: Daniel Vetter <daniel@ffwll.ch> --- drivers/gpu/drm/omapdrm/omap_irq.c | 14 -------------- 1 file changed, 14 deletions(-)