drm/irq: Don't disable vblank interrupts when already disabled
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / drm_irq.c
index 75647e7f012b303fee89d7e79cdc1e01d0645d05..10574a0c3a55127cae5fb3e90d7b309defdcc681 100644 (file)
@@ -185,8 +185,15 @@ static void vblank_disable_and_save(struct drm_device *dev, int crtc)
                return;
        }
 
-       dev->driver->disable_vblank(dev, crtc);
-       vblank->enabled = false;
+       /*
+        * Only disable vblank interrupts if they're enabled. This avoids
+        * calling the ->disable_vblank() operation in atomic context with the
+        * hardware potentially runtime suspended.
+        */
+       if (vblank->enabled) {
+               dev->driver->disable_vblank(dev, crtc);
+               vblank->enabled = false;
+       }
 
        /* No further vblank irq's will be processed after
         * this point. Get current hardware vblank count and