[PATCHv3 30/30] drm/omap: fix crash on module unload
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Mar 29 08:38:17 UTC 2017
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 at ti.com>
> Cc: Daniel Vetter <daniel at ffwll.ch>
Reviewed-by: Laurent Pinchart <laurent.pinchart at 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);
> }
--
Regards,
Laurent Pinchart
More information about the dri-devel
mailing list