From: Ville Syrjälä <ville.syrj...@linux.intel.com>

Currently we reuse the commit_work for a later cleanup step.
Let's not do that so that atomic ioctl handler won't accidentally
wait for the cleanup work when it really wants to just wait on the
commit_tail() part. We'll just add another work struct for the
cleanup.

Cc: Daniel Vetter <daniel.vet...@ffwll.ch>
Cc: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
Cc: Rob Clark <robdcl...@gmail.com>
Cc: Simon Ser <cont...@emersion.fr>
Cc: Pekka Paalanen <pekka.paala...@collabora.com>
Cc: Jonas Ådahl <jad...@gmail.com>
Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c       | 6 +++---
 drivers/gpu/drm/i915/display/intel_display_types.h | 1 +
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index dd008ba8afe3..cd617046e0ee 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -7422,7 +7422,7 @@ static void intel_cleanup_dsbs(struct intel_atomic_state 
*state)
 static void intel_atomic_cleanup_work(struct work_struct *work)
 {
        struct intel_atomic_state *state =
-               container_of(work, struct intel_atomic_state, base.commit_work);
+               container_of(work, struct intel_atomic_state, cleanup_work);
        struct drm_i915_private *i915 = to_i915(state->base.dev);
 
        intel_cleanup_dsbs(state);
@@ -7643,8 +7643,8 @@ static void intel_atomic_commit_tail(struct 
intel_atomic_state *state)
         * schedule point (cond_resched()) here anyway to keep latencies
         * down.
         */
-       INIT_WORK(&state->base.commit_work, intel_atomic_cleanup_work);
-       queue_work(system_highpri_wq, &state->base.commit_work);
+       INIT_WORK(&state->cleanup_work, intel_atomic_cleanup_work);
+       queue_work(system_highpri_wq, &state->cleanup_work);
 }
 
 static void intel_atomic_commit_work(struct work_struct *work)
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index 298d00a11f47..971e2b1e1b26 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -655,6 +655,7 @@ struct intel_atomic_state {
 
        struct i915_sw_fence commit_ready;
 
+       struct work_struct cleanup_work;
        struct llist_node freed;
 };
 
-- 
2.35.1

Reply via email to