From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Jani Nikula <jani.nikula@intel.com>
Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Subject: Re: [PATCH v2] drm/{i915,xe}: move xe_display_flush_cleanup_work() to i915 display
Date: Tue, 26 May 2026 22:26:55 +0300 [thread overview]
Message-ID: <ahXz_-57PY4HMymt@intel.com> (raw)
In-Reply-To: <75b8149df41c3d4f0665eec68d42829e44279230@intel.com>
On Tue, May 26, 2026 at 09:09:28PM +0300, Jani Nikula wrote:
> On Tue, 26 May 2026, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > On Mon, May 25, 2026 at 02:05:53PM +0300, Jani Nikula wrote:
> >> xe_display_flush_cleanup_work() is a bit of an oddball function in xe
> >> display code. There shouldn't be anything this specific or xe
> >> specific. While I'm not sure what the correct refactor for the function
> >> should be, move it to shared display code for starters, next to the
> >> eerily similar but slightly different intel_has_pending_fb_unpin() that
> >> is only called from i915 core.
> >>
> >> The main goal here is to unblock some refactors on
> >> for_each_intel_crtc().
> >>
> >> v2: Add FIXME comment (Ville)
> >>
> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> >> ---
> >> drivers/gpu/drm/i915/display/intel_display.c | 22 ++++++++++++++++
> >> drivers/gpu/drm/i915/display/intel_display.h | 1 +
> >> drivers/gpu/drm/xe/display/xe_display.c | 27 +++-----------------
> >> 3 files changed, 26 insertions(+), 24 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> >> index 6c8935f69db1..a6cee0f81358 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_display.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> >> @@ -737,6 +737,28 @@ bool intel_has_pending_fb_unpin(struct intel_display *display)
> >> return false;
> >> }
> >>
> >> +/* FIXME: All callers need to be audited and unified between i915 and xe */
> >
> > That makes me think we want to keep this. I was more thinking of
> > something like
> > /* FIXME remove this and just flush the cleanup wq where appropriate */
>
> Fair enough. Can I push with that?
Acked-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> >
> >> +void intel_display_flush_cleanup_work(struct intel_display *display)
> >> +{
> >> + struct intel_crtc *crtc;
> >> +
> >> + for_each_intel_crtc(display->drm, crtc) {
> >> + struct drm_crtc_commit *commit;
> >> +
> >> + spin_lock(&crtc->base.commit_lock);
> >> + commit = list_first_entry_or_null(&crtc->base.commit_list,
> >> + struct drm_crtc_commit, commit_entry);
> >> + if (commit)
> >> + drm_crtc_commit_get(commit);
> >> + spin_unlock(&crtc->base.commit_lock);
> >> +
> >> + if (commit) {
> >> + wait_for_completion(&commit->cleanup_done);
> >> + drm_crtc_commit_put(commit);
> >> + }
> >> + }
> >> +}
> >> +
> >> /*
> >> * Finds the encoder associated with the given CRTC. This can only be
> >> * used when we know that the CRTC isn't feeding multiple encoders!
> >> diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
> >> index 45a90d2fe6ec..72f33113a5a3 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_display.h
> >> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> >> @@ -402,6 +402,7 @@ void intel_disable_transcoder(const struct intel_crtc_state *old_crtc_state);
> >> void i830_enable_pipe(struct intel_display *display, enum pipe pipe);
> >> void i830_disable_pipe(struct intel_display *display, enum pipe pipe);
> >> bool intel_has_pending_fb_unpin(struct intel_display *display);
> >> +void intel_display_flush_cleanup_work(struct intel_display *display);
> >> void intel_encoder_destroy(struct drm_encoder *encoder);
> >> struct drm_display_mode *
> >> intel_encoder_current_mode(struct intel_encoder *encoder);
> >> diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> >> index 8d08da60336d..a5066de3d789 100644
> >> --- a/drivers/gpu/drm/xe/display/xe_display.c
> >> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> >> @@ -244,27 +244,6 @@ static bool suspend_to_idle(void)
> >> return false;
> >> }
> >>
> >> -static void xe_display_flush_cleanup_work(struct xe_device *xe)
> >> -{
> >> - struct intel_crtc *crtc;
> >> -
> >> - for_each_intel_crtc(&xe->drm, crtc) {
> >> - struct drm_crtc_commit *commit;
> >> -
> >> - spin_lock(&crtc->base.commit_lock);
> >> - commit = list_first_entry_or_null(&crtc->base.commit_list,
> >> - struct drm_crtc_commit, commit_entry);
> >> - if (commit)
> >> - drm_crtc_commit_get(commit);
> >> - spin_unlock(&crtc->base.commit_lock);
> >> -
> >> - if (commit) {
> >> - wait_for_completion(&commit->cleanup_done);
> >> - drm_crtc_commit_put(commit);
> >> - }
> >> - }
> >> -}
> >> -
> >> static void xe_display_enable_d3cold(struct xe_device *xe)
> >> {
> >> struct intel_display *display = xe->display;
> >> @@ -278,7 +257,7 @@ static void xe_display_enable_d3cold(struct xe_device *xe)
> >> */
> >> intel_power_domains_disable(display);
> >>
> >> - xe_display_flush_cleanup_work(xe);
> >> + intel_display_flush_cleanup_work(display);
> >>
> >> intel_opregion_suspend(display, PCI_D3cold);
> >>
> >> @@ -333,7 +312,7 @@ void xe_display_pm_suspend(struct xe_device *xe)
> >> intel_display_driver_suspend(display);
> >> }
> >>
> >> - xe_display_flush_cleanup_work(xe);
> >> + intel_display_flush_cleanup_work(display);
> >>
> >> intel_encoder_block_all_hpds(display);
> >>
> >> @@ -365,7 +344,7 @@ void xe_display_pm_shutdown(struct xe_device *xe)
> >> intel_display_driver_suspend(display);
> >> }
> >>
> >> - xe_display_flush_cleanup_work(xe);
> >> + intel_display_flush_cleanup_work(display);
> >> intel_dp_mst_suspend(display);
> >> intel_encoder_block_all_hpds(display);
> >> intel_hpd_cancel_work(display);
> >> --
> >> 2.47.3
>
> --
> Jani Nikula, Intel
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2026-05-26 19:27 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-13 7:58 [RESEND 0/6] drm/i915: crtc iteration cleanups Jani Nikula
2026-05-13 7:58 ` [RESEND 1/6] drm/{i915, xe}: move xe_display_flush_cleanup_work() to i915 display Jani Nikula
2026-05-13 12:09 ` Ville Syrjälä
2026-05-13 14:19 ` Jani Nikula
2026-05-13 14:56 ` Imre Deak
2026-05-22 8:34 ` Jani Nikula
2026-05-22 12:20 ` Ville Syrjälä
2026-05-25 11:05 ` [PATCH v2] " Jani Nikula
2026-05-26 12:08 ` [PATCH v2] drm/{i915,xe}: " Jani Nikula
2026-05-26 17:37 ` Ville Syrjälä
2026-05-26 18:09 ` Jani Nikula
2026-05-26 19:26 ` Ville Syrjälä [this message]
2026-05-13 7:58 ` [RESEND 2/6] drm/i915/display: switch from drm_for_each_crtc() to for_each_intel_crtc() Jani Nikula
2026-05-22 12:22 ` Ville Syrjälä
2026-05-13 7:58 ` [RESEND 3/6] drm/i915/display: always pass display->drm to for_each_intel_crtc*() Jani Nikula
2026-05-13 12:22 ` Ville Syrjälä
2026-05-13 7:58 ` [RESEND 4/6] drm/i915/display: pass struct intel_display to all for_each_intel_crtc*() macros Jani Nikula
2026-05-13 12:22 ` Ville Syrjälä
2026-05-13 7:58 ` [RESEND 5/6] drm/i915/display: stop passing i to for_each_*_intel_crtc_in_state() macros Jani Nikula
2026-05-13 12:22 ` Ville Syrjälä
2026-05-13 7:58 ` [RESEND 6/6] drm/i915/display: stop passing i to for_each_pipe_crtc_modeset_{enable, disable}() Jani Nikula
2026-05-13 12:23 ` Ville Syrjälä
2026-05-13 8:05 ` ✗ CI.checkpatch: warning for drm/i915: crtc iteration cleanups (rev2) Patchwork
2026-05-13 8:07 ` ✓ CI.KUnit: success " Patchwork
2026-05-13 8:59 ` ✗ i915.CI.BAT: failure " Patchwork
2026-05-13 8:59 ` Patchwork
2026-05-13 9:46 ` ✓ Xe.CI.BAT: success " Patchwork
2026-05-14 7:33 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-05-25 12:24 ` ✗ CI.checkpatch: warning for drm/i915: crtc iteration cleanups (rev3) Patchwork
2026-05-25 12:25 ` ✓ CI.KUnit: success " Patchwork
2026-05-25 13:11 ` ✓ Xe.CI.BAT: " Patchwork
2026-05-25 15:39 ` ✓ Xe.CI.FULL: " Patchwork
2026-05-25 16:18 ` ✓ i915.CI.BAT: " Patchwork
2026-05-25 21:35 ` ✓ i915.CI.Full: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ahXz_-57PY4HMymt@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.