Comment 31 for bug 1275794

Revision history for this message
In , Chris Wilson (ickle) wrote :

Ah, we maybe corrupting the panel_vdd_work item. Try

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index bf961698f847..6ac2303f33db 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1161,9 +1161,14 @@ void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
                return;

        WARN(!intel_dp->want_panel_vdd, "eDP VDD not forced on");
-
        intel_dp->want_panel_vdd = false;

+ if (cancel_delayed_work(&intel_dp->panel_vdd_work)) {
+ mutex_unlock(&dev->mode_config.mutex);
+ cancel_delayed_work_sync(&intel_dp->panel_vdd_work);
+ mutex_lock(&dev->mode_config.mutex);
+ }
+
        if (sync) {
                ironlake_panel_vdd_off_sync(intel_dp);
        } else {