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 {
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 .6ac2303f33db 100644 gpu/drm/ i915/intel_ dp.c gpu/drm/ i915/intel_ dp.c edp_panel_ vdd_off( struct intel_dp *intel_dp, bool sync)
return;
index bf961698f847.
--- a/drivers/
+++ b/drivers/
@@ -1161,9 +1161,14 @@ void ironlake_
-
+ if (cancel_ delayed_ work(&intel_ dp->panel_ vdd_work) ) { &dev->mode_ config. mutex); delayed_ work_sync( &intel_ dp->panel_ vdd_work) ; &dev->mode_ config. mutex);
ironlake_ panel_vdd_ off_sync( intel_dp) ;
+ mutex_unlock(
+ cancel_
+ mutex_lock(
+ }
+
if (sync) {
} else {