• Daniel Vetter's avatar
    drm/i915: fix hpd work vs. flush_work in the pageflip code deadlock · 645416f5
    Daniel Vetter authored
    Historically we've run our own driver hotplug handling in our own
    work-queue, which then launched the drm core hotplug handling in the
    system workqueue. This is important since we flush our own driver
    workqueue in the pageflip code while hodling modeset locks, and only
    the drm hotplug code grabbed these locks. But with
    
    commit 69787f7d
    Author: Daniel Vetter <daniel.vetter@ffwll.ch>
    Date:   Tue Oct 23 18:23:34 2012 +0000
    
        drm: run the hpd irq event code directly
    
    this was changed and now we could deadlock in our flip handler if
    there's a hotplug work blocking the progress of the crucial unpin
    works. So this broke the careful deadlock avoidance implemented in
    
    commit b4a98e57
    Author: Chris Wilson <chris@chris-wilson.co.uk>
    Date:   Thu Nov 1 09:26:26 2012 +0000
    
        drm/i915: Flush outstanding unpin tasks before pageflipping
    
    Since the rule thus far has been that work items on our own workqueue
    may never grab modeset locks simply restore that rule again.
    
    v2: Add a comment to the declaration of dev_priv->wq to warn readers
    about the tricky implications of using it. Suggested by Chris Wilson.
    
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Stuart Abercrombie <sabercrombie@chromium.org>
    Reported-by: default avatarStuart Abercrombie <sabercrombie@chromium.org>
    References: http://permalink.gmane.org/gmane.comp.freedesktop.xorg.drivers.intel/26239
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    [danvet: Squash in a comment at the place where we schedule the work.
    Requested after-the-fact by Chris on irc since the hpd work isn't the
    only place we botch this.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    645416f5
i915_drv.h 71.6 KB