drm/i915: fixup interrupted overlay switch off calls
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 30 Nov 2009 14:55:49 +0000 (15:55 +0100)
committerEric Anholt <eric@anholt.net>
Mon, 30 Nov 2009 17:50:57 +0000 (09:50 -0800)
When switching to interruptible sleeps in the overlay code, I've
forgotten to recover from interruptions at one site.  This
resulted in the overlay still running when it should have been
switched off. This in turn caused a hang on resume because it
tried to disable the (not-running) overlay in preparation for the
resume modeset.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=24980
Tested-by: maximlevitsky@gmail.com
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Eric Anholt <eric@anholt.net>
drivers/gpu/drm/i915/intel_overlay.c

index b97c5c562aa1445cd575b96b3ec9b73ad19d01f6..49110b3aab6a9204e951255b19ecd7fefdf2370f 100644 (file)
@@ -842,12 +842,15 @@ int intel_overlay_switch_off(struct intel_overlay *overlay)
        BUG_ON(!mutex_is_locked(&dev->struct_mutex));
        BUG_ON(!mutex_is_locked(&dev->mode_config.mutex));
 
+       if (overlay->hw_wedged) {
+               ret = intel_overlay_recover_from_interrupt(overlay, 1);
+               if (ret != 0)
+                       return ret;
+       }
+
        if (!overlay->active)
                return 0;
 
-       if (overlay->hw_wedged)
-               return -EBUSY;
-
        ret = intel_overlay_release_old_vid(overlay);
        if (ret != 0)
                return ret;