• A
    drm/omap: fix: change dev_unload order · 80e4ed54
    Archit Taneja 提交于
    The current dev_unload order uninits the irqs too early.
    
    In the current sequence, it's possible that a crtc queues work(apply_worker)
    to display a buffer, which registers to omap_crtc_apply_irq to notfiy the
    completion of the configuration we applied.
    
    Calling drm_vblank_cleanup and omap_drm_irq_uninstall here causes the crtc's
    apply handler to never get called, which results in an incorrect state of the
    apply_irq.registered parameter.
    
    This condition occurs where there is no mode set via omapdrm, and dev_lastclose
    tries to set a default fb mode via drm_fb_helper_restore_fbdev_mode. The apply
    work scheduled by restore_fbdev_mode is very close in time to the disabling of
    the irq handler, and hence leads to a race condition. We move the irq cleanup
    at the end of the unload sequence to prevent this.
    
    Also, the call to flush_workqueue is removed since it's called internally by
    destroy_workqueue.
    Signed-off-by: NArchit Taneja <archit@ti.com>
    Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
    80e4ed54
omap_drv.c 17.8 KB