|
@@ -1027,8 +1027,13 @@ static inline void intel_hpd_irq_handler(struct drm_device *dev,
|
|
|
dev_priv->display.hpd_irq_setup(dev);
|
|
|
spin_unlock(&dev_priv->irq_lock);
|
|
|
|
|
|
- queue_work(dev_priv->wq,
|
|
|
- &dev_priv->hotplug_work);
|
|
|
+ /*
|
|
|
+ * Our hotplug handler can grab modeset locks (by calling down into the
|
|
|
+ * fb helpers). Hence it must not be run on our own dev-priv->wq work
|
|
|
+ * queue for otherwise the flush_work in the pageflip code will
|
|
|
+ * deadlock.
|
|
|
+ */
|
|
|
+ schedule_work(&dev_priv->hotplug_work);
|
|
|
}
|
|
|
|
|
|
static void gmbus_irq_handler(struct drm_device *dev)
|