* [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess
@ 2025-10-16 18:53 Ville Syrjala
2025-10-16 18:53 ` [PATCH v2 01/10] drm/i915/overlay: Drop the DIRTYFB flush Ville Syrjala
` (11 more replies)
0 siblings, 12 replies; 27+ messages in thread
From: Ville Syrjala @ 2025-10-16 18:53 UTC (permalink / raw)
To: intel-gfx; +Cc: intel-xe
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
The attempted piecemeal intel_frontbuffer split between
i915 and xe is not good. Redo it with a bigger shovel.
v2: Rebase
Ville Syrjälä (10):
drm/i915/overlay: Drop the DIRTYFB flush
drm/i915/overlay: Switch to intel_frontbuffer_flip()
drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare,complete}()
drm/i915/frontbuffer: Turn intel_bo_flush_if_display() into a
frontbuffer operation
drm/i915/frontbuffer: Handle the dirtyfb cache flush inside
intel_frontbuffer_flush()
drm/i915/frontbuffef: Split fb_tracking.lock into two
drm/i915/frontbuffer: Extract intel_frontbuffer_ref()
drm/i915/frontbuffer: Add intel_frontbuffer::display
drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling
drm/i915/gem:
s/i915_gem_object_get_frontbuffer/i915_gem_object_frontbuffer_lookup/
drivers/gpu/drm/i915/Makefile | 1 +
drivers/gpu/drm/i915/display/intel_bo.c | 40 +++--
drivers/gpu/drm/i915/display/intel_bo.h | 8 +-
.../gpu/drm/i915/display/intel_display_core.h | 5 +-
.../drm/i915/display/intel_display_debugfs.c | 3 -
drivers/gpu/drm/i915/display/intel_fb.c | 1 -
.../gpu/drm/i915/display/intel_frontbuffer.c | 155 +++---------------
.../gpu/drm/i915/display/intel_frontbuffer.h | 18 +-
drivers/gpu/drm/i915/display/intel_overlay.c | 6 +-
drivers/gpu/drm/i915/gem/i915_gem_object.c | 16 +-
.../i915/gem/i915_gem_object_frontbuffer.c | 103 ++++++++++++
.../i915/gem/i915_gem_object_frontbuffer.h | 54 ++----
.../gpu/drm/i915/gem/i915_gem_object_types.h | 2 +-
drivers/gpu/drm/i915/i915_drv.h | 2 +
drivers/gpu/drm/i915/i915_gem.c | 2 +
drivers/gpu/drm/i915/i915_vma.c | 8 +-
.../gpu/drm/xe/compat-i915-headers/i915_vma.h | 2 -
drivers/gpu/drm/xe/display/intel_bo.c | 60 ++++++-
18 files changed, 257 insertions(+), 229 deletions(-)
create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c
--
2.49.1
^ permalink raw reply [flat|nested] 27+ messages in thread* [PATCH v2 01/10] drm/i915/overlay: Drop the DIRTYFB flush 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala @ 2025-10-16 18:53 ` Ville Syrjala 2025-10-16 18:54 ` [PATCH v2 02/10] drm/i915/overlay: Switch to intel_frontbuffer_flip() Ville Syrjala ` (10 subsequent siblings) 11 siblings, 0 replies; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:53 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> I don't even know why we have this DIRTYFB flush in the overlay code. We'll anyway call intel_frontbuffer_flip() so there should be no need to pretend that this is some kind of frontbuffer only rendering operation. Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/display/intel_overlay.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c index 272f9e7af4d4..8400a0236cdd 100644 --- a/drivers/gpu/drm/i915/display/intel_overlay.c +++ b/drivers/gpu/drm/i915/display/intel_overlay.c @@ -821,8 +821,6 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay, goto out_pin_section; } - i915_gem_object_flush_frontbuffer(new_bo, ORIGIN_DIRTYFB); - if (!overlay->active) { const struct intel_crtc_state *crtc_state = overlay->crtc->config; -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH v2 02/10] drm/i915/overlay: Switch to intel_frontbuffer_flip() 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala 2025-10-16 18:53 ` [PATCH v2 01/10] drm/i915/overlay: Drop the DIRTYFB flush Ville Syrjala @ 2025-10-16 18:54 ` Ville Syrjala 2025-10-16 18:54 ` [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare, complete}() Ville Syrjala ` (9 subsequent siblings) 11 siblings, 0 replies; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:54 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> Get rid of intel_frontbuffer_flip_{prepare,complete}() from the overlay code and just use intel_frontbuffer_flip() instead. The only difference between these are the light interactions with the ORIGIN_CS busyness tracking, but since the only user of this is the overlay/xf86-video-intel/Xv the buffer will always be filled by the CPU and thus we'll never see any ORIGIN_CS frontbuffer activity there anyway. Also I don't think we actually have anything covered by the frontbuffer tracking that affects the overlay (FBC is on the primary plane, DRRS isn't currently enabled on the platforms with overlay, and PSR doesn't exist in the hardware). Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/display/intel_overlay.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c index 8400a0236cdd..60ec68e917a5 100644 --- a/drivers/gpu/drm/i915/display/intel_overlay.c +++ b/drivers/gpu/drm/i915/display/intel_overlay.c @@ -307,8 +307,6 @@ static void intel_overlay_flip_prepare(struct intel_overlay *overlay, intel_frontbuffer_put(overlay->frontbuffer); overlay->frontbuffer = frontbuffer; - intel_frontbuffer_flip_prepare(display, INTEL_FRONTBUFFER_OVERLAY(pipe)); - overlay->old_vma = overlay->vma; if (vma) overlay->vma = i915_vma_get(vma); @@ -365,7 +363,7 @@ static void intel_overlay_release_old_vma(struct intel_overlay *overlay) if (drm_WARN_ON(display->drm, !vma)) return; - intel_frontbuffer_flip_complete(display, INTEL_FRONTBUFFER_OVERLAY(overlay->crtc->pipe)); + intel_frontbuffer_flip(display, INTEL_FRONTBUFFER_OVERLAY(overlay->crtc->pipe)); i915_vma_unpin(vma); i915_vma_put(vma); -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare, complete}() 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala 2025-10-16 18:53 ` [PATCH v2 01/10] drm/i915/overlay: Drop the DIRTYFB flush Ville Syrjala 2025-10-16 18:54 ` [PATCH v2 02/10] drm/i915/overlay: Switch to intel_frontbuffer_flip() Ville Syrjala @ 2025-10-16 18:54 ` Ville Syrjala 2025-10-29 13:32 ` [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare,complete}() Jani Nikula 2025-10-29 13:32 ` Jani Nikula 2025-10-16 18:54 ` [PATCH v2 04/10] drm/i915/frontbuffer: Turn intel_bo_flush_if_display() into a frontbuffer operation Ville Syrjala ` (8 subsequent siblings) 11 siblings, 2 replies; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:54 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> Get rid of intel_frontbuffer_flip_{prepare,complete}() (and the accompanying flip_bits) since they are unused. I suppose these could technically provide a minor optiimization over intel_frontbuffer_flip() in that the flush would get deferred further if new rendering were to sneak in between the prepare() and complete() calls. But for correctness it should not make any difference since another flush will anyway follow once the new rendering finishes. Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- .../gpu/drm/i915/display/intel_display_core.h | 4 +- .../drm/i915/display/intel_display_debugfs.c | 3 -- .../gpu/drm/i915/display/intel_frontbuffer.c | 46 ------------------- .../gpu/drm/i915/display/intel_frontbuffer.h | 4 -- 4 files changed, 1 insertion(+), 56 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h index df4da52cbdb3..fa43636b89fa 100644 --- a/drivers/gpu/drm/i915/display/intel_display_core.h +++ b/drivers/gpu/drm/i915/display/intel_display_core.h @@ -144,11 +144,9 @@ struct intel_frontbuffer_tracking { spinlock_t lock; /* - * Tracking bits for delayed frontbuffer flushing du to gpu activity or - * scheduled flips. + * Tracking bits for delayed frontbuffer flushing due to gpu activity. */ unsigned busy_bits; - unsigned flip_bits; }; struct intel_hotplug { diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c index 10dddec3796f..4e8397504774 100644 --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c @@ -76,9 +76,6 @@ static int i915_frontbuffer_tracking(struct seq_file *m, void *unused) seq_printf(m, "FB tracking busy bits: 0x%08x\n", display->fb_tracking.busy_bits); - seq_printf(m, "FB tracking flip bits: 0x%08x\n", - display->fb_tracking.flip_bits); - spin_unlock(&display->fb_tracking.lock); return 0; diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c index 73ed28ac9573..53e93985c7d4 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c @@ -102,51 +102,6 @@ static void frontbuffer_flush(struct intel_display *display, intel_fbc_flush(display, frontbuffer_bits, origin); } -/** - * intel_frontbuffer_flip_prepare - prepare asynchronous frontbuffer flip - * @display: display device - * @frontbuffer_bits: frontbuffer plane tracking bits - * - * This function gets called after scheduling a flip on @obj. The actual - * frontbuffer flushing will be delayed until completion is signalled with - * intel_frontbuffer_flip_complete. If an invalidate happens in between this - * flush will be cancelled. - * - * Can be called without any locks held. - */ -void intel_frontbuffer_flip_prepare(struct intel_display *display, - unsigned frontbuffer_bits) -{ - spin_lock(&display->fb_tracking.lock); - display->fb_tracking.flip_bits |= frontbuffer_bits; - /* Remove stale busy bits due to the old buffer. */ - display->fb_tracking.busy_bits &= ~frontbuffer_bits; - spin_unlock(&display->fb_tracking.lock); -} - -/** - * intel_frontbuffer_flip_complete - complete asynchronous frontbuffer flip - * @display: display device - * @frontbuffer_bits: frontbuffer plane tracking bits - * - * This function gets called after the flip has been latched and will complete - * on the next vblank. It will execute the flush if it hasn't been cancelled yet. - * - * Can be called without any locks held. - */ -void intel_frontbuffer_flip_complete(struct intel_display *display, - unsigned frontbuffer_bits) -{ - spin_lock(&display->fb_tracking.lock); - /* Mask any cancelled flips. */ - frontbuffer_bits &= display->fb_tracking.flip_bits; - display->fb_tracking.flip_bits &= ~frontbuffer_bits; - spin_unlock(&display->fb_tracking.lock); - - if (frontbuffer_bits) - frontbuffer_flush(display, frontbuffer_bits, ORIGIN_FLIP); -} - /** * intel_frontbuffer_flip - synchronous frontbuffer flip * @display: display device @@ -178,7 +133,6 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front, if (origin == ORIGIN_CS) { spin_lock(&display->fb_tracking.lock); display->fb_tracking.busy_bits |= frontbuffer_bits; - display->fb_tracking.flip_bits &= ~frontbuffer_bits; spin_unlock(&display->fb_tracking.lock); } diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h index 2fee12eaf9b6..293c2d0152d6 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h @@ -68,10 +68,6 @@ struct intel_frontbuffer { GENMASK(INTEL_FRONTBUFFER_BITS_PER_PIPE * ((pipe) + 1) - 1, \ INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe)) -void intel_frontbuffer_flip_prepare(struct intel_display *display, - unsigned frontbuffer_bits); -void intel_frontbuffer_flip_complete(struct intel_display *display, - unsigned frontbuffer_bits); void intel_frontbuffer_flip(struct intel_display *display, unsigned frontbuffer_bits); -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare,complete}() 2025-10-16 18:54 ` [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare, complete}() Ville Syrjala @ 2025-10-29 13:32 ` Jani Nikula 2025-10-29 13:32 ` Jani Nikula 1 sibling, 0 replies; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:32 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Get rid of intel_frontbuffer_flip_{prepare,complete}() (and > the accompanying flip_bits) since they are unused. > > I suppose these could technically provide a minor optiimization > over intel_frontbuffer_flip() in that the flush would get > deferred further if new rendering were to sneak in between the > prepare() and complete() calls. But for correctness it should > not make any difference since another flush will anyway follow > once the new rendering finishes. > > Acked-by: Jani Nikula <jani.nikula@intel.com> Upgrade to Reviewed-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > .../gpu/drm/i915/display/intel_display_core.h | 4 +- > .../drm/i915/display/intel_display_debugfs.c | 3 -- > .../gpu/drm/i915/display/intel_frontbuffer.c | 46 ------------------- > .../gpu/drm/i915/display/intel_frontbuffer.h | 4 -- > 4 files changed, 1 insertion(+), 56 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h > index df4da52cbdb3..fa43636b89fa 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_core.h > +++ b/drivers/gpu/drm/i915/display/intel_display_core.h > @@ -144,11 +144,9 @@ struct intel_frontbuffer_tracking { > spinlock_t lock; > > /* > - * Tracking bits for delayed frontbuffer flushing du to gpu activity or > - * scheduled flips. > + * Tracking bits for delayed frontbuffer flushing due to gpu activity. > */ > unsigned busy_bits; > - unsigned flip_bits; > }; > > struct intel_hotplug { > diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c > index 10dddec3796f..4e8397504774 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c > +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c > @@ -76,9 +76,6 @@ static int i915_frontbuffer_tracking(struct seq_file *m, void *unused) > seq_printf(m, "FB tracking busy bits: 0x%08x\n", > display->fb_tracking.busy_bits); > > - seq_printf(m, "FB tracking flip bits: 0x%08x\n", > - display->fb_tracking.flip_bits); > - > spin_unlock(&display->fb_tracking.lock); > > return 0; > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index 73ed28ac9573..53e93985c7d4 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -102,51 +102,6 @@ static void frontbuffer_flush(struct intel_display *display, > intel_fbc_flush(display, frontbuffer_bits, origin); > } > > -/** > - * intel_frontbuffer_flip_prepare - prepare asynchronous frontbuffer flip > - * @display: display device > - * @frontbuffer_bits: frontbuffer plane tracking bits > - * > - * This function gets called after scheduling a flip on @obj. The actual > - * frontbuffer flushing will be delayed until completion is signalled with > - * intel_frontbuffer_flip_complete. If an invalidate happens in between this > - * flush will be cancelled. > - * > - * Can be called without any locks held. > - */ > -void intel_frontbuffer_flip_prepare(struct intel_display *display, > - unsigned frontbuffer_bits) > -{ > - spin_lock(&display->fb_tracking.lock); > - display->fb_tracking.flip_bits |= frontbuffer_bits; > - /* Remove stale busy bits due to the old buffer. */ > - display->fb_tracking.busy_bits &= ~frontbuffer_bits; > - spin_unlock(&display->fb_tracking.lock); > -} > - > -/** > - * intel_frontbuffer_flip_complete - complete asynchronous frontbuffer flip > - * @display: display device > - * @frontbuffer_bits: frontbuffer plane tracking bits > - * > - * This function gets called after the flip has been latched and will complete > - * on the next vblank. It will execute the flush if it hasn't been cancelled yet. > - * > - * Can be called without any locks held. > - */ > -void intel_frontbuffer_flip_complete(struct intel_display *display, > - unsigned frontbuffer_bits) > -{ > - spin_lock(&display->fb_tracking.lock); > - /* Mask any cancelled flips. */ > - frontbuffer_bits &= display->fb_tracking.flip_bits; > - display->fb_tracking.flip_bits &= ~frontbuffer_bits; > - spin_unlock(&display->fb_tracking.lock); > - > - if (frontbuffer_bits) > - frontbuffer_flush(display, frontbuffer_bits, ORIGIN_FLIP); > -} > - > /** > * intel_frontbuffer_flip - synchronous frontbuffer flip > * @display: display device > @@ -178,7 +133,6 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front, > if (origin == ORIGIN_CS) { > spin_lock(&display->fb_tracking.lock); > display->fb_tracking.busy_bits |= frontbuffer_bits; > - display->fb_tracking.flip_bits &= ~frontbuffer_bits; > spin_unlock(&display->fb_tracking.lock); > } > > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > index 2fee12eaf9b6..293c2d0152d6 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > @@ -68,10 +68,6 @@ struct intel_frontbuffer { > GENMASK(INTEL_FRONTBUFFER_BITS_PER_PIPE * ((pipe) + 1) - 1, \ > INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe)) > > -void intel_frontbuffer_flip_prepare(struct intel_display *display, > - unsigned frontbuffer_bits); > -void intel_frontbuffer_flip_complete(struct intel_display *display, > - unsigned frontbuffer_bits); > void intel_frontbuffer_flip(struct intel_display *display, > unsigned frontbuffer_bits); -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare,complete}() 2025-10-16 18:54 ` [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare, complete}() Ville Syrjala 2025-10-29 13:32 ` [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare,complete}() Jani Nikula @ 2025-10-29 13:32 ` Jani Nikula 1 sibling, 0 replies; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:32 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Get rid of intel_frontbuffer_flip_{prepare,complete}() (and > the accompanying flip_bits) since they are unused. > > I suppose these could technically provide a minor optiimization *optimization > over intel_frontbuffer_flip() in that the flush would get > deferred further if new rendering were to sneak in between the > prepare() and complete() calls. But for correctness it should > not make any difference since another flush will anyway follow > once the new rendering finishes. > > Acked-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > .../gpu/drm/i915/display/intel_display_core.h | 4 +- > .../drm/i915/display/intel_display_debugfs.c | 3 -- > .../gpu/drm/i915/display/intel_frontbuffer.c | 46 ------------------- > .../gpu/drm/i915/display/intel_frontbuffer.h | 4 -- > 4 files changed, 1 insertion(+), 56 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h > index df4da52cbdb3..fa43636b89fa 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_core.h > +++ b/drivers/gpu/drm/i915/display/intel_display_core.h > @@ -144,11 +144,9 @@ struct intel_frontbuffer_tracking { > spinlock_t lock; > > /* > - * Tracking bits for delayed frontbuffer flushing du to gpu activity or > - * scheduled flips. > + * Tracking bits for delayed frontbuffer flushing due to gpu activity. > */ > unsigned busy_bits; > - unsigned flip_bits; > }; > > struct intel_hotplug { > diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c > index 10dddec3796f..4e8397504774 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c > +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c > @@ -76,9 +76,6 @@ static int i915_frontbuffer_tracking(struct seq_file *m, void *unused) > seq_printf(m, "FB tracking busy bits: 0x%08x\n", > display->fb_tracking.busy_bits); > > - seq_printf(m, "FB tracking flip bits: 0x%08x\n", > - display->fb_tracking.flip_bits); > - > spin_unlock(&display->fb_tracking.lock); > > return 0; > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index 73ed28ac9573..53e93985c7d4 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -102,51 +102,6 @@ static void frontbuffer_flush(struct intel_display *display, > intel_fbc_flush(display, frontbuffer_bits, origin); > } > > -/** > - * intel_frontbuffer_flip_prepare - prepare asynchronous frontbuffer flip > - * @display: display device > - * @frontbuffer_bits: frontbuffer plane tracking bits > - * > - * This function gets called after scheduling a flip on @obj. The actual > - * frontbuffer flushing will be delayed until completion is signalled with > - * intel_frontbuffer_flip_complete. If an invalidate happens in between this > - * flush will be cancelled. > - * > - * Can be called without any locks held. > - */ > -void intel_frontbuffer_flip_prepare(struct intel_display *display, > - unsigned frontbuffer_bits) > -{ > - spin_lock(&display->fb_tracking.lock); > - display->fb_tracking.flip_bits |= frontbuffer_bits; > - /* Remove stale busy bits due to the old buffer. */ > - display->fb_tracking.busy_bits &= ~frontbuffer_bits; > - spin_unlock(&display->fb_tracking.lock); > -} > - > -/** > - * intel_frontbuffer_flip_complete - complete asynchronous frontbuffer flip > - * @display: display device > - * @frontbuffer_bits: frontbuffer plane tracking bits > - * > - * This function gets called after the flip has been latched and will complete > - * on the next vblank. It will execute the flush if it hasn't been cancelled yet. > - * > - * Can be called without any locks held. > - */ > -void intel_frontbuffer_flip_complete(struct intel_display *display, > - unsigned frontbuffer_bits) > -{ > - spin_lock(&display->fb_tracking.lock); > - /* Mask any cancelled flips. */ > - frontbuffer_bits &= display->fb_tracking.flip_bits; > - display->fb_tracking.flip_bits &= ~frontbuffer_bits; > - spin_unlock(&display->fb_tracking.lock); > - > - if (frontbuffer_bits) > - frontbuffer_flush(display, frontbuffer_bits, ORIGIN_FLIP); > -} > - > /** > * intel_frontbuffer_flip - synchronous frontbuffer flip > * @display: display device > @@ -178,7 +133,6 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front, > if (origin == ORIGIN_CS) { > spin_lock(&display->fb_tracking.lock); > display->fb_tracking.busy_bits |= frontbuffer_bits; > - display->fb_tracking.flip_bits &= ~frontbuffer_bits; > spin_unlock(&display->fb_tracking.lock); > } > > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > index 2fee12eaf9b6..293c2d0152d6 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > @@ -68,10 +68,6 @@ struct intel_frontbuffer { > GENMASK(INTEL_FRONTBUFFER_BITS_PER_PIPE * ((pipe) + 1) - 1, \ > INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe)) > > -void intel_frontbuffer_flip_prepare(struct intel_display *display, > - unsigned frontbuffer_bits); > -void intel_frontbuffer_flip_complete(struct intel_display *display, > - unsigned frontbuffer_bits); > void intel_frontbuffer_flip(struct intel_display *display, > unsigned frontbuffer_bits); -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2 04/10] drm/i915/frontbuffer: Turn intel_bo_flush_if_display() into a frontbuffer operation 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala ` (2 preceding siblings ...) 2025-10-16 18:54 ` [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare, complete}() Ville Syrjala @ 2025-10-16 18:54 ` Ville Syrjala 2025-10-29 13:33 ` Jani Nikula 2025-10-16 18:54 ` [PATCH v2 05/10] drm/i915/frontbuffer: Handle the dirtyfb cache flush inside intel_frontbuffer_flush() Ville Syrjala ` (7 subsequent siblings) 11 siblings, 1 reply; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:54 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> Convert intel_bo_flush_if_display() to be an operation on the frontbuffer object rather than the underlying gem bo. This will help with cleaning up the frontbuffer xe/i915 vs. display split. Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/display/intel_bo.c | 10 +++++----- drivers/gpu/drm/i915/display/intel_bo.h | 2 +- drivers/gpu/drm/i915/display/intel_fb.c | 2 +- drivers/gpu/drm/i915/display/intel_frontbuffer.c | 2 +- drivers/gpu/drm/xe/display/intel_bo.c | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/display/intel_bo.c index 6ae1374d5c2b..2792aca7bc22 100644 --- a/drivers/gpu/drm/i915/display/intel_bo.c +++ b/drivers/gpu/drm/i915/display/intel_bo.c @@ -29,11 +29,6 @@ bool intel_bo_is_protected(struct drm_gem_object *obj) return i915_gem_object_is_protected(to_intel_bo(obj)); } -void intel_bo_flush_if_display(struct drm_gem_object *obj) -{ - i915_gem_object_flush_if_display(to_intel_bo(obj)); -} - int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) { return i915_gem_fb_mmap(to_intel_bo(obj), vma); @@ -55,6 +50,11 @@ struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, return i915_gem_object_set_frontbuffer(to_intel_bo(obj), front); } +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) +{ + i915_gem_object_flush_if_display(to_intel_bo(front->obj)); +} + void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) { i915_debugfs_describe_obj(m, to_intel_bo(obj)); diff --git a/drivers/gpu/drm/i915/display/intel_bo.h b/drivers/gpu/drm/i915/display/intel_bo.h index 48d87019e48a..08247bf36d40 100644 --- a/drivers/gpu/drm/i915/display/intel_bo.h +++ b/drivers/gpu/drm/i915/display/intel_bo.h @@ -16,13 +16,13 @@ bool intel_bo_is_tiled(struct drm_gem_object *obj); bool intel_bo_is_userptr(struct drm_gem_object *obj); bool intel_bo_is_shmem(struct drm_gem_object *obj); bool intel_bo_is_protected(struct drm_gem_object *obj); -void intel_bo_flush_if_display(struct drm_gem_object *obj); int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size); struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj); struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, struct intel_frontbuffer *front); +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front); void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj); diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c index 3958628c73e9..ab301c657395 100644 --- a/drivers/gpu/drm/i915/display/intel_fb.c +++ b/drivers/gpu/drm/i915/display/intel_fb.c @@ -2194,7 +2194,7 @@ static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb, return ret; flush: - intel_bo_flush_if_display(obj); + intel_bo_frontbuffer_flush_for_display(front); intel_frontbuffer_flush(front, ORIGIN_DIRTYFB); return ret; } diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c index 53e93985c7d4..5562801d2ea3 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c @@ -167,7 +167,7 @@ static void intel_frontbuffer_flush_work(struct work_struct *work) struct intel_frontbuffer *front = container_of(work, struct intel_frontbuffer, flush_work); - intel_bo_flush_if_display(front->obj); + intel_bo_frontbuffer_flush_for_display(front); intel_frontbuffer_flush(front, ORIGIN_DIRTYFB); intel_frontbuffer_put(front); } diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/intel_bo.c index 27437c22bd70..2437c00a2d3e 100644 --- a/drivers/gpu/drm/xe/display/intel_bo.c +++ b/drivers/gpu/drm/xe/display/intel_bo.c @@ -28,10 +28,6 @@ bool intel_bo_is_protected(struct drm_gem_object *obj) return xe_bo_is_protected(gem_to_xe_bo(obj)); } -void intel_bo_flush_if_display(struct drm_gem_object *obj) -{ -} - int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) { return drm_gem_prime_mmap(obj, vma); @@ -55,6 +51,10 @@ struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, return front; } +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) +{ +} + void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) { /* FIXME */ -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v2 04/10] drm/i915/frontbuffer: Turn intel_bo_flush_if_display() into a frontbuffer operation 2025-10-16 18:54 ` [PATCH v2 04/10] drm/i915/frontbuffer: Turn intel_bo_flush_if_display() into a frontbuffer operation Ville Syrjala @ 2025-10-29 13:33 ` Jani Nikula 0 siblings, 0 replies; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:33 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Convert intel_bo_flush_if_display() to be an operation on the > frontbuffer object rather than the underlying gem bo. This > will help with cleaning up the frontbuffer xe/i915 vs. display > split. > > Acked-by: Jani Nikula <jani.nikula@intel.com> Upgrade to Reviewed-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/display/intel_bo.c | 10 +++++----- > drivers/gpu/drm/i915/display/intel_bo.h | 2 +- > drivers/gpu/drm/i915/display/intel_fb.c | 2 +- > drivers/gpu/drm/i915/display/intel_frontbuffer.c | 2 +- > drivers/gpu/drm/xe/display/intel_bo.c | 8 ++++---- > 5 files changed, 12 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/display/intel_bo.c > index 6ae1374d5c2b..2792aca7bc22 100644 > --- a/drivers/gpu/drm/i915/display/intel_bo.c > +++ b/drivers/gpu/drm/i915/display/intel_bo.c > @@ -29,11 +29,6 @@ bool intel_bo_is_protected(struct drm_gem_object *obj) > return i915_gem_object_is_protected(to_intel_bo(obj)); > } > > -void intel_bo_flush_if_display(struct drm_gem_object *obj) > -{ > - i915_gem_object_flush_if_display(to_intel_bo(obj)); > -} > - > int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) > { > return i915_gem_fb_mmap(to_intel_bo(obj), vma); > @@ -55,6 +50,11 @@ struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, > return i915_gem_object_set_frontbuffer(to_intel_bo(obj), front); > } > > +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) > +{ > + i915_gem_object_flush_if_display(to_intel_bo(front->obj)); > +} > + > void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) > { > i915_debugfs_describe_obj(m, to_intel_bo(obj)); > diff --git a/drivers/gpu/drm/i915/display/intel_bo.h b/drivers/gpu/drm/i915/display/intel_bo.h > index 48d87019e48a..08247bf36d40 100644 > --- a/drivers/gpu/drm/i915/display/intel_bo.h > +++ b/drivers/gpu/drm/i915/display/intel_bo.h > @@ -16,13 +16,13 @@ bool intel_bo_is_tiled(struct drm_gem_object *obj); > bool intel_bo_is_userptr(struct drm_gem_object *obj); > bool intel_bo_is_shmem(struct drm_gem_object *obj); > bool intel_bo_is_protected(struct drm_gem_object *obj); > -void intel_bo_flush_if_display(struct drm_gem_object *obj); > int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); > int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size); > > struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj); > struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, > struct intel_frontbuffer *front); > +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front); > > void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj); > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c > index 3958628c73e9..ab301c657395 100644 > --- a/drivers/gpu/drm/i915/display/intel_fb.c > +++ b/drivers/gpu/drm/i915/display/intel_fb.c > @@ -2194,7 +2194,7 @@ static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb, > return ret; > > flush: > - intel_bo_flush_if_display(obj); > + intel_bo_frontbuffer_flush_for_display(front); > intel_frontbuffer_flush(front, ORIGIN_DIRTYFB); > return ret; > } > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index 53e93985c7d4..5562801d2ea3 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -167,7 +167,7 @@ static void intel_frontbuffer_flush_work(struct work_struct *work) > struct intel_frontbuffer *front = > container_of(work, struct intel_frontbuffer, flush_work); > > - intel_bo_flush_if_display(front->obj); > + intel_bo_frontbuffer_flush_for_display(front); > intel_frontbuffer_flush(front, ORIGIN_DIRTYFB); > intel_frontbuffer_put(front); > } > diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/intel_bo.c > index 27437c22bd70..2437c00a2d3e 100644 > --- a/drivers/gpu/drm/xe/display/intel_bo.c > +++ b/drivers/gpu/drm/xe/display/intel_bo.c > @@ -28,10 +28,6 @@ bool intel_bo_is_protected(struct drm_gem_object *obj) > return xe_bo_is_protected(gem_to_xe_bo(obj)); > } > > -void intel_bo_flush_if_display(struct drm_gem_object *obj) > -{ > -} > - > int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) > { > return drm_gem_prime_mmap(obj, vma); > @@ -55,6 +51,10 @@ struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, > return front; > } > > +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) > +{ > +} > + > void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) > { > /* FIXME */ -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2 05/10] drm/i915/frontbuffer: Handle the dirtyfb cache flush inside intel_frontbuffer_flush() 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala ` (3 preceding siblings ...) 2025-10-16 18:54 ` [PATCH v2 04/10] drm/i915/frontbuffer: Turn intel_bo_flush_if_display() into a frontbuffer operation Ville Syrjala @ 2025-10-16 18:54 ` Ville Syrjala 2025-10-29 13:34 ` Jani Nikula 2025-10-16 18:54 ` [PATCH v2 06/10] drm/i915/frontbuffef: Split fb_tracking.lock into two Ville Syrjala ` (6 subsequent siblings) 11 siblings, 1 reply; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:54 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> intel_bo_frontbuffer_flush_for_display() is a bit too low level to be direclty in the high level dirtyfb code. Move the calls into intel_frontbuffer_flush(). There is a slight beahavioural change here in that we now skip the flush if the bo is not a current scanout buffer (front->bits == 0). But that is fine as the flush will eventually happen via the fb pinning code if/when the bo becomes a scanout buffer again. Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/display/intel_fb.c | 1 - drivers/gpu/drm/i915/display/intel_frontbuffer.c | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c index ab301c657395..088e194ecf69 100644 --- a/drivers/gpu/drm/i915/display/intel_fb.c +++ b/drivers/gpu/drm/i915/display/intel_fb.c @@ -2194,7 +2194,6 @@ static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb, return ret; flush: - intel_bo_frontbuffer_flush_for_display(front); intel_frontbuffer_flush(front, ORIGIN_DIRTYFB); return ret; } diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c index 5562801d2ea3..bdf8bfa7deb9 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c @@ -150,6 +150,9 @@ void __intel_fb_flush(struct intel_frontbuffer *front, { struct intel_display *display = to_intel_display(front->obj->dev); + if (origin == ORIGIN_DIRTYFB) + intel_bo_frontbuffer_flush_for_display(front); + if (origin == ORIGIN_CS) { spin_lock(&display->fb_tracking.lock); /* Filter out new bits since rendering started. */ @@ -167,7 +170,6 @@ static void intel_frontbuffer_flush_work(struct work_struct *work) struct intel_frontbuffer *front = container_of(work, struct intel_frontbuffer, flush_work); - intel_bo_frontbuffer_flush_for_display(front); intel_frontbuffer_flush(front, ORIGIN_DIRTYFB); intel_frontbuffer_put(front); } -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v2 05/10] drm/i915/frontbuffer: Handle the dirtyfb cache flush inside intel_frontbuffer_flush() 2025-10-16 18:54 ` [PATCH v2 05/10] drm/i915/frontbuffer: Handle the dirtyfb cache flush inside intel_frontbuffer_flush() Ville Syrjala @ 2025-10-29 13:34 ` Jani Nikula 0 siblings, 0 replies; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:34 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > intel_bo_frontbuffer_flush_for_display() is a bit too low level > to be direclty in the high level dirtyfb code. Move the calls *directly > into intel_frontbuffer_flush(). > > There is a slight beahavioural change here in that we now skip *behavioural > the flush if the bo is not a current scanout buffer (front->bits > == 0). But that is fine as the flush will eventually happen via > the fb pinning code if/when the bo becomes a scanout buffer again. > > Acked-by: Jani Nikula <jani.nikula@intel.com> Upgrade to Reviewed-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/display/intel_fb.c | 1 - > drivers/gpu/drm/i915/display/intel_frontbuffer.c | 4 +++- > 2 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c > index ab301c657395..088e194ecf69 100644 > --- a/drivers/gpu/drm/i915/display/intel_fb.c > +++ b/drivers/gpu/drm/i915/display/intel_fb.c > @@ -2194,7 +2194,6 @@ static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb, > return ret; > > flush: > - intel_bo_frontbuffer_flush_for_display(front); > intel_frontbuffer_flush(front, ORIGIN_DIRTYFB); > return ret; > } > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index 5562801d2ea3..bdf8bfa7deb9 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -150,6 +150,9 @@ void __intel_fb_flush(struct intel_frontbuffer *front, > { > struct intel_display *display = to_intel_display(front->obj->dev); > > + if (origin == ORIGIN_DIRTYFB) > + intel_bo_frontbuffer_flush_for_display(front); > + > if (origin == ORIGIN_CS) { > spin_lock(&display->fb_tracking.lock); > /* Filter out new bits since rendering started. */ > @@ -167,7 +170,6 @@ static void intel_frontbuffer_flush_work(struct work_struct *work) > struct intel_frontbuffer *front = > container_of(work, struct intel_frontbuffer, flush_work); > > - intel_bo_frontbuffer_flush_for_display(front); > intel_frontbuffer_flush(front, ORIGIN_DIRTYFB); > intel_frontbuffer_put(front); > } -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2 06/10] drm/i915/frontbuffef: Split fb_tracking.lock into two 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala ` (4 preceding siblings ...) 2025-10-16 18:54 ` [PATCH v2 05/10] drm/i915/frontbuffer: Handle the dirtyfb cache flush inside intel_frontbuffer_flush() Ville Syrjala @ 2025-10-16 18:54 ` Ville Syrjala 2025-10-29 13:35 ` Jani Nikula 2025-10-16 18:54 ` [PATCH v2 07/10] drm/i915/frontbuffer: Extract intel_frontbuffer_ref() Ville Syrjala ` (5 subsequent siblings) 11 siblings, 1 reply; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:54 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> Our fb_tracking.lock is serving a double duty: - protects fb_tracking.busy_bits - provides the write-side protection for obj->frontbuffer Split obj->frontbuffer role into a separate lock so that we can clean up the current mess with the frontbuffer lifetime management. Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/display/intel_display_core.h | 4 ++++ drivers/gpu/drm/i915/display/intel_display_driver.c | 1 + drivers/gpu/drm/i915/display/intel_frontbuffer.c | 10 +++++----- drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h index fa43636b89fa..13576d07c999 100644 --- a/drivers/gpu/drm/i915/display/intel_display_core.h +++ b/drivers/gpu/drm/i915/display/intel_display_core.h @@ -141,6 +141,10 @@ struct intel_dpll_global { }; struct intel_frontbuffer_tracking { + /* protects obj->frontbuffer (write-side) */ + spinlock_t frontbuffer_lock; + + /* protects busy_bits */ spinlock_t lock; /* diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c index f84a0b26b7a6..ac684f8c5d40 100644 --- a/drivers/gpu/drm/i915/display/intel_display_driver.c +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c @@ -184,6 +184,7 @@ void intel_display_driver_early_probe(struct intel_display *display) if (!HAS_DISPLAY(display)) return; + spin_lock_init(&display->fb_tracking.frontbuffer_lock); spin_lock_init(&display->fb_tracking.lock); mutex_init(&display->backlight.lock); mutex_init(&display->audio.mutex); diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c index bdf8bfa7deb9..02b06dfb9fee 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c @@ -210,7 +210,7 @@ static void frontbuffer_retire(struct i915_active *ref) } static void frontbuffer_release(struct kref *ref) - __releases(&to_intel_display(front->obj->dev)->fb_tracking.lock) + __releases(&to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock) { struct intel_frontbuffer *ret, *front = container_of(ref, typeof(*front), ref); @@ -223,7 +223,7 @@ static void frontbuffer_release(struct kref *ref) ret = intel_bo_set_frontbuffer(obj, NULL); drm_WARN_ON(display->drm, ret); - spin_unlock(&display->fb_tracking.lock); + spin_unlock(&display->fb_tracking.frontbuffer_lock); i915_active_fini(&front->write); @@ -256,9 +256,9 @@ intel_frontbuffer_get(struct drm_gem_object *obj) I915_ACTIVE_RETIRE_SLEEPS); INIT_WORK(&front->flush_work, intel_frontbuffer_flush_work); - spin_lock(&display->fb_tracking.lock); + spin_lock(&display->fb_tracking.frontbuffer_lock); cur = intel_bo_set_frontbuffer(obj, front); - spin_unlock(&display->fb_tracking.lock); + spin_unlock(&display->fb_tracking.frontbuffer_lock); if (cur != front) { drm_gem_object_put(obj); @@ -272,7 +272,7 @@ void intel_frontbuffer_put(struct intel_frontbuffer *front) { kref_put_lock(&front->ref, frontbuffer_release, - &to_intel_display(front->obj->dev)->fb_tracking.lock); + &to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock); } /** diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h index b682969e3a29..1ec382c43aee 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h @@ -77,7 +77,7 @@ i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) * Set object's frontbuffer pointer. If frontbuffer is already set for the * object keep it and return it's pointer to the caller. Please note that RCU * mechanism is used to handle e.g. ongoing removal of frontbuffer pointer. This - * function is protected by i915->display->fb_tracking.lock + * function is protected by i915->display->fb_tracking.frontbuffer_lock * * Return: pointer to frontbuffer which was set. */ -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v2 06/10] drm/i915/frontbuffef: Split fb_tracking.lock into two 2025-10-16 18:54 ` [PATCH v2 06/10] drm/i915/frontbuffef: Split fb_tracking.lock into two Ville Syrjala @ 2025-10-29 13:35 ` Jani Nikula 0 siblings, 0 replies; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:35 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> Subject, *frontbuffer > > Our fb_tracking.lock is serving a double duty: > - protects fb_tracking.busy_bits > - provides the write-side protection for obj->frontbuffer > > Split obj->frontbuffer role into a separate lock so that > we can clean up the current mess with the frontbuffer lifetime > management. > > Acked-by: Jani Nikula <jani.nikula@intel.com> Upgrade to Reviewed-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/display/intel_display_core.h | 4 ++++ > drivers/gpu/drm/i915/display/intel_display_driver.c | 1 + > drivers/gpu/drm/i915/display/intel_frontbuffer.c | 10 +++++----- > drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h | 2 +- > 4 files changed, 11 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h > index fa43636b89fa..13576d07c999 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_core.h > +++ b/drivers/gpu/drm/i915/display/intel_display_core.h > @@ -141,6 +141,10 @@ struct intel_dpll_global { > }; > > struct intel_frontbuffer_tracking { > + /* protects obj->frontbuffer (write-side) */ > + spinlock_t frontbuffer_lock; > + > + /* protects busy_bits */ > spinlock_t lock; > > /* > diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c > index f84a0b26b7a6..ac684f8c5d40 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_driver.c > +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c > @@ -184,6 +184,7 @@ void intel_display_driver_early_probe(struct intel_display *display) > if (!HAS_DISPLAY(display)) > return; > > + spin_lock_init(&display->fb_tracking.frontbuffer_lock); > spin_lock_init(&display->fb_tracking.lock); > mutex_init(&display->backlight.lock); > mutex_init(&display->audio.mutex); > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index bdf8bfa7deb9..02b06dfb9fee 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -210,7 +210,7 @@ static void frontbuffer_retire(struct i915_active *ref) > } > > static void frontbuffer_release(struct kref *ref) > - __releases(&to_intel_display(front->obj->dev)->fb_tracking.lock) > + __releases(&to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock) > { > struct intel_frontbuffer *ret, *front = > container_of(ref, typeof(*front), ref); > @@ -223,7 +223,7 @@ static void frontbuffer_release(struct kref *ref) > > ret = intel_bo_set_frontbuffer(obj, NULL); > drm_WARN_ON(display->drm, ret); > - spin_unlock(&display->fb_tracking.lock); > + spin_unlock(&display->fb_tracking.frontbuffer_lock); > > i915_active_fini(&front->write); > > @@ -256,9 +256,9 @@ intel_frontbuffer_get(struct drm_gem_object *obj) > I915_ACTIVE_RETIRE_SLEEPS); > INIT_WORK(&front->flush_work, intel_frontbuffer_flush_work); > > - spin_lock(&display->fb_tracking.lock); > + spin_lock(&display->fb_tracking.frontbuffer_lock); > cur = intel_bo_set_frontbuffer(obj, front); > - spin_unlock(&display->fb_tracking.lock); > + spin_unlock(&display->fb_tracking.frontbuffer_lock); > > if (cur != front) { > drm_gem_object_put(obj); > @@ -272,7 +272,7 @@ void intel_frontbuffer_put(struct intel_frontbuffer *front) > { > kref_put_lock(&front->ref, > frontbuffer_release, > - &to_intel_display(front->obj->dev)->fb_tracking.lock); > + &to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock); > } > > /** > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > index b682969e3a29..1ec382c43aee 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > @@ -77,7 +77,7 @@ i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) > * Set object's frontbuffer pointer. If frontbuffer is already set for the > * object keep it and return it's pointer to the caller. Please note that RCU > * mechanism is used to handle e.g. ongoing removal of frontbuffer pointer. This > - * function is protected by i915->display->fb_tracking.lock > + * function is protected by i915->display->fb_tracking.frontbuffer_lock > * > * Return: pointer to frontbuffer which was set. > */ -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2 07/10] drm/i915/frontbuffer: Extract intel_frontbuffer_ref() 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala ` (5 preceding siblings ...) 2025-10-16 18:54 ` [PATCH v2 06/10] drm/i915/frontbuffef: Split fb_tracking.lock into two Ville Syrjala @ 2025-10-16 18:54 ` Ville Syrjala 2025-10-29 13:35 ` Jani Nikula 2025-10-16 18:54 ` [PATCH v2 08/10] drm/i915/frontbuffer: Add intel_frontbuffer::display Ville Syrjala ` (4 subsequent siblings) 11 siblings, 1 reply; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:54 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> I want to hide the kref from the high level frontbuffer code. To that end abstract the kref_get() in intel_frontbuffer_queue_flush() (which is the only high level function that needs this) as a new intel_frontbuffer_ref(). Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/display/intel_frontbuffer.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c index 02b06dfb9fee..e5f3f0d555a8 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c @@ -165,6 +165,11 @@ void __intel_fb_flush(struct intel_frontbuffer *front, frontbuffer_flush(display, frontbuffer_bits, origin); } +static void intel_frontbuffer_ref(struct intel_frontbuffer *front) +{ + kref_get(&front->ref); +} + static void intel_frontbuffer_flush_work(struct work_struct *work) { struct intel_frontbuffer *front = @@ -186,7 +191,7 @@ void intel_frontbuffer_queue_flush(struct intel_frontbuffer *front) if (!front) return; - kref_get(&front->ref); + intel_frontbuffer_ref(front); if (!schedule_work(&front->flush_work)) intel_frontbuffer_put(front); } -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v2 07/10] drm/i915/frontbuffer: Extract intel_frontbuffer_ref() 2025-10-16 18:54 ` [PATCH v2 07/10] drm/i915/frontbuffer: Extract intel_frontbuffer_ref() Ville Syrjala @ 2025-10-29 13:35 ` Jani Nikula 0 siblings, 0 replies; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:35 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > I want to hide the kref from the high level frontbuffer code. > To that end abstract the kref_get() in intel_frontbuffer_queue_flush() > (which is the only high level function that needs this) as a new > intel_frontbuffer_ref(). > > Acked-by: Jani Nikula <jani.nikula@intel.com> Upgrade to Reviewed-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/display/intel_frontbuffer.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index 02b06dfb9fee..e5f3f0d555a8 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -165,6 +165,11 @@ void __intel_fb_flush(struct intel_frontbuffer *front, > frontbuffer_flush(display, frontbuffer_bits, origin); > } > > +static void intel_frontbuffer_ref(struct intel_frontbuffer *front) > +{ > + kref_get(&front->ref); > +} > + > static void intel_frontbuffer_flush_work(struct work_struct *work) > { > struct intel_frontbuffer *front = > @@ -186,7 +191,7 @@ void intel_frontbuffer_queue_flush(struct intel_frontbuffer *front) > if (!front) > return; > > - kref_get(&front->ref); > + intel_frontbuffer_ref(front); > if (!schedule_work(&front->flush_work)) > intel_frontbuffer_put(front); > } -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2 08/10] drm/i915/frontbuffer: Add intel_frontbuffer::display 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala ` (6 preceding siblings ...) 2025-10-16 18:54 ` [PATCH v2 07/10] drm/i915/frontbuffer: Extract intel_frontbuffer_ref() Ville Syrjala @ 2025-10-16 18:54 ` Ville Syrjala 2025-10-29 13:36 ` Jani Nikula 2025-10-29 13:37 ` Jani Nikula 2025-10-16 18:54 ` [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling Ville Syrjala ` (3 subsequent siblings) 11 siblings, 2 replies; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:54 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> After upcoming intel_frontbuffer lifetime related changed we won't need intel_frontbuffer::obj for anything apart from getting at the display. Add a direct pointer for that instead so that the obj pointer can be completely eliminated. Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- .../gpu/drm/i915/display/intel_frontbuffer.c | 19 ++++++++----------- .../gpu/drm/i915/display/intel_frontbuffer.h | 1 + 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c index e5f3f0d555a8..5d627eac07bd 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c @@ -128,7 +128,7 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front, enum fb_op_origin origin, unsigned int frontbuffer_bits) { - struct intel_display *display = to_intel_display(front->obj->dev); + struct intel_display *display = front->display; if (origin == ORIGIN_CS) { spin_lock(&display->fb_tracking.lock); @@ -148,7 +148,7 @@ void __intel_fb_flush(struct intel_frontbuffer *front, enum fb_op_origin origin, unsigned int frontbuffer_bits) { - struct intel_display *display = to_intel_display(front->obj->dev); + struct intel_display *display = front->display; if (origin == ORIGIN_DIRTYFB) intel_bo_frontbuffer_flush_for_display(front); @@ -215,12 +215,12 @@ static void frontbuffer_retire(struct i915_active *ref) } static void frontbuffer_release(struct kref *ref) - __releases(&to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock) + __releases(&front->display->fb_tracking.frontbuffer_lock) { struct intel_frontbuffer *ret, *front = container_of(ref, typeof(*front), ref); + struct intel_display *display = front->display; struct drm_gem_object *obj = front->obj; - struct intel_display *display = to_intel_display(obj->dev); drm_WARN_ON(display->drm, atomic_read(&front->bits)); @@ -253,6 +253,7 @@ intel_frontbuffer_get(struct drm_gem_object *obj) drm_gem_object_get(obj); front->obj = obj; + front->display = display; kref_init(&front->ref); atomic_set(&front->bits, 0); i915_active_init(&front->write, @@ -277,7 +278,7 @@ void intel_frontbuffer_put(struct intel_frontbuffer *front) { kref_put_lock(&front->ref, frontbuffer_release, - &to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock); + &front->display->fb_tracking.frontbuffer_lock); } /** @@ -306,17 +307,13 @@ void intel_frontbuffer_track(struct intel_frontbuffer *old, BUILD_BUG_ON(I915_MAX_PLANES > INTEL_FRONTBUFFER_BITS_PER_PIPE); if (old) { - struct intel_display *display = to_intel_display(old->obj->dev); - - drm_WARN_ON(display->drm, + drm_WARN_ON(old->display->drm, !(atomic_read(&old->bits) & frontbuffer_bits)); atomic_andnot(frontbuffer_bits, &old->bits); } if (new) { - struct intel_display *display = to_intel_display(new->obj->dev); - - drm_WARN_ON(display->drm, + drm_WARN_ON(new->display->drm, atomic_read(&new->bits) & frontbuffer_bits); atomic_or(frontbuffer_bits, &new->bits); } diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h index 293c2d0152d6..ff2a6ac75a34 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h @@ -43,6 +43,7 @@ enum fb_op_origin { struct intel_frontbuffer { struct kref ref; + struct intel_display *display; atomic_t bits; struct i915_active write; struct drm_gem_object *obj; -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v2 08/10] drm/i915/frontbuffer: Add intel_frontbuffer::display 2025-10-16 18:54 ` [PATCH v2 08/10] drm/i915/frontbuffer: Add intel_frontbuffer::display Ville Syrjala @ 2025-10-29 13:36 ` Jani Nikula 2025-10-29 13:37 ` Jani Nikula 1 sibling, 0 replies; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:36 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > After upcoming intel_frontbuffer lifetime related changed we > won't need intel_frontbuffer::obj for anything apart from > getting at the display. Add a direct pointer for that instead > so that the obj pointer can be completely eliminated. > > Acked-by: Jani Nikula <jani.nikula@intel.com> Upgrade to Reviewed-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > .../gpu/drm/i915/display/intel_frontbuffer.c | 19 ++++++++----------- > .../gpu/drm/i915/display/intel_frontbuffer.h | 1 + > 2 files changed, 9 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index e5f3f0d555a8..5d627eac07bd 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -128,7 +128,7 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front, > enum fb_op_origin origin, > unsigned int frontbuffer_bits) > { > - struct intel_display *display = to_intel_display(front->obj->dev); > + struct intel_display *display = front->display; > > if (origin == ORIGIN_CS) { > spin_lock(&display->fb_tracking.lock); > @@ -148,7 +148,7 @@ void __intel_fb_flush(struct intel_frontbuffer *front, > enum fb_op_origin origin, > unsigned int frontbuffer_bits) > { > - struct intel_display *display = to_intel_display(front->obj->dev); > + struct intel_display *display = front->display; > > if (origin == ORIGIN_DIRTYFB) > intel_bo_frontbuffer_flush_for_display(front); > @@ -215,12 +215,12 @@ static void frontbuffer_retire(struct i915_active *ref) > } > > static void frontbuffer_release(struct kref *ref) > - __releases(&to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock) > + __releases(&front->display->fb_tracking.frontbuffer_lock) > { > struct intel_frontbuffer *ret, *front = > container_of(ref, typeof(*front), ref); > + struct intel_display *display = front->display; > struct drm_gem_object *obj = front->obj; > - struct intel_display *display = to_intel_display(obj->dev); > > drm_WARN_ON(display->drm, atomic_read(&front->bits)); > > @@ -253,6 +253,7 @@ intel_frontbuffer_get(struct drm_gem_object *obj) > drm_gem_object_get(obj); > > front->obj = obj; > + front->display = display; > kref_init(&front->ref); > atomic_set(&front->bits, 0); > i915_active_init(&front->write, > @@ -277,7 +278,7 @@ void intel_frontbuffer_put(struct intel_frontbuffer *front) > { > kref_put_lock(&front->ref, > frontbuffer_release, > - &to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock); > + &front->display->fb_tracking.frontbuffer_lock); > } > > /** > @@ -306,17 +307,13 @@ void intel_frontbuffer_track(struct intel_frontbuffer *old, > BUILD_BUG_ON(I915_MAX_PLANES > INTEL_FRONTBUFFER_BITS_PER_PIPE); > > if (old) { > - struct intel_display *display = to_intel_display(old->obj->dev); > - > - drm_WARN_ON(display->drm, > + drm_WARN_ON(old->display->drm, > !(atomic_read(&old->bits) & frontbuffer_bits)); > atomic_andnot(frontbuffer_bits, &old->bits); > } > > if (new) { > - struct intel_display *display = to_intel_display(new->obj->dev); > - > - drm_WARN_ON(display->drm, > + drm_WARN_ON(new->display->drm, > atomic_read(&new->bits) & frontbuffer_bits); > atomic_or(frontbuffer_bits, &new->bits); > } > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > index 293c2d0152d6..ff2a6ac75a34 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > @@ -43,6 +43,7 @@ enum fb_op_origin { > > struct intel_frontbuffer { > struct kref ref; > + struct intel_display *display; > atomic_t bits; > struct i915_active write; > struct drm_gem_object *obj; -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 08/10] drm/i915/frontbuffer: Add intel_frontbuffer::display 2025-10-16 18:54 ` [PATCH v2 08/10] drm/i915/frontbuffer: Add intel_frontbuffer::display Ville Syrjala 2025-10-29 13:36 ` Jani Nikula @ 2025-10-29 13:37 ` Jani Nikula 1 sibling, 0 replies; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:37 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > After upcoming intel_frontbuffer lifetime related changed we *changes I believe, and sorry for noticing these just after hitting send *facepalm*. > won't need intel_frontbuffer::obj for anything apart from > getting at the display. Add a direct pointer for that instead > so that the obj pointer can be completely eliminated. > > Acked-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > .../gpu/drm/i915/display/intel_frontbuffer.c | 19 ++++++++----------- > .../gpu/drm/i915/display/intel_frontbuffer.h | 1 + > 2 files changed, 9 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index e5f3f0d555a8..5d627eac07bd 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -128,7 +128,7 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front, > enum fb_op_origin origin, > unsigned int frontbuffer_bits) > { > - struct intel_display *display = to_intel_display(front->obj->dev); > + struct intel_display *display = front->display; > > if (origin == ORIGIN_CS) { > spin_lock(&display->fb_tracking.lock); > @@ -148,7 +148,7 @@ void __intel_fb_flush(struct intel_frontbuffer *front, > enum fb_op_origin origin, > unsigned int frontbuffer_bits) > { > - struct intel_display *display = to_intel_display(front->obj->dev); > + struct intel_display *display = front->display; > > if (origin == ORIGIN_DIRTYFB) > intel_bo_frontbuffer_flush_for_display(front); > @@ -215,12 +215,12 @@ static void frontbuffer_retire(struct i915_active *ref) > } > > static void frontbuffer_release(struct kref *ref) > - __releases(&to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock) > + __releases(&front->display->fb_tracking.frontbuffer_lock) > { > struct intel_frontbuffer *ret, *front = > container_of(ref, typeof(*front), ref); > + struct intel_display *display = front->display; > struct drm_gem_object *obj = front->obj; > - struct intel_display *display = to_intel_display(obj->dev); > > drm_WARN_ON(display->drm, atomic_read(&front->bits)); > > @@ -253,6 +253,7 @@ intel_frontbuffer_get(struct drm_gem_object *obj) > drm_gem_object_get(obj); > > front->obj = obj; > + front->display = display; > kref_init(&front->ref); > atomic_set(&front->bits, 0); > i915_active_init(&front->write, > @@ -277,7 +278,7 @@ void intel_frontbuffer_put(struct intel_frontbuffer *front) > { > kref_put_lock(&front->ref, > frontbuffer_release, > - &to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock); > + &front->display->fb_tracking.frontbuffer_lock); > } > > /** > @@ -306,17 +307,13 @@ void intel_frontbuffer_track(struct intel_frontbuffer *old, > BUILD_BUG_ON(I915_MAX_PLANES > INTEL_FRONTBUFFER_BITS_PER_PIPE); > > if (old) { > - struct intel_display *display = to_intel_display(old->obj->dev); > - > - drm_WARN_ON(display->drm, > + drm_WARN_ON(old->display->drm, > !(atomic_read(&old->bits) & frontbuffer_bits)); > atomic_andnot(frontbuffer_bits, &old->bits); > } > > if (new) { > - struct intel_display *display = to_intel_display(new->obj->dev); > - > - drm_WARN_ON(display->drm, > + drm_WARN_ON(new->display->drm, > atomic_read(&new->bits) & frontbuffer_bits); > atomic_or(frontbuffer_bits, &new->bits); > } > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > index 293c2d0152d6..ff2a6ac75a34 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > @@ -43,6 +43,7 @@ enum fb_op_origin { > > struct intel_frontbuffer { > struct kref ref; > + struct intel_display *display; > atomic_t bits; > struct i915_active write; > struct drm_gem_object *obj; -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala ` (7 preceding siblings ...) 2025-10-16 18:54 ` [PATCH v2 08/10] drm/i915/frontbuffer: Add intel_frontbuffer::display Ville Syrjala @ 2025-10-16 18:54 ` Ville Syrjala 2025-10-29 13:51 ` Jani Nikula 2025-10-16 18:54 ` [PATCH v2 10/10] drm/i915/gem: s/i915_gem_object_get_frontbuffer/i915_gem_object_frontbuffer_lookup/ Ville Syrjala ` (2 subsequent siblings) 11 siblings, 1 reply; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:54 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> The current attempted split between xe/i915 vs. display for intel_frontbuffer is a mess: - the i915 rcu leaks through the interface to the display side - the obj->frontbuffer write-side is now protected by a display specific spinlock even though the actual obj->framebuffer pointer lives in a i915 specific structure - the kref is getting poked directly from both sides - i915_active is still on the display side Clean up the mess by moving everything about the frontbuffer lifetime management to the i915/xe side: - the rcu usage is now completely contained in i915 - frontbuffer_lock is moved into i915 - kref is on the i915/xe side (xe needs the refcount as well due to intel_frontbuffer_queue_flush()->intel_frontbuffer_ref()) - the bo (and its refcounting) is no longer on the display side - i915_active is contained in i915 I was pondering whether we could do this in some kind of smaller steps, and perhaps we could, but it would probably have to start with a bunch of reverts (which for sure won't go cleanly anymore). So not convinced it's worth the hassle. Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/display/intel_bo.c | 34 ++++-- drivers/gpu/drm/i915/display/intel_bo.h | 6 +- .../gpu/drm/i915/display/intel_display_core.h | 3 - .../drm/i915/display/intel_display_driver.c | 1 - .../gpu/drm/i915/display/intel_frontbuffer.c | 89 ++------------- .../gpu/drm/i915/display/intel_frontbuffer.h | 13 +-- drivers/gpu/drm/i915/gem/i915_gem_object.c | 12 +- .../i915/gem/i915_gem_object_frontbuffer.c | 103 ++++++++++++++++++ .../i915/gem/i915_gem_object_frontbuffer.h | 48 +++----- .../gpu/drm/i915/gem/i915_gem_object_types.h | 2 +- drivers/gpu/drm/i915/i915_drv.h | 2 + drivers/gpu/drm/i915/i915_gem.c | 2 + drivers/gpu/drm/i915/i915_vma.c | 6 +- .../gpu/drm/xe/compat-i915-headers/i915_vma.h | 2 - drivers/gpu/drm/xe/display/intel_bo.c | 52 ++++++++- 16 files changed, 227 insertions(+), 149 deletions(-) create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index aa2f0fd95117..717e57205c85 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -155,6 +155,7 @@ gem-y += \ gem/i915_gem_lmem.o \ gem/i915_gem_mman.o \ gem/i915_gem_object.o \ + gem/i915_gem_object_frontbuffer.o \ gem/i915_gem_pages.o \ gem/i915_gem_phys.o \ gem/i915_gem_pm.o \ diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/display/intel_bo.c index 2792aca7bc22..f3687eb63467 100644 --- a/drivers/gpu/drm/i915/display/intel_bo.c +++ b/drivers/gpu/drm/i915/display/intel_bo.c @@ -39,20 +39,40 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i return i915_gem_object_read_from_page(to_intel_bo(obj), offset, dst, size); } -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *_obj) { - return i915_gem_object_get_frontbuffer(to_intel_bo(obj)); + struct drm_i915_gem_object *obj = to_intel_bo(_obj); + struct i915_frontbuffer *front; + + front = i915_gem_object_frontbuffer_get(obj); + if (!front) + return NULL; + + return &front->base; +} + +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) +{ + struct i915_frontbuffer *front = + container_of(_front, typeof(*front), base); + + i915_gem_object_frontbuffer_ref(front); } -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, - struct intel_frontbuffer *front) +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) { - return i915_gem_object_set_frontbuffer(to_intel_bo(obj), front); + struct i915_frontbuffer *front = + container_of(_front, typeof(*front), base); + + return i915_gem_object_frontbuffer_put(front); } -void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *_front) { - i915_gem_object_flush_if_display(to_intel_bo(front->obj)); + struct i915_frontbuffer *front = + container_of(_front, typeof(*front), base); + + i915_gem_object_flush_if_display(front->obj); } void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) diff --git a/drivers/gpu/drm/i915/display/intel_bo.h b/drivers/gpu/drm/i915/display/intel_bo.h index 08247bf36d40..fc05f680dc76 100644 --- a/drivers/gpu/drm/i915/display/intel_bo.h +++ b/drivers/gpu/drm/i915/display/intel_bo.h @@ -19,9 +19,9 @@ bool intel_bo_is_protected(struct drm_gem_object *obj); int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size); -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj); -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, - struct intel_frontbuffer *front); +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj); +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *front); +void intel_bo_frontbuffer_put(struct intel_frontbuffer *front); void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front); void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj); diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h index 13576d07c999..34d578e2cc25 100644 --- a/drivers/gpu/drm/i915/display/intel_display_core.h +++ b/drivers/gpu/drm/i915/display/intel_display_core.h @@ -141,9 +141,6 @@ struct intel_dpll_global { }; struct intel_frontbuffer_tracking { - /* protects obj->frontbuffer (write-side) */ - spinlock_t frontbuffer_lock; - /* protects busy_bits */ spinlock_t lock; diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c index ac684f8c5d40..f84a0b26b7a6 100644 --- a/drivers/gpu/drm/i915/display/intel_display_driver.c +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c @@ -184,7 +184,6 @@ void intel_display_driver_early_probe(struct intel_display *display) if (!HAS_DISPLAY(display)) return; - spin_lock_init(&display->fb_tracking.frontbuffer_lock); spin_lock_init(&display->fb_tracking.lock); mutex_init(&display->backlight.lock); mutex_init(&display->audio.mutex); diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c index 5d627eac07bd..4761e116e442 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c @@ -57,8 +57,6 @@ #include <drm/drm_gem.h> -#include "i915_active.h" -#include "i915_vma.h" #include "intel_bo.h" #include "intel_display_trace.h" #include "intel_display_types.h" @@ -167,7 +165,7 @@ void __intel_fb_flush(struct intel_frontbuffer *front, static void intel_frontbuffer_ref(struct intel_frontbuffer *front) { - kref_get(&front->ref); + intel_bo_frontbuffer_ref(front); } static void intel_frontbuffer_flush_work(struct work_struct *work) @@ -196,89 +194,26 @@ void intel_frontbuffer_queue_flush(struct intel_frontbuffer *front) intel_frontbuffer_put(front); } -static int frontbuffer_active(struct i915_active *ref) +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm) { - struct intel_frontbuffer *front = - container_of(ref, typeof(*front), write); - - kref_get(&front->ref); - return 0; -} - -static void frontbuffer_retire(struct i915_active *ref) -{ - struct intel_frontbuffer *front = - container_of(ref, typeof(*front), write); - - intel_frontbuffer_flush(front, ORIGIN_CS); - intel_frontbuffer_put(front); -} - -static void frontbuffer_release(struct kref *ref) - __releases(&front->display->fb_tracking.frontbuffer_lock) -{ - struct intel_frontbuffer *ret, *front = - container_of(ref, typeof(*front), ref); - struct intel_display *display = front->display; - struct drm_gem_object *obj = front->obj; - - drm_WARN_ON(display->drm, atomic_read(&front->bits)); - - i915_ggtt_clear_scanout(to_intel_bo(obj)); - - ret = intel_bo_set_frontbuffer(obj, NULL); - drm_WARN_ON(display->drm, ret); - spin_unlock(&display->fb_tracking.frontbuffer_lock); - - i915_active_fini(&front->write); - - drm_gem_object_put(obj); - kfree_rcu(front, rcu); -} - -struct intel_frontbuffer * -intel_frontbuffer_get(struct drm_gem_object *obj) -{ - struct intel_display *display = to_intel_display(obj->dev); - struct intel_frontbuffer *front, *cur; - - front = intel_bo_get_frontbuffer(obj); - if (front) - return front; - - front = kmalloc(sizeof(*front), GFP_KERNEL); - if (!front) - return NULL; - - drm_gem_object_get(obj); - - front->obj = obj; - front->display = display; - kref_init(&front->ref); + front->display = to_intel_display(drm); atomic_set(&front->bits, 0); - i915_active_init(&front->write, - frontbuffer_active, - frontbuffer_retire, - I915_ACTIVE_RETIRE_SLEEPS); INIT_WORK(&front->flush_work, intel_frontbuffer_flush_work); +} - spin_lock(&display->fb_tracking.frontbuffer_lock); - cur = intel_bo_set_frontbuffer(obj, front); - spin_unlock(&display->fb_tracking.frontbuffer_lock); +void intel_frontbuffer_fini(struct intel_frontbuffer *front) +{ + drm_WARN_ON(front->display->drm, atomic_read(&front->bits)); +} - if (cur != front) { - drm_gem_object_put(obj); - kfree(front); - } - - return cur; +struct intel_frontbuffer *intel_frontbuffer_get(struct drm_gem_object *obj) +{ + return intel_bo_frontbuffer_get(obj); } void intel_frontbuffer_put(struct intel_frontbuffer *front) { - kref_put_lock(&front->ref, - frontbuffer_release, - &front->display->fb_tracking.frontbuffer_lock); + intel_bo_frontbuffer_put(front); } /** diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h index ff2a6ac75a34..22677acb4c06 100644 --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h @@ -26,10 +26,9 @@ #include <linux/atomic.h> #include <linux/bits.h> -#include <linux/kref.h> - -#include "i915_active_types.h" +#include <linux/workqueue_types.h> +struct drm_device; struct drm_gem_object; struct intel_display; @@ -42,13 +41,8 @@ enum fb_op_origin { }; struct intel_frontbuffer { - struct kref ref; struct intel_display *display; atomic_t bits; - struct i915_active write; - struct drm_gem_object *obj; - struct rcu_head rcu; - struct work_struct flush_work; }; @@ -141,4 +135,7 @@ void intel_frontbuffer_track(struct intel_frontbuffer *old, struct intel_frontbuffer *new, unsigned int frontbuffer_bits); +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm); +void intel_frontbuffer_fini(struct intel_frontbuffer *front); + #endif /* __INTEL_FRONTBUFFER_H__ */ diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c index 478011e5ecb3..36680eddf88e 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c @@ -476,24 +476,24 @@ static void i915_gem_free_object(struct drm_gem_object *gem_obj) void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, enum fb_op_origin origin) { - struct intel_frontbuffer *front; + struct i915_frontbuffer *front; front = i915_gem_object_get_frontbuffer(obj); if (front) { - intel_frontbuffer_flush(front, origin); - intel_frontbuffer_put(front); + intel_frontbuffer_flush(&front->base, origin); + i915_gem_object_frontbuffer_put(front); } } void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, enum fb_op_origin origin) { - struct intel_frontbuffer *front; + struct i915_frontbuffer *front; front = i915_gem_object_get_frontbuffer(obj); if (front) { - intel_frontbuffer_invalidate(front, origin); - intel_frontbuffer_put(front); + intel_frontbuffer_invalidate(&front->base, origin); + i915_gem_object_frontbuffer_put(front); } } diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c new file mode 100644 index 000000000000..7ef89613c025 --- /dev/null +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: MIT +/* Copyright © 2025 Intel Corporation */ + +#include "i915_drv.h" +#include "i915_gem_object_frontbuffer.h" + +static int frontbuffer_active(struct i915_active *ref) +{ + struct i915_frontbuffer *front = + container_of(ref, typeof(*front), write); + + kref_get(&front->ref); + return 0; +} + +static void frontbuffer_retire(struct i915_active *ref) +{ + struct i915_frontbuffer *front = + container_of(ref, typeof(*front), write); + + intel_frontbuffer_flush(&front->base, ORIGIN_CS); + i915_gem_object_frontbuffer_put(front); +} + +struct i915_frontbuffer * +i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj) +{ + struct drm_i915_private *i915 = to_i915(obj->base.dev); + struct i915_frontbuffer *front, *cur; + + front = i915_gem_object_get_frontbuffer(obj); + if (front) + return front; + + front = kmalloc(sizeof(*front), GFP_KERNEL); + if (!front) + return NULL; + + intel_frontbuffer_init(&front->base, &i915->drm); + + kref_init(&front->ref); + i915_gem_object_get(obj); + front->obj = obj; + + i915_active_init(&front->write, + frontbuffer_active, + frontbuffer_retire, + I915_ACTIVE_RETIRE_SLEEPS); + + spin_lock(&i915->frontbuffer_lock); + if (rcu_access_pointer(obj->frontbuffer)) { + cur = rcu_dereference_protected(obj->frontbuffer, true); + kref_get(&cur->ref); + } else { + cur = front; + rcu_assign_pointer(obj->frontbuffer, front); + } + spin_unlock(&i915->frontbuffer_lock); + + if (cur != front) { + i915_gem_object_put(obj); + intel_frontbuffer_fini(&front->base); + kfree(front); + } + + return cur; +} + +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front) +{ + kref_get(&front->ref); +} + +static void frontbuffer_release(struct kref *ref) + __releases(&i915->frontbuffer_lock) +{ + struct i915_frontbuffer *front = + container_of(ref, typeof(*front), ref); + struct drm_i915_gem_object *obj = front->obj; + struct drm_i915_private *i915 = to_i915(obj->base.dev); + + i915_ggtt_clear_scanout(obj); + + RCU_INIT_POINTER(obj->frontbuffer, NULL); + + spin_unlock(&i915->frontbuffer_lock); + + i915_active_fini(&front->write); + + i915_gem_object_put(obj); + + intel_frontbuffer_fini(&front->base); + + kfree_rcu(front, rcu); +} + +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front) +{ + struct drm_i915_private *i915 = to_i915(front->obj->base.dev); + + kref_put_lock(&front->ref, frontbuffer_release, + &i915->frontbuffer_lock); +} diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h index 1ec382c43aee..385f7e8049b8 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h @@ -12,6 +12,14 @@ #include "display/intel_frontbuffer.h" #include "i915_gem_object_types.h" +struct i915_frontbuffer { + struct intel_frontbuffer base; + struct drm_i915_gem_object *obj; + struct i915_active write; + struct rcu_head rcu; + struct kref ref; +}; + void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, enum fb_op_origin origin); void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, @@ -33,6 +41,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, __i915_gem_object_invalidate_frontbuffer(obj, origin); } +struct i915_frontbuffer *i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj); +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front); +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); + /** * i915_gem_object_get_frontbuffer - Get the object's frontbuffer * @obj: The object whose frontbuffer to get. @@ -42,10 +54,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, * * Return: pointer to object's frontbuffer is such exists or NULL */ -static inline struct intel_frontbuffer * +static inline struct i915_frontbuffer * i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) { - struct intel_frontbuffer *front; + struct i915_frontbuffer *front; if (likely(!rcu_access_pointer(obj->frontbuffer))) return NULL; @@ -62,41 +74,11 @@ i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) if (likely(front == rcu_access_pointer(obj->frontbuffer))) break; - intel_frontbuffer_put(front); + i915_gem_object_frontbuffer_put(front); } while (1); rcu_read_unlock(); return front; } -/** - * i915_gem_object_set_frontbuffer - Set the object's frontbuffer - * @obj: The object whose frontbuffer to set. - * @front: The frontbuffer to set - * - * Set object's frontbuffer pointer. If frontbuffer is already set for the - * object keep it and return it's pointer to the caller. Please note that RCU - * mechanism is used to handle e.g. ongoing removal of frontbuffer pointer. This - * function is protected by i915->display->fb_tracking.frontbuffer_lock - * - * Return: pointer to frontbuffer which was set. - */ -static inline struct intel_frontbuffer * -i915_gem_object_set_frontbuffer(struct drm_i915_gem_object *obj, - struct intel_frontbuffer *front) -{ - struct intel_frontbuffer *cur = front; - - if (!front) { - RCU_INIT_POINTER(obj->frontbuffer, NULL); - } else if (rcu_access_pointer(obj->frontbuffer)) { - cur = rcu_dereference_protected(obj->frontbuffer, true); - kref_get(&cur->ref); - } else { - rcu_assign_pointer(obj->frontbuffer, front); - } - - return cur; -} - #endif diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h index 64600aa8227f..465ce94aee76 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h @@ -574,7 +574,7 @@ struct drm_i915_gem_object { */ u16 write_domain; - struct intel_frontbuffer __rcu *frontbuffer; + struct i915_frontbuffer __rcu *frontbuffer; /** Current tiling stride for the object, if it's tiled. */ unsigned int tiling_and_stride; diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 95f9ddf22ce4..5381a934a671 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -311,6 +311,8 @@ struct drm_i915_private { struct file *mmap_singleton; } gem; + spinlock_t frontbuffer_lock; /* protects obj->frontbuffer (write-side) */ + struct intel_pxp *pxp; struct i915_pmu pmu; diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index e14a0c3db999..39b747c3e223 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -1298,6 +1298,8 @@ void i915_gem_init_early(struct drm_i915_private *dev_priv) { i915_gem_init__mm(dev_priv); i915_gem_init__contexts(dev_priv); + + spin_lock_init(&dev_priv->frontbuffer_lock); } void i915_gem_cleanup_early(struct drm_i915_private *dev_priv) diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c index 25e97031d76e..cb36daaa101d 100644 --- a/drivers/gpu/drm/i915/i915_vma.c +++ b/drivers/gpu/drm/i915/i915_vma.c @@ -1990,13 +1990,13 @@ int _i915_vma_move_to_active(struct i915_vma *vma, } if (flags & EXEC_OBJECT_WRITE) { - struct intel_frontbuffer *front; + struct i915_frontbuffer *front; front = i915_gem_object_get_frontbuffer(obj); if (unlikely(front)) { - if (intel_frontbuffer_invalidate(front, ORIGIN_CS)) + if (intel_frontbuffer_invalidate(&front->base, ORIGIN_CS)) i915_active_add_request(&front->write, rq); - intel_frontbuffer_put(front); + i915_gem_object_frontbuffer_put(front); } } diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h index 4465c40f8134..b17e3bab23d5 100644 --- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h +++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h @@ -26,8 +26,6 @@ struct i915_vma { struct xe_ggtt_node *node; }; -#define i915_ggtt_clear_scanout(bo) do { } while (0) - #define i915_vma_fence_id(vma) -1 static inline u32 i915_ggtt_offset(const struct i915_vma *vma) diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/intel_bo.c index 2437c00a2d3e..bad2243b9114 100644 --- a/drivers/gpu/drm/xe/display/intel_bo.c +++ b/drivers/gpu/drm/xe/display/intel_bo.c @@ -5,6 +5,7 @@ #include "xe_bo.h" #include "intel_bo.h" +#include "intel_frontbuffer.h" bool intel_bo_is_tiled(struct drm_gem_object *obj) { @@ -40,15 +41,56 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i return xe_bo_read(bo, offset, dst, size); } -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) +struct xe_frontbuffer { + struct intel_frontbuffer base; + struct drm_gem_object *obj; + struct kref ref; +}; + +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj) { - return NULL; + struct xe_frontbuffer *front; + + front = kmalloc(sizeof(*front), GFP_KERNEL); + if (!front) + return NULL; + + intel_frontbuffer_init(&front->base, obj->dev); + + kref_init(&front->ref); + + drm_gem_object_get(obj); + front->obj = obj; + + return &front->base; } -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, - struct intel_frontbuffer *front) +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) { - return front; + struct xe_frontbuffer *front = + container_of(_front, typeof(*front), base); + + kref_get(&front->ref); +} + +static void frontbuffer_release(struct kref *ref) +{ + struct xe_frontbuffer *front = + container_of(ref, typeof(*front), ref); + + intel_frontbuffer_fini(&front->base); + + drm_gem_object_put(front->obj); + + kfree(front); +} + +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) +{ + struct xe_frontbuffer *front = + container_of(_front, typeof(*front), base); + + kref_put(&front->ref, frontbuffer_release); } void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling 2025-10-16 18:54 ` [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling Ville Syrjala @ 2025-10-29 13:51 ` Jani Nikula 2025-10-29 15:00 ` Jani Nikula 0 siblings, 1 reply; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:51 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > The current attempted split between xe/i915 vs. display > for intel_frontbuffer is a mess: > - the i915 rcu leaks through the interface to the display side > - the obj->frontbuffer write-side is now protected by a display > specific spinlock even though the actual obj->framebuffer > pointer lives in a i915 specific structure > - the kref is getting poked directly from both sides > - i915_active is still on the display side > > Clean up the mess by moving everything about the frontbuffer > lifetime management to the i915/xe side: > - the rcu usage is now completely contained in i915 > - frontbuffer_lock is moved into i915 > - kref is on the i915/xe side (xe needs the refcount as well > due to intel_frontbuffer_queue_flush()->intel_frontbuffer_ref()) > - the bo (and its refcounting) is no longer on the display side > - i915_active is contained in i915 > > I was pondering whether we could do this in some kind of smaller > steps, and perhaps we could, but it would probably have to start > with a bunch of reverts (which for sure won't go cleanly anymore). > So not convinced it's worth the hassle. It's a PITA to review, that's for sure. :p I'm not particularly fond of embedding struct intel_frontbuffer inside struct i915_frontbuffer and struct xe_frontbuffer, because it means i915 and xe will need to know the struct intel_frontbuffer definition. If we can't live with the embedding long term, we'll probably need opaque pointers back and forth. That said, I think the overall change here is net positive, and makes life much easier. We don't have to fix everything at once, so let's go with this. I didn't spot any obvious issues, but my confidence level with the review is super low. :( I guess the alternatives are to just go with that, trusting CI, or give me more time to review. I'm fine either way, as I can trust you to step up if it goes crashing down. ;) BR, Jani. PS. I think patches 1-2 are fine with the acks alone. > > Acked-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/Makefile | 1 + > drivers/gpu/drm/i915/display/intel_bo.c | 34 ++++-- > drivers/gpu/drm/i915/display/intel_bo.h | 6 +- > .../gpu/drm/i915/display/intel_display_core.h | 3 - > .../drm/i915/display/intel_display_driver.c | 1 - > .../gpu/drm/i915/display/intel_frontbuffer.c | 89 ++------------- > .../gpu/drm/i915/display/intel_frontbuffer.h | 13 +-- > drivers/gpu/drm/i915/gem/i915_gem_object.c | 12 +- > .../i915/gem/i915_gem_object_frontbuffer.c | 103 ++++++++++++++++++ > .../i915/gem/i915_gem_object_frontbuffer.h | 48 +++----- > .../gpu/drm/i915/gem/i915_gem_object_types.h | 2 +- > drivers/gpu/drm/i915/i915_drv.h | 2 + > drivers/gpu/drm/i915/i915_gem.c | 2 + > drivers/gpu/drm/i915/i915_vma.c | 6 +- > .../gpu/drm/xe/compat-i915-headers/i915_vma.h | 2 - > drivers/gpu/drm/xe/display/intel_bo.c | 52 ++++++++- > 16 files changed, 227 insertions(+), 149 deletions(-) > create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c > > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > index aa2f0fd95117..717e57205c85 100644 > --- a/drivers/gpu/drm/i915/Makefile > +++ b/drivers/gpu/drm/i915/Makefile > @@ -155,6 +155,7 @@ gem-y += \ > gem/i915_gem_lmem.o \ > gem/i915_gem_mman.o \ > gem/i915_gem_object.o \ > + gem/i915_gem_object_frontbuffer.o \ > gem/i915_gem_pages.o \ > gem/i915_gem_phys.o \ > gem/i915_gem_pm.o \ > diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/display/intel_bo.c > index 2792aca7bc22..f3687eb63467 100644 > --- a/drivers/gpu/drm/i915/display/intel_bo.c > +++ b/drivers/gpu/drm/i915/display/intel_bo.c > @@ -39,20 +39,40 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i > return i915_gem_object_read_from_page(to_intel_bo(obj), offset, dst, size); > } > > -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) > +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *_obj) > { > - return i915_gem_object_get_frontbuffer(to_intel_bo(obj)); > + struct drm_i915_gem_object *obj = to_intel_bo(_obj); > + struct i915_frontbuffer *front; > + > + front = i915_gem_object_frontbuffer_get(obj); > + if (!front) > + return NULL; > + > + return &front->base; > +} > + > +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) > +{ > + struct i915_frontbuffer *front = > + container_of(_front, typeof(*front), base); > + > + i915_gem_object_frontbuffer_ref(front); > } > > -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, > - struct intel_frontbuffer *front) > +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) > { > - return i915_gem_object_set_frontbuffer(to_intel_bo(obj), front); > + struct i915_frontbuffer *front = > + container_of(_front, typeof(*front), base); > + > + return i915_gem_object_frontbuffer_put(front); > } > > -void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) > +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *_front) > { > - i915_gem_object_flush_if_display(to_intel_bo(front->obj)); > + struct i915_frontbuffer *front = > + container_of(_front, typeof(*front), base); > + > + i915_gem_object_flush_if_display(front->obj); > } > > void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) > diff --git a/drivers/gpu/drm/i915/display/intel_bo.h b/drivers/gpu/drm/i915/display/intel_bo.h > index 08247bf36d40..fc05f680dc76 100644 > --- a/drivers/gpu/drm/i915/display/intel_bo.h > +++ b/drivers/gpu/drm/i915/display/intel_bo.h > @@ -19,9 +19,9 @@ bool intel_bo_is_protected(struct drm_gem_object *obj); > int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); > int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size); > > -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj); > -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, > - struct intel_frontbuffer *front); > +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj); > +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *front); > +void intel_bo_frontbuffer_put(struct intel_frontbuffer *front); > void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front); > > void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj); > diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h > index 13576d07c999..34d578e2cc25 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_core.h > +++ b/drivers/gpu/drm/i915/display/intel_display_core.h > @@ -141,9 +141,6 @@ struct intel_dpll_global { > }; > > struct intel_frontbuffer_tracking { > - /* protects obj->frontbuffer (write-side) */ > - spinlock_t frontbuffer_lock; > - > /* protects busy_bits */ > spinlock_t lock; > > diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c > index ac684f8c5d40..f84a0b26b7a6 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_driver.c > +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c > @@ -184,7 +184,6 @@ void intel_display_driver_early_probe(struct intel_display *display) > if (!HAS_DISPLAY(display)) > return; > > - spin_lock_init(&display->fb_tracking.frontbuffer_lock); > spin_lock_init(&display->fb_tracking.lock); > mutex_init(&display->backlight.lock); > mutex_init(&display->audio.mutex); > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index 5d627eac07bd..4761e116e442 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -57,8 +57,6 @@ > > #include <drm/drm_gem.h> > > -#include "i915_active.h" > -#include "i915_vma.h" > #include "intel_bo.h" > #include "intel_display_trace.h" > #include "intel_display_types.h" > @@ -167,7 +165,7 @@ void __intel_fb_flush(struct intel_frontbuffer *front, > > static void intel_frontbuffer_ref(struct intel_frontbuffer *front) > { > - kref_get(&front->ref); > + intel_bo_frontbuffer_ref(front); > } > > static void intel_frontbuffer_flush_work(struct work_struct *work) > @@ -196,89 +194,26 @@ void intel_frontbuffer_queue_flush(struct intel_frontbuffer *front) > intel_frontbuffer_put(front); > } > > -static int frontbuffer_active(struct i915_active *ref) > +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm) > { > - struct intel_frontbuffer *front = > - container_of(ref, typeof(*front), write); > - > - kref_get(&front->ref); > - return 0; > -} > - > -static void frontbuffer_retire(struct i915_active *ref) > -{ > - struct intel_frontbuffer *front = > - container_of(ref, typeof(*front), write); > - > - intel_frontbuffer_flush(front, ORIGIN_CS); > - intel_frontbuffer_put(front); > -} > - > -static void frontbuffer_release(struct kref *ref) > - __releases(&front->display->fb_tracking.frontbuffer_lock) > -{ > - struct intel_frontbuffer *ret, *front = > - container_of(ref, typeof(*front), ref); > - struct intel_display *display = front->display; > - struct drm_gem_object *obj = front->obj; > - > - drm_WARN_ON(display->drm, atomic_read(&front->bits)); > - > - i915_ggtt_clear_scanout(to_intel_bo(obj)); > - > - ret = intel_bo_set_frontbuffer(obj, NULL); > - drm_WARN_ON(display->drm, ret); > - spin_unlock(&display->fb_tracking.frontbuffer_lock); > - > - i915_active_fini(&front->write); > - > - drm_gem_object_put(obj); > - kfree_rcu(front, rcu); > -} > - > -struct intel_frontbuffer * > -intel_frontbuffer_get(struct drm_gem_object *obj) > -{ > - struct intel_display *display = to_intel_display(obj->dev); > - struct intel_frontbuffer *front, *cur; > - > - front = intel_bo_get_frontbuffer(obj); > - if (front) > - return front; > - > - front = kmalloc(sizeof(*front), GFP_KERNEL); > - if (!front) > - return NULL; > - > - drm_gem_object_get(obj); > - > - front->obj = obj; > - front->display = display; > - kref_init(&front->ref); > + front->display = to_intel_display(drm); > atomic_set(&front->bits, 0); > - i915_active_init(&front->write, > - frontbuffer_active, > - frontbuffer_retire, > - I915_ACTIVE_RETIRE_SLEEPS); > INIT_WORK(&front->flush_work, intel_frontbuffer_flush_work); > +} > > - spin_lock(&display->fb_tracking.frontbuffer_lock); > - cur = intel_bo_set_frontbuffer(obj, front); > - spin_unlock(&display->fb_tracking.frontbuffer_lock); > +void intel_frontbuffer_fini(struct intel_frontbuffer *front) > +{ > + drm_WARN_ON(front->display->drm, atomic_read(&front->bits)); > +} > > - if (cur != front) { > - drm_gem_object_put(obj); > - kfree(front); > - } > - > - return cur; > +struct intel_frontbuffer *intel_frontbuffer_get(struct drm_gem_object *obj) > +{ > + return intel_bo_frontbuffer_get(obj); > } > > void intel_frontbuffer_put(struct intel_frontbuffer *front) > { > - kref_put_lock(&front->ref, > - frontbuffer_release, > - &front->display->fb_tracking.frontbuffer_lock); > + intel_bo_frontbuffer_put(front); > } > > /** > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > index ff2a6ac75a34..22677acb4c06 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > @@ -26,10 +26,9 @@ > > #include <linux/atomic.h> > #include <linux/bits.h> > -#include <linux/kref.h> > - > -#include "i915_active_types.h" > +#include <linux/workqueue_types.h> > > +struct drm_device; > struct drm_gem_object; > struct intel_display; > > @@ -42,13 +41,8 @@ enum fb_op_origin { > }; > > struct intel_frontbuffer { > - struct kref ref; > struct intel_display *display; > atomic_t bits; > - struct i915_active write; > - struct drm_gem_object *obj; > - struct rcu_head rcu; > - > struct work_struct flush_work; > }; > > @@ -141,4 +135,7 @@ void intel_frontbuffer_track(struct intel_frontbuffer *old, > struct intel_frontbuffer *new, > unsigned int frontbuffer_bits); > > +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm); > +void intel_frontbuffer_fini(struct intel_frontbuffer *front); > + > #endif /* __INTEL_FRONTBUFFER_H__ */ > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c > index 478011e5ecb3..36680eddf88e 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c > @@ -476,24 +476,24 @@ static void i915_gem_free_object(struct drm_gem_object *gem_obj) > void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, > enum fb_op_origin origin) > { > - struct intel_frontbuffer *front; > + struct i915_frontbuffer *front; > > front = i915_gem_object_get_frontbuffer(obj); > if (front) { > - intel_frontbuffer_flush(front, origin); > - intel_frontbuffer_put(front); > + intel_frontbuffer_flush(&front->base, origin); > + i915_gem_object_frontbuffer_put(front); > } > } > > void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, > enum fb_op_origin origin) > { > - struct intel_frontbuffer *front; > + struct i915_frontbuffer *front; > > front = i915_gem_object_get_frontbuffer(obj); > if (front) { > - intel_frontbuffer_invalidate(front, origin); > - intel_frontbuffer_put(front); > + intel_frontbuffer_invalidate(&front->base, origin); > + i915_gem_object_frontbuffer_put(front); > } > } > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c > new file mode 100644 > index 000000000000..7ef89613c025 > --- /dev/null > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c > @@ -0,0 +1,103 @@ > +// SPDX-License-Identifier: MIT > +/* Copyright © 2025 Intel Corporation */ > + > +#include "i915_drv.h" > +#include "i915_gem_object_frontbuffer.h" > + > +static int frontbuffer_active(struct i915_active *ref) > +{ > + struct i915_frontbuffer *front = > + container_of(ref, typeof(*front), write); > + > + kref_get(&front->ref); > + return 0; > +} > + > +static void frontbuffer_retire(struct i915_active *ref) > +{ > + struct i915_frontbuffer *front = > + container_of(ref, typeof(*front), write); > + > + intel_frontbuffer_flush(&front->base, ORIGIN_CS); > + i915_gem_object_frontbuffer_put(front); > +} > + > +struct i915_frontbuffer * > +i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj) > +{ > + struct drm_i915_private *i915 = to_i915(obj->base.dev); > + struct i915_frontbuffer *front, *cur; > + > + front = i915_gem_object_get_frontbuffer(obj); > + if (front) > + return front; > + > + front = kmalloc(sizeof(*front), GFP_KERNEL); > + if (!front) > + return NULL; > + > + intel_frontbuffer_init(&front->base, &i915->drm); > + > + kref_init(&front->ref); > + i915_gem_object_get(obj); > + front->obj = obj; > + > + i915_active_init(&front->write, > + frontbuffer_active, > + frontbuffer_retire, > + I915_ACTIVE_RETIRE_SLEEPS); > + > + spin_lock(&i915->frontbuffer_lock); > + if (rcu_access_pointer(obj->frontbuffer)) { > + cur = rcu_dereference_protected(obj->frontbuffer, true); > + kref_get(&cur->ref); > + } else { > + cur = front; > + rcu_assign_pointer(obj->frontbuffer, front); > + } > + spin_unlock(&i915->frontbuffer_lock); > + > + if (cur != front) { > + i915_gem_object_put(obj); > + intel_frontbuffer_fini(&front->base); > + kfree(front); > + } > + > + return cur; > +} > + > +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front) > +{ > + kref_get(&front->ref); > +} > + > +static void frontbuffer_release(struct kref *ref) > + __releases(&i915->frontbuffer_lock) > +{ > + struct i915_frontbuffer *front = > + container_of(ref, typeof(*front), ref); > + struct drm_i915_gem_object *obj = front->obj; > + struct drm_i915_private *i915 = to_i915(obj->base.dev); > + > + i915_ggtt_clear_scanout(obj); > + > + RCU_INIT_POINTER(obj->frontbuffer, NULL); > + > + spin_unlock(&i915->frontbuffer_lock); > + > + i915_active_fini(&front->write); > + > + i915_gem_object_put(obj); > + > + intel_frontbuffer_fini(&front->base); > + > + kfree_rcu(front, rcu); > +} > + > +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front) > +{ > + struct drm_i915_private *i915 = to_i915(front->obj->base.dev); > + > + kref_put_lock(&front->ref, frontbuffer_release, > + &i915->frontbuffer_lock); > +} > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > index 1ec382c43aee..385f7e8049b8 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > @@ -12,6 +12,14 @@ > #include "display/intel_frontbuffer.h" > #include "i915_gem_object_types.h" > > +struct i915_frontbuffer { > + struct intel_frontbuffer base; > + struct drm_i915_gem_object *obj; > + struct i915_active write; > + struct rcu_head rcu; > + struct kref ref; > +}; > + > void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, > enum fb_op_origin origin); > void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, > @@ -33,6 +41,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, > __i915_gem_object_invalidate_frontbuffer(obj, origin); > } > > +struct i915_frontbuffer *i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj); > +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front); > +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); > + > /** > * i915_gem_object_get_frontbuffer - Get the object's frontbuffer > * @obj: The object whose frontbuffer to get. > @@ -42,10 +54,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, > * > * Return: pointer to object's frontbuffer is such exists or NULL > */ > -static inline struct intel_frontbuffer * > +static inline struct i915_frontbuffer * > i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) > { > - struct intel_frontbuffer *front; > + struct i915_frontbuffer *front; > > if (likely(!rcu_access_pointer(obj->frontbuffer))) > return NULL; > @@ -62,41 +74,11 @@ i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) > if (likely(front == rcu_access_pointer(obj->frontbuffer))) > break; > > - intel_frontbuffer_put(front); > + i915_gem_object_frontbuffer_put(front); > } while (1); > rcu_read_unlock(); > > return front; > } > > -/** > - * i915_gem_object_set_frontbuffer - Set the object's frontbuffer > - * @obj: The object whose frontbuffer to set. > - * @front: The frontbuffer to set > - * > - * Set object's frontbuffer pointer. If frontbuffer is already set for the > - * object keep it and return it's pointer to the caller. Please note that RCU > - * mechanism is used to handle e.g. ongoing removal of frontbuffer pointer. This > - * function is protected by i915->display->fb_tracking.frontbuffer_lock > - * > - * Return: pointer to frontbuffer which was set. > - */ > -static inline struct intel_frontbuffer * > -i915_gem_object_set_frontbuffer(struct drm_i915_gem_object *obj, > - struct intel_frontbuffer *front) > -{ > - struct intel_frontbuffer *cur = front; > - > - if (!front) { > - RCU_INIT_POINTER(obj->frontbuffer, NULL); > - } else if (rcu_access_pointer(obj->frontbuffer)) { > - cur = rcu_dereference_protected(obj->frontbuffer, true); > - kref_get(&cur->ref); > - } else { > - rcu_assign_pointer(obj->frontbuffer, front); > - } > - > - return cur; > -} > - > #endif > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > index 64600aa8227f..465ce94aee76 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > @@ -574,7 +574,7 @@ struct drm_i915_gem_object { > */ > u16 write_domain; > > - struct intel_frontbuffer __rcu *frontbuffer; > + struct i915_frontbuffer __rcu *frontbuffer; > > /** Current tiling stride for the object, if it's tiled. */ > unsigned int tiling_and_stride; > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index 95f9ddf22ce4..5381a934a671 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -311,6 +311,8 @@ struct drm_i915_private { > struct file *mmap_singleton; > } gem; > > + spinlock_t frontbuffer_lock; /* protects obj->frontbuffer (write-side) */ > + > struct intel_pxp *pxp; > > struct i915_pmu pmu; > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index e14a0c3db999..39b747c3e223 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -1298,6 +1298,8 @@ void i915_gem_init_early(struct drm_i915_private *dev_priv) > { > i915_gem_init__mm(dev_priv); > i915_gem_init__contexts(dev_priv); > + > + spin_lock_init(&dev_priv->frontbuffer_lock); > } > > void i915_gem_cleanup_early(struct drm_i915_private *dev_priv) > diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c > index 25e97031d76e..cb36daaa101d 100644 > --- a/drivers/gpu/drm/i915/i915_vma.c > +++ b/drivers/gpu/drm/i915/i915_vma.c > @@ -1990,13 +1990,13 @@ int _i915_vma_move_to_active(struct i915_vma *vma, > } > > if (flags & EXEC_OBJECT_WRITE) { > - struct intel_frontbuffer *front; > + struct i915_frontbuffer *front; > > front = i915_gem_object_get_frontbuffer(obj); > if (unlikely(front)) { > - if (intel_frontbuffer_invalidate(front, ORIGIN_CS)) > + if (intel_frontbuffer_invalidate(&front->base, ORIGIN_CS)) > i915_active_add_request(&front->write, rq); > - intel_frontbuffer_put(front); > + i915_gem_object_frontbuffer_put(front); > } > } > > diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h > index 4465c40f8134..b17e3bab23d5 100644 > --- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h > +++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h > @@ -26,8 +26,6 @@ struct i915_vma { > struct xe_ggtt_node *node; > }; > > -#define i915_ggtt_clear_scanout(bo) do { } while (0) > - > #define i915_vma_fence_id(vma) -1 > > static inline u32 i915_ggtt_offset(const struct i915_vma *vma) > diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/intel_bo.c > index 2437c00a2d3e..bad2243b9114 100644 > --- a/drivers/gpu/drm/xe/display/intel_bo.c > +++ b/drivers/gpu/drm/xe/display/intel_bo.c > @@ -5,6 +5,7 @@ > > #include "xe_bo.h" > #include "intel_bo.h" > +#include "intel_frontbuffer.h" > > bool intel_bo_is_tiled(struct drm_gem_object *obj) > { > @@ -40,15 +41,56 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i > return xe_bo_read(bo, offset, dst, size); > } > > -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) > +struct xe_frontbuffer { > + struct intel_frontbuffer base; > + struct drm_gem_object *obj; > + struct kref ref; > +}; > + > +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj) > { > - return NULL; > + struct xe_frontbuffer *front; > + > + front = kmalloc(sizeof(*front), GFP_KERNEL); > + if (!front) > + return NULL; > + > + intel_frontbuffer_init(&front->base, obj->dev); > + > + kref_init(&front->ref); > + > + drm_gem_object_get(obj); > + front->obj = obj; > + > + return &front->base; > } > > -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, > - struct intel_frontbuffer *front) > +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) > { > - return front; > + struct xe_frontbuffer *front = > + container_of(_front, typeof(*front), base); > + > + kref_get(&front->ref); > +} > + > +static void frontbuffer_release(struct kref *ref) > +{ > + struct xe_frontbuffer *front = > + container_of(ref, typeof(*front), ref); > + > + intel_frontbuffer_fini(&front->base); > + > + drm_gem_object_put(front->obj); > + > + kfree(front); > +} > + > +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) > +{ > + struct xe_frontbuffer *front = > + container_of(_front, typeof(*front), base); > + > + kref_put(&front->ref, frontbuffer_release); > } > > void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling 2025-10-29 13:51 ` Jani Nikula @ 2025-10-29 15:00 ` Jani Nikula 2025-11-06 13:48 ` Jani Nikula 0 siblings, 1 reply; 27+ messages in thread From: Jani Nikula @ 2025-10-29 15:00 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Wed, 29 Oct 2025, Jani Nikula <jani.nikula@intel.com> wrote: > On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: >> From: Ville Syrjälä <ville.syrjala@linux.intel.com> >> >> The current attempted split between xe/i915 vs. display >> for intel_frontbuffer is a mess: >> - the i915 rcu leaks through the interface to the display side >> - the obj->frontbuffer write-side is now protected by a display >> specific spinlock even though the actual obj->framebuffer >> pointer lives in a i915 specific structure >> - the kref is getting poked directly from both sides >> - i915_active is still on the display side >> >> Clean up the mess by moving everything about the frontbuffer >> lifetime management to the i915/xe side: >> - the rcu usage is now completely contained in i915 >> - frontbuffer_lock is moved into i915 >> - kref is on the i915/xe side (xe needs the refcount as well >> due to intel_frontbuffer_queue_flush()->intel_frontbuffer_ref()) >> - the bo (and its refcounting) is no longer on the display side >> - i915_active is contained in i915 >> >> I was pondering whether we could do this in some kind of smaller >> steps, and perhaps we could, but it would probably have to start >> with a bunch of reverts (which for sure won't go cleanly anymore). >> So not convinced it's worth the hassle. > > It's a PITA to review, that's for sure. :p > > I'm not particularly fond of embedding struct intel_frontbuffer inside > struct i915_frontbuffer and struct xe_frontbuffer, because it means i915 > and xe will need to know the struct intel_frontbuffer definition. If we > can't live with the embedding long term, we'll probably need opaque > pointers back and forth. > > That said, I think the overall change here is net positive, and makes > life much easier. We don't have to fix everything at once, so let's go > with this. > > I didn't spot any obvious issues, but my confidence level with the > review is super low. :( > > I guess the alternatives are to just go with that, trusting CI, or give > me more time to review. I'm fine either way, as I can trust you to step > up if it goes crashing down. ;) One approach is to send 1-8 first, get CI, get them merged, and then do 9-10 separately, to get separate CI. Maybe? *shrug* > > BR, > Jani. > > PS. I think patches 1-2 are fine with the acks alone. > >> >> Acked-by: Jani Nikula <jani.nikula@intel.com> >> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> >> --- >> drivers/gpu/drm/i915/Makefile | 1 + >> drivers/gpu/drm/i915/display/intel_bo.c | 34 ++++-- >> drivers/gpu/drm/i915/display/intel_bo.h | 6 +- >> .../gpu/drm/i915/display/intel_display_core.h | 3 - >> .../drm/i915/display/intel_display_driver.c | 1 - >> .../gpu/drm/i915/display/intel_frontbuffer.c | 89 ++------------- >> .../gpu/drm/i915/display/intel_frontbuffer.h | 13 +-- >> drivers/gpu/drm/i915/gem/i915_gem_object.c | 12 +- >> .../i915/gem/i915_gem_object_frontbuffer.c | 103 ++++++++++++++++++ >> .../i915/gem/i915_gem_object_frontbuffer.h | 48 +++----- >> .../gpu/drm/i915/gem/i915_gem_object_types.h | 2 +- >> drivers/gpu/drm/i915/i915_drv.h | 2 + >> drivers/gpu/drm/i915/i915_gem.c | 2 + >> drivers/gpu/drm/i915/i915_vma.c | 6 +- >> .../gpu/drm/xe/compat-i915-headers/i915_vma.h | 2 - >> drivers/gpu/drm/xe/display/intel_bo.c | 52 ++++++++- >> 16 files changed, 227 insertions(+), 149 deletions(-) >> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c >> >> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile >> index aa2f0fd95117..717e57205c85 100644 >> --- a/drivers/gpu/drm/i915/Makefile >> +++ b/drivers/gpu/drm/i915/Makefile >> @@ -155,6 +155,7 @@ gem-y += \ >> gem/i915_gem_lmem.o \ >> gem/i915_gem_mman.o \ >> gem/i915_gem_object.o \ >> + gem/i915_gem_object_frontbuffer.o \ >> gem/i915_gem_pages.o \ >> gem/i915_gem_phys.o \ >> gem/i915_gem_pm.o \ >> diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/display/intel_bo.c >> index 2792aca7bc22..f3687eb63467 100644 >> --- a/drivers/gpu/drm/i915/display/intel_bo.c >> +++ b/drivers/gpu/drm/i915/display/intel_bo.c >> @@ -39,20 +39,40 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i >> return i915_gem_object_read_from_page(to_intel_bo(obj), offset, dst, size); >> } >> >> -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) >> +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *_obj) >> { >> - return i915_gem_object_get_frontbuffer(to_intel_bo(obj)); >> + struct drm_i915_gem_object *obj = to_intel_bo(_obj); >> + struct i915_frontbuffer *front; >> + >> + front = i915_gem_object_frontbuffer_get(obj); >> + if (!front) >> + return NULL; >> + >> + return &front->base; >> +} >> + >> +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) >> +{ >> + struct i915_frontbuffer *front = >> + container_of(_front, typeof(*front), base); >> + >> + i915_gem_object_frontbuffer_ref(front); >> } >> >> -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, >> - struct intel_frontbuffer *front) >> +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) >> { >> - return i915_gem_object_set_frontbuffer(to_intel_bo(obj), front); >> + struct i915_frontbuffer *front = >> + container_of(_front, typeof(*front), base); >> + >> + return i915_gem_object_frontbuffer_put(front); >> } >> >> -void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) >> +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *_front) >> { >> - i915_gem_object_flush_if_display(to_intel_bo(front->obj)); >> + struct i915_frontbuffer *front = >> + container_of(_front, typeof(*front), base); >> + >> + i915_gem_object_flush_if_display(front->obj); >> } >> >> void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) >> diff --git a/drivers/gpu/drm/i915/display/intel_bo.h b/drivers/gpu/drm/i915/display/intel_bo.h >> index 08247bf36d40..fc05f680dc76 100644 >> --- a/drivers/gpu/drm/i915/display/intel_bo.h >> +++ b/drivers/gpu/drm/i915/display/intel_bo.h >> @@ -19,9 +19,9 @@ bool intel_bo_is_protected(struct drm_gem_object *obj); >> int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); >> int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size); >> >> -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj); >> -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, >> - struct intel_frontbuffer *front); >> +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj); >> +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *front); >> +void intel_bo_frontbuffer_put(struct intel_frontbuffer *front); >> void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front); >> >> void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj); >> diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h >> index 13576d07c999..34d578e2cc25 100644 >> --- a/drivers/gpu/drm/i915/display/intel_display_core.h >> +++ b/drivers/gpu/drm/i915/display/intel_display_core.h >> @@ -141,9 +141,6 @@ struct intel_dpll_global { >> }; >> >> struct intel_frontbuffer_tracking { >> - /* protects obj->frontbuffer (write-side) */ >> - spinlock_t frontbuffer_lock; >> - >> /* protects busy_bits */ >> spinlock_t lock; >> >> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c >> index ac684f8c5d40..f84a0b26b7a6 100644 >> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c >> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c >> @@ -184,7 +184,6 @@ void intel_display_driver_early_probe(struct intel_display *display) >> if (!HAS_DISPLAY(display)) >> return; >> >> - spin_lock_init(&display->fb_tracking.frontbuffer_lock); >> spin_lock_init(&display->fb_tracking.lock); >> mutex_init(&display->backlight.lock); >> mutex_init(&display->audio.mutex); >> diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c >> index 5d627eac07bd..4761e116e442 100644 >> --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c >> +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c >> @@ -57,8 +57,6 @@ >> >> #include <drm/drm_gem.h> >> >> -#include "i915_active.h" >> -#include "i915_vma.h" >> #include "intel_bo.h" >> #include "intel_display_trace.h" >> #include "intel_display_types.h" >> @@ -167,7 +165,7 @@ void __intel_fb_flush(struct intel_frontbuffer *front, >> >> static void intel_frontbuffer_ref(struct intel_frontbuffer *front) >> { >> - kref_get(&front->ref); >> + intel_bo_frontbuffer_ref(front); >> } >> >> static void intel_frontbuffer_flush_work(struct work_struct *work) >> @@ -196,89 +194,26 @@ void intel_frontbuffer_queue_flush(struct intel_frontbuffer *front) >> intel_frontbuffer_put(front); >> } >> >> -static int frontbuffer_active(struct i915_active *ref) >> +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm) >> { >> - struct intel_frontbuffer *front = >> - container_of(ref, typeof(*front), write); >> - >> - kref_get(&front->ref); >> - return 0; >> -} >> - >> -static void frontbuffer_retire(struct i915_active *ref) >> -{ >> - struct intel_frontbuffer *front = >> - container_of(ref, typeof(*front), write); >> - >> - intel_frontbuffer_flush(front, ORIGIN_CS); >> - intel_frontbuffer_put(front); >> -} >> - >> -static void frontbuffer_release(struct kref *ref) >> - __releases(&front->display->fb_tracking.frontbuffer_lock) >> -{ >> - struct intel_frontbuffer *ret, *front = >> - container_of(ref, typeof(*front), ref); >> - struct intel_display *display = front->display; >> - struct drm_gem_object *obj = front->obj; >> - >> - drm_WARN_ON(display->drm, atomic_read(&front->bits)); >> - >> - i915_ggtt_clear_scanout(to_intel_bo(obj)); >> - >> - ret = intel_bo_set_frontbuffer(obj, NULL); >> - drm_WARN_ON(display->drm, ret); >> - spin_unlock(&display->fb_tracking.frontbuffer_lock); >> - >> - i915_active_fini(&front->write); >> - >> - drm_gem_object_put(obj); >> - kfree_rcu(front, rcu); >> -} >> - >> -struct intel_frontbuffer * >> -intel_frontbuffer_get(struct drm_gem_object *obj) >> -{ >> - struct intel_display *display = to_intel_display(obj->dev); >> - struct intel_frontbuffer *front, *cur; >> - >> - front = intel_bo_get_frontbuffer(obj); >> - if (front) >> - return front; >> - >> - front = kmalloc(sizeof(*front), GFP_KERNEL); >> - if (!front) >> - return NULL; >> - >> - drm_gem_object_get(obj); >> - >> - front->obj = obj; >> - front->display = display; >> - kref_init(&front->ref); >> + front->display = to_intel_display(drm); >> atomic_set(&front->bits, 0); >> - i915_active_init(&front->write, >> - frontbuffer_active, >> - frontbuffer_retire, >> - I915_ACTIVE_RETIRE_SLEEPS); >> INIT_WORK(&front->flush_work, intel_frontbuffer_flush_work); >> +} >> >> - spin_lock(&display->fb_tracking.frontbuffer_lock); >> - cur = intel_bo_set_frontbuffer(obj, front); >> - spin_unlock(&display->fb_tracking.frontbuffer_lock); >> +void intel_frontbuffer_fini(struct intel_frontbuffer *front) >> +{ >> + drm_WARN_ON(front->display->drm, atomic_read(&front->bits)); >> +} >> >> - if (cur != front) { >> - drm_gem_object_put(obj); >> - kfree(front); >> - } >> - >> - return cur; >> +struct intel_frontbuffer *intel_frontbuffer_get(struct drm_gem_object *obj) >> +{ >> + return intel_bo_frontbuffer_get(obj); >> } >> >> void intel_frontbuffer_put(struct intel_frontbuffer *front) >> { >> - kref_put_lock(&front->ref, >> - frontbuffer_release, >> - &front->display->fb_tracking.frontbuffer_lock); >> + intel_bo_frontbuffer_put(front); >> } >> >> /** >> diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h >> index ff2a6ac75a34..22677acb4c06 100644 >> --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h >> +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h >> @@ -26,10 +26,9 @@ >> >> #include <linux/atomic.h> >> #include <linux/bits.h> >> -#include <linux/kref.h> >> - >> -#include "i915_active_types.h" >> +#include <linux/workqueue_types.h> >> >> +struct drm_device; >> struct drm_gem_object; >> struct intel_display; >> >> @@ -42,13 +41,8 @@ enum fb_op_origin { >> }; >> >> struct intel_frontbuffer { >> - struct kref ref; >> struct intel_display *display; >> atomic_t bits; >> - struct i915_active write; >> - struct drm_gem_object *obj; >> - struct rcu_head rcu; >> - >> struct work_struct flush_work; >> }; >> >> @@ -141,4 +135,7 @@ void intel_frontbuffer_track(struct intel_frontbuffer *old, >> struct intel_frontbuffer *new, >> unsigned int frontbuffer_bits); >> >> +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm); >> +void intel_frontbuffer_fini(struct intel_frontbuffer *front); >> + >> #endif /* __INTEL_FRONTBUFFER_H__ */ >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c >> index 478011e5ecb3..36680eddf88e 100644 >> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c >> @@ -476,24 +476,24 @@ static void i915_gem_free_object(struct drm_gem_object *gem_obj) >> void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, >> enum fb_op_origin origin) >> { >> - struct intel_frontbuffer *front; >> + struct i915_frontbuffer *front; >> >> front = i915_gem_object_get_frontbuffer(obj); >> if (front) { >> - intel_frontbuffer_flush(front, origin); >> - intel_frontbuffer_put(front); >> + intel_frontbuffer_flush(&front->base, origin); >> + i915_gem_object_frontbuffer_put(front); >> } >> } >> >> void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, >> enum fb_op_origin origin) >> { >> - struct intel_frontbuffer *front; >> + struct i915_frontbuffer *front; >> >> front = i915_gem_object_get_frontbuffer(obj); >> if (front) { >> - intel_frontbuffer_invalidate(front, origin); >> - intel_frontbuffer_put(front); >> + intel_frontbuffer_invalidate(&front->base, origin); >> + i915_gem_object_frontbuffer_put(front); >> } >> } >> >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c >> new file mode 100644 >> index 000000000000..7ef89613c025 >> --- /dev/null >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c >> @@ -0,0 +1,103 @@ >> +// SPDX-License-Identifier: MIT >> +/* Copyright © 2025 Intel Corporation */ >> + >> +#include "i915_drv.h" >> +#include "i915_gem_object_frontbuffer.h" >> + >> +static int frontbuffer_active(struct i915_active *ref) >> +{ >> + struct i915_frontbuffer *front = >> + container_of(ref, typeof(*front), write); >> + >> + kref_get(&front->ref); >> + return 0; >> +} >> + >> +static void frontbuffer_retire(struct i915_active *ref) >> +{ >> + struct i915_frontbuffer *front = >> + container_of(ref, typeof(*front), write); >> + >> + intel_frontbuffer_flush(&front->base, ORIGIN_CS); >> + i915_gem_object_frontbuffer_put(front); >> +} >> + >> +struct i915_frontbuffer * >> +i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj) >> +{ >> + struct drm_i915_private *i915 = to_i915(obj->base.dev); >> + struct i915_frontbuffer *front, *cur; >> + >> + front = i915_gem_object_get_frontbuffer(obj); >> + if (front) >> + return front; >> + >> + front = kmalloc(sizeof(*front), GFP_KERNEL); >> + if (!front) >> + return NULL; >> + >> + intel_frontbuffer_init(&front->base, &i915->drm); >> + >> + kref_init(&front->ref); >> + i915_gem_object_get(obj); >> + front->obj = obj; >> + >> + i915_active_init(&front->write, >> + frontbuffer_active, >> + frontbuffer_retire, >> + I915_ACTIVE_RETIRE_SLEEPS); >> + >> + spin_lock(&i915->frontbuffer_lock); >> + if (rcu_access_pointer(obj->frontbuffer)) { >> + cur = rcu_dereference_protected(obj->frontbuffer, true); >> + kref_get(&cur->ref); >> + } else { >> + cur = front; >> + rcu_assign_pointer(obj->frontbuffer, front); >> + } >> + spin_unlock(&i915->frontbuffer_lock); >> + >> + if (cur != front) { >> + i915_gem_object_put(obj); >> + intel_frontbuffer_fini(&front->base); >> + kfree(front); >> + } >> + >> + return cur; >> +} >> + >> +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front) >> +{ >> + kref_get(&front->ref); >> +} >> + >> +static void frontbuffer_release(struct kref *ref) >> + __releases(&i915->frontbuffer_lock) >> +{ >> + struct i915_frontbuffer *front = >> + container_of(ref, typeof(*front), ref); >> + struct drm_i915_gem_object *obj = front->obj; >> + struct drm_i915_private *i915 = to_i915(obj->base.dev); >> + >> + i915_ggtt_clear_scanout(obj); >> + >> + RCU_INIT_POINTER(obj->frontbuffer, NULL); >> + >> + spin_unlock(&i915->frontbuffer_lock); >> + >> + i915_active_fini(&front->write); >> + >> + i915_gem_object_put(obj); >> + >> + intel_frontbuffer_fini(&front->base); >> + >> + kfree_rcu(front, rcu); >> +} >> + >> +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front) >> +{ >> + struct drm_i915_private *i915 = to_i915(front->obj->base.dev); >> + >> + kref_put_lock(&front->ref, frontbuffer_release, >> + &i915->frontbuffer_lock); >> +} >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h >> index 1ec382c43aee..385f7e8049b8 100644 >> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h >> @@ -12,6 +12,14 @@ >> #include "display/intel_frontbuffer.h" >> #include "i915_gem_object_types.h" >> >> +struct i915_frontbuffer { >> + struct intel_frontbuffer base; >> + struct drm_i915_gem_object *obj; >> + struct i915_active write; >> + struct rcu_head rcu; >> + struct kref ref; >> +}; >> + >> void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, >> enum fb_op_origin origin); >> void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, >> @@ -33,6 +41,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, >> __i915_gem_object_invalidate_frontbuffer(obj, origin); >> } >> >> +struct i915_frontbuffer *i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj); >> +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front); >> +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); >> + >> /** >> * i915_gem_object_get_frontbuffer - Get the object's frontbuffer >> * @obj: The object whose frontbuffer to get. >> @@ -42,10 +54,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, >> * >> * Return: pointer to object's frontbuffer is such exists or NULL >> */ >> -static inline struct intel_frontbuffer * >> +static inline struct i915_frontbuffer * >> i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) >> { >> - struct intel_frontbuffer *front; >> + struct i915_frontbuffer *front; >> >> if (likely(!rcu_access_pointer(obj->frontbuffer))) >> return NULL; >> @@ -62,41 +74,11 @@ i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) >> if (likely(front == rcu_access_pointer(obj->frontbuffer))) >> break; >> >> - intel_frontbuffer_put(front); >> + i915_gem_object_frontbuffer_put(front); >> } while (1); >> rcu_read_unlock(); >> >> return front; >> } >> >> -/** >> - * i915_gem_object_set_frontbuffer - Set the object's frontbuffer >> - * @obj: The object whose frontbuffer to set. >> - * @front: The frontbuffer to set >> - * >> - * Set object's frontbuffer pointer. If frontbuffer is already set for the >> - * object keep it and return it's pointer to the caller. Please note that RCU >> - * mechanism is used to handle e.g. ongoing removal of frontbuffer pointer. This >> - * function is protected by i915->display->fb_tracking.frontbuffer_lock >> - * >> - * Return: pointer to frontbuffer which was set. >> - */ >> -static inline struct intel_frontbuffer * >> -i915_gem_object_set_frontbuffer(struct drm_i915_gem_object *obj, >> - struct intel_frontbuffer *front) >> -{ >> - struct intel_frontbuffer *cur = front; >> - >> - if (!front) { >> - RCU_INIT_POINTER(obj->frontbuffer, NULL); >> - } else if (rcu_access_pointer(obj->frontbuffer)) { >> - cur = rcu_dereference_protected(obj->frontbuffer, true); >> - kref_get(&cur->ref); >> - } else { >> - rcu_assign_pointer(obj->frontbuffer, front); >> - } >> - >> - return cur; >> -} >> - >> #endif >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h >> index 64600aa8227f..465ce94aee76 100644 >> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h >> @@ -574,7 +574,7 @@ struct drm_i915_gem_object { >> */ >> u16 write_domain; >> >> - struct intel_frontbuffer __rcu *frontbuffer; >> + struct i915_frontbuffer __rcu *frontbuffer; >> >> /** Current tiling stride for the object, if it's tiled. */ >> unsigned int tiling_and_stride; >> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h >> index 95f9ddf22ce4..5381a934a671 100644 >> --- a/drivers/gpu/drm/i915/i915_drv.h >> +++ b/drivers/gpu/drm/i915/i915_drv.h >> @@ -311,6 +311,8 @@ struct drm_i915_private { >> struct file *mmap_singleton; >> } gem; >> >> + spinlock_t frontbuffer_lock; /* protects obj->frontbuffer (write-side) */ >> + >> struct intel_pxp *pxp; >> >> struct i915_pmu pmu; >> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c >> index e14a0c3db999..39b747c3e223 100644 >> --- a/drivers/gpu/drm/i915/i915_gem.c >> +++ b/drivers/gpu/drm/i915/i915_gem.c >> @@ -1298,6 +1298,8 @@ void i915_gem_init_early(struct drm_i915_private *dev_priv) >> { >> i915_gem_init__mm(dev_priv); >> i915_gem_init__contexts(dev_priv); >> + >> + spin_lock_init(&dev_priv->frontbuffer_lock); >> } >> >> void i915_gem_cleanup_early(struct drm_i915_private *dev_priv) >> diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c >> index 25e97031d76e..cb36daaa101d 100644 >> --- a/drivers/gpu/drm/i915/i915_vma.c >> +++ b/drivers/gpu/drm/i915/i915_vma.c >> @@ -1990,13 +1990,13 @@ int _i915_vma_move_to_active(struct i915_vma *vma, >> } >> >> if (flags & EXEC_OBJECT_WRITE) { >> - struct intel_frontbuffer *front; >> + struct i915_frontbuffer *front; >> >> front = i915_gem_object_get_frontbuffer(obj); >> if (unlikely(front)) { >> - if (intel_frontbuffer_invalidate(front, ORIGIN_CS)) >> + if (intel_frontbuffer_invalidate(&front->base, ORIGIN_CS)) >> i915_active_add_request(&front->write, rq); >> - intel_frontbuffer_put(front); >> + i915_gem_object_frontbuffer_put(front); >> } >> } >> >> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h >> index 4465c40f8134..b17e3bab23d5 100644 >> --- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h >> +++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h >> @@ -26,8 +26,6 @@ struct i915_vma { >> struct xe_ggtt_node *node; >> }; >> >> -#define i915_ggtt_clear_scanout(bo) do { } while (0) >> - >> #define i915_vma_fence_id(vma) -1 >> >> static inline u32 i915_ggtt_offset(const struct i915_vma *vma) >> diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/intel_bo.c >> index 2437c00a2d3e..bad2243b9114 100644 >> --- a/drivers/gpu/drm/xe/display/intel_bo.c >> +++ b/drivers/gpu/drm/xe/display/intel_bo.c >> @@ -5,6 +5,7 @@ >> >> #include "xe_bo.h" >> #include "intel_bo.h" >> +#include "intel_frontbuffer.h" >> >> bool intel_bo_is_tiled(struct drm_gem_object *obj) >> { >> @@ -40,15 +41,56 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i >> return xe_bo_read(bo, offset, dst, size); >> } >> >> -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) >> +struct xe_frontbuffer { >> + struct intel_frontbuffer base; >> + struct drm_gem_object *obj; >> + struct kref ref; >> +}; >> + >> +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj) >> { >> - return NULL; >> + struct xe_frontbuffer *front; >> + >> + front = kmalloc(sizeof(*front), GFP_KERNEL); >> + if (!front) >> + return NULL; >> + >> + intel_frontbuffer_init(&front->base, obj->dev); >> + >> + kref_init(&front->ref); >> + >> + drm_gem_object_get(obj); >> + front->obj = obj; >> + >> + return &front->base; >> } >> >> -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, >> - struct intel_frontbuffer *front) >> +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) >> { >> - return front; >> + struct xe_frontbuffer *front = >> + container_of(_front, typeof(*front), base); >> + >> + kref_get(&front->ref); >> +} >> + >> +static void frontbuffer_release(struct kref *ref) >> +{ >> + struct xe_frontbuffer *front = >> + container_of(ref, typeof(*front), ref); >> + >> + intel_frontbuffer_fini(&front->base); >> + >> + drm_gem_object_put(front->obj); >> + >> + kfree(front); >> +} >> + >> +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) >> +{ >> + struct xe_frontbuffer *front = >> + container_of(_front, typeof(*front), base); >> + >> + kref_put(&front->ref, frontbuffer_release); >> } >> >> void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling 2025-10-29 15:00 ` Jani Nikula @ 2025-11-06 13:48 ` Jani Nikula 2025-11-06 14:27 ` Ville Syrjälä 0 siblings, 1 reply; 27+ messages in thread From: Jani Nikula @ 2025-11-06 13:48 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Wed, 29 Oct 2025, Jani Nikula <jani.nikula@intel.com> wrote: > On Wed, 29 Oct 2025, Jani Nikula <jani.nikula@intel.com> wrote: >> On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: >>> From: Ville Syrjälä <ville.syrjala@linux.intel.com> >>> >>> The current attempted split between xe/i915 vs. display >>> for intel_frontbuffer is a mess: >>> - the i915 rcu leaks through the interface to the display side >>> - the obj->frontbuffer write-side is now protected by a display >>> specific spinlock even though the actual obj->framebuffer >>> pointer lives in a i915 specific structure >>> - the kref is getting poked directly from both sides >>> - i915_active is still on the display side >>> >>> Clean up the mess by moving everything about the frontbuffer >>> lifetime management to the i915/xe side: >>> - the rcu usage is now completely contained in i915 >>> - frontbuffer_lock is moved into i915 >>> - kref is on the i915/xe side (xe needs the refcount as well >>> due to intel_frontbuffer_queue_flush()->intel_frontbuffer_ref()) >>> - the bo (and its refcounting) is no longer on the display side >>> - i915_active is contained in i915 >>> >>> I was pondering whether we could do this in some kind of smaller >>> steps, and perhaps we could, but it would probably have to start >>> with a bunch of reverts (which for sure won't go cleanly anymore). >>> So not convinced it's worth the hassle. >> >> It's a PITA to review, that's for sure. :p >> >> I'm not particularly fond of embedding struct intel_frontbuffer inside >> struct i915_frontbuffer and struct xe_frontbuffer, because it means i915 >> and xe will need to know the struct intel_frontbuffer definition. If we >> can't live with the embedding long term, we'll probably need opaque >> pointers back and forth. >> >> That said, I think the overall change here is net positive, and makes >> life much easier. We don't have to fix everything at once, so let's go >> with this. >> >> I didn't spot any obvious issues, but my confidence level with the >> review is super low. :( >> >> I guess the alternatives are to just go with that, trusting CI, or give >> me more time to review. I'm fine either way, as I can trust you to step >> up if it goes crashing down. ;) > > One approach is to send 1-8 first, get CI, get them merged, and then do > 9-10 separately, to get separate CI. Maybe? *shrug* Any conclusions on this? Just merge the whole thing as-is rather than let it go stale...? BR, Jani. > >> >> BR, >> Jani. >> >> PS. I think patches 1-2 are fine with the acks alone. >> >>> >>> Acked-by: Jani Nikula <jani.nikula@intel.com> >>> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> >>> --- >>> drivers/gpu/drm/i915/Makefile | 1 + >>> drivers/gpu/drm/i915/display/intel_bo.c | 34 ++++-- >>> drivers/gpu/drm/i915/display/intel_bo.h | 6 +- >>> .../gpu/drm/i915/display/intel_display_core.h | 3 - >>> .../drm/i915/display/intel_display_driver.c | 1 - >>> .../gpu/drm/i915/display/intel_frontbuffer.c | 89 ++------------- >>> .../gpu/drm/i915/display/intel_frontbuffer.h | 13 +-- >>> drivers/gpu/drm/i915/gem/i915_gem_object.c | 12 +- >>> .../i915/gem/i915_gem_object_frontbuffer.c | 103 ++++++++++++++++++ >>> .../i915/gem/i915_gem_object_frontbuffer.h | 48 +++----- >>> .../gpu/drm/i915/gem/i915_gem_object_types.h | 2 +- >>> drivers/gpu/drm/i915/i915_drv.h | 2 + >>> drivers/gpu/drm/i915/i915_gem.c | 2 + >>> drivers/gpu/drm/i915/i915_vma.c | 6 +- >>> .../gpu/drm/xe/compat-i915-headers/i915_vma.h | 2 - >>> drivers/gpu/drm/xe/display/intel_bo.c | 52 ++++++++- >>> 16 files changed, 227 insertions(+), 149 deletions(-) >>> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c >>> >>> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile >>> index aa2f0fd95117..717e57205c85 100644 >>> --- a/drivers/gpu/drm/i915/Makefile >>> +++ b/drivers/gpu/drm/i915/Makefile >>> @@ -155,6 +155,7 @@ gem-y += \ >>> gem/i915_gem_lmem.o \ >>> gem/i915_gem_mman.o \ >>> gem/i915_gem_object.o \ >>> + gem/i915_gem_object_frontbuffer.o \ >>> gem/i915_gem_pages.o \ >>> gem/i915_gem_phys.o \ >>> gem/i915_gem_pm.o \ >>> diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/display/intel_bo.c >>> index 2792aca7bc22..f3687eb63467 100644 >>> --- a/drivers/gpu/drm/i915/display/intel_bo.c >>> +++ b/drivers/gpu/drm/i915/display/intel_bo.c >>> @@ -39,20 +39,40 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i >>> return i915_gem_object_read_from_page(to_intel_bo(obj), offset, dst, size); >>> } >>> >>> -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) >>> +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *_obj) >>> { >>> - return i915_gem_object_get_frontbuffer(to_intel_bo(obj)); >>> + struct drm_i915_gem_object *obj = to_intel_bo(_obj); >>> + struct i915_frontbuffer *front; >>> + >>> + front = i915_gem_object_frontbuffer_get(obj); >>> + if (!front) >>> + return NULL; >>> + >>> + return &front->base; >>> +} >>> + >>> +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) >>> +{ >>> + struct i915_frontbuffer *front = >>> + container_of(_front, typeof(*front), base); >>> + >>> + i915_gem_object_frontbuffer_ref(front); >>> } >>> >>> -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, >>> - struct intel_frontbuffer *front) >>> +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) >>> { >>> - return i915_gem_object_set_frontbuffer(to_intel_bo(obj), front); >>> + struct i915_frontbuffer *front = >>> + container_of(_front, typeof(*front), base); >>> + >>> + return i915_gem_object_frontbuffer_put(front); >>> } >>> >>> -void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) >>> +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *_front) >>> { >>> - i915_gem_object_flush_if_display(to_intel_bo(front->obj)); >>> + struct i915_frontbuffer *front = >>> + container_of(_front, typeof(*front), base); >>> + >>> + i915_gem_object_flush_if_display(front->obj); >>> } >>> >>> void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) >>> diff --git a/drivers/gpu/drm/i915/display/intel_bo.h b/drivers/gpu/drm/i915/display/intel_bo.h >>> index 08247bf36d40..fc05f680dc76 100644 >>> --- a/drivers/gpu/drm/i915/display/intel_bo.h >>> +++ b/drivers/gpu/drm/i915/display/intel_bo.h >>> @@ -19,9 +19,9 @@ bool intel_bo_is_protected(struct drm_gem_object *obj); >>> int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); >>> int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size); >>> >>> -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj); >>> -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, >>> - struct intel_frontbuffer *front); >>> +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj); >>> +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *front); >>> +void intel_bo_frontbuffer_put(struct intel_frontbuffer *front); >>> void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front); >>> >>> void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj); >>> diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h >>> index 13576d07c999..34d578e2cc25 100644 >>> --- a/drivers/gpu/drm/i915/display/intel_display_core.h >>> +++ b/drivers/gpu/drm/i915/display/intel_display_core.h >>> @@ -141,9 +141,6 @@ struct intel_dpll_global { >>> }; >>> >>> struct intel_frontbuffer_tracking { >>> - /* protects obj->frontbuffer (write-side) */ >>> - spinlock_t frontbuffer_lock; >>> - >>> /* protects busy_bits */ >>> spinlock_t lock; >>> >>> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c >>> index ac684f8c5d40..f84a0b26b7a6 100644 >>> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c >>> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c >>> @@ -184,7 +184,6 @@ void intel_display_driver_early_probe(struct intel_display *display) >>> if (!HAS_DISPLAY(display)) >>> return; >>> >>> - spin_lock_init(&display->fb_tracking.frontbuffer_lock); >>> spin_lock_init(&display->fb_tracking.lock); >>> mutex_init(&display->backlight.lock); >>> mutex_init(&display->audio.mutex); >>> diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c >>> index 5d627eac07bd..4761e116e442 100644 >>> --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c >>> +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c >>> @@ -57,8 +57,6 @@ >>> >>> #include <drm/drm_gem.h> >>> >>> -#include "i915_active.h" >>> -#include "i915_vma.h" >>> #include "intel_bo.h" >>> #include "intel_display_trace.h" >>> #include "intel_display_types.h" >>> @@ -167,7 +165,7 @@ void __intel_fb_flush(struct intel_frontbuffer *front, >>> >>> static void intel_frontbuffer_ref(struct intel_frontbuffer *front) >>> { >>> - kref_get(&front->ref); >>> + intel_bo_frontbuffer_ref(front); >>> } >>> >>> static void intel_frontbuffer_flush_work(struct work_struct *work) >>> @@ -196,89 +194,26 @@ void intel_frontbuffer_queue_flush(struct intel_frontbuffer *front) >>> intel_frontbuffer_put(front); >>> } >>> >>> -static int frontbuffer_active(struct i915_active *ref) >>> +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm) >>> { >>> - struct intel_frontbuffer *front = >>> - container_of(ref, typeof(*front), write); >>> - >>> - kref_get(&front->ref); >>> - return 0; >>> -} >>> - >>> -static void frontbuffer_retire(struct i915_active *ref) >>> -{ >>> - struct intel_frontbuffer *front = >>> - container_of(ref, typeof(*front), write); >>> - >>> - intel_frontbuffer_flush(front, ORIGIN_CS); >>> - intel_frontbuffer_put(front); >>> -} >>> - >>> -static void frontbuffer_release(struct kref *ref) >>> - __releases(&front->display->fb_tracking.frontbuffer_lock) >>> -{ >>> - struct intel_frontbuffer *ret, *front = >>> - container_of(ref, typeof(*front), ref); >>> - struct intel_display *display = front->display; >>> - struct drm_gem_object *obj = front->obj; >>> - >>> - drm_WARN_ON(display->drm, atomic_read(&front->bits)); >>> - >>> - i915_ggtt_clear_scanout(to_intel_bo(obj)); >>> - >>> - ret = intel_bo_set_frontbuffer(obj, NULL); >>> - drm_WARN_ON(display->drm, ret); >>> - spin_unlock(&display->fb_tracking.frontbuffer_lock); >>> - >>> - i915_active_fini(&front->write); >>> - >>> - drm_gem_object_put(obj); >>> - kfree_rcu(front, rcu); >>> -} >>> - >>> -struct intel_frontbuffer * >>> -intel_frontbuffer_get(struct drm_gem_object *obj) >>> -{ >>> - struct intel_display *display = to_intel_display(obj->dev); >>> - struct intel_frontbuffer *front, *cur; >>> - >>> - front = intel_bo_get_frontbuffer(obj); >>> - if (front) >>> - return front; >>> - >>> - front = kmalloc(sizeof(*front), GFP_KERNEL); >>> - if (!front) >>> - return NULL; >>> - >>> - drm_gem_object_get(obj); >>> - >>> - front->obj = obj; >>> - front->display = display; >>> - kref_init(&front->ref); >>> + front->display = to_intel_display(drm); >>> atomic_set(&front->bits, 0); >>> - i915_active_init(&front->write, >>> - frontbuffer_active, >>> - frontbuffer_retire, >>> - I915_ACTIVE_RETIRE_SLEEPS); >>> INIT_WORK(&front->flush_work, intel_frontbuffer_flush_work); >>> +} >>> >>> - spin_lock(&display->fb_tracking.frontbuffer_lock); >>> - cur = intel_bo_set_frontbuffer(obj, front); >>> - spin_unlock(&display->fb_tracking.frontbuffer_lock); >>> +void intel_frontbuffer_fini(struct intel_frontbuffer *front) >>> +{ >>> + drm_WARN_ON(front->display->drm, atomic_read(&front->bits)); >>> +} >>> >>> - if (cur != front) { >>> - drm_gem_object_put(obj); >>> - kfree(front); >>> - } >>> - >>> - return cur; >>> +struct intel_frontbuffer *intel_frontbuffer_get(struct drm_gem_object *obj) >>> +{ >>> + return intel_bo_frontbuffer_get(obj); >>> } >>> >>> void intel_frontbuffer_put(struct intel_frontbuffer *front) >>> { >>> - kref_put_lock(&front->ref, >>> - frontbuffer_release, >>> - &front->display->fb_tracking.frontbuffer_lock); >>> + intel_bo_frontbuffer_put(front); >>> } >>> >>> /** >>> diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h >>> index ff2a6ac75a34..22677acb4c06 100644 >>> --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h >>> +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h >>> @@ -26,10 +26,9 @@ >>> >>> #include <linux/atomic.h> >>> #include <linux/bits.h> >>> -#include <linux/kref.h> >>> - >>> -#include "i915_active_types.h" >>> +#include <linux/workqueue_types.h> >>> >>> +struct drm_device; >>> struct drm_gem_object; >>> struct intel_display; >>> >>> @@ -42,13 +41,8 @@ enum fb_op_origin { >>> }; >>> >>> struct intel_frontbuffer { >>> - struct kref ref; >>> struct intel_display *display; >>> atomic_t bits; >>> - struct i915_active write; >>> - struct drm_gem_object *obj; >>> - struct rcu_head rcu; >>> - >>> struct work_struct flush_work; >>> }; >>> >>> @@ -141,4 +135,7 @@ void intel_frontbuffer_track(struct intel_frontbuffer *old, >>> struct intel_frontbuffer *new, >>> unsigned int frontbuffer_bits); >>> >>> +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm); >>> +void intel_frontbuffer_fini(struct intel_frontbuffer *front); >>> + >>> #endif /* __INTEL_FRONTBUFFER_H__ */ >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c >>> index 478011e5ecb3..36680eddf88e 100644 >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c >>> @@ -476,24 +476,24 @@ static void i915_gem_free_object(struct drm_gem_object *gem_obj) >>> void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, >>> enum fb_op_origin origin) >>> { >>> - struct intel_frontbuffer *front; >>> + struct i915_frontbuffer *front; >>> >>> front = i915_gem_object_get_frontbuffer(obj); >>> if (front) { >>> - intel_frontbuffer_flush(front, origin); >>> - intel_frontbuffer_put(front); >>> + intel_frontbuffer_flush(&front->base, origin); >>> + i915_gem_object_frontbuffer_put(front); >>> } >>> } >>> >>> void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, >>> enum fb_op_origin origin) >>> { >>> - struct intel_frontbuffer *front; >>> + struct i915_frontbuffer *front; >>> >>> front = i915_gem_object_get_frontbuffer(obj); >>> if (front) { >>> - intel_frontbuffer_invalidate(front, origin); >>> - intel_frontbuffer_put(front); >>> + intel_frontbuffer_invalidate(&front->base, origin); >>> + i915_gem_object_frontbuffer_put(front); >>> } >>> } >>> >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c >>> new file mode 100644 >>> index 000000000000..7ef89613c025 >>> --- /dev/null >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c >>> @@ -0,0 +1,103 @@ >>> +// SPDX-License-Identifier: MIT >>> +/* Copyright © 2025 Intel Corporation */ >>> + >>> +#include "i915_drv.h" >>> +#include "i915_gem_object_frontbuffer.h" >>> + >>> +static int frontbuffer_active(struct i915_active *ref) >>> +{ >>> + struct i915_frontbuffer *front = >>> + container_of(ref, typeof(*front), write); >>> + >>> + kref_get(&front->ref); >>> + return 0; >>> +} >>> + >>> +static void frontbuffer_retire(struct i915_active *ref) >>> +{ >>> + struct i915_frontbuffer *front = >>> + container_of(ref, typeof(*front), write); >>> + >>> + intel_frontbuffer_flush(&front->base, ORIGIN_CS); >>> + i915_gem_object_frontbuffer_put(front); >>> +} >>> + >>> +struct i915_frontbuffer * >>> +i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj) >>> +{ >>> + struct drm_i915_private *i915 = to_i915(obj->base.dev); >>> + struct i915_frontbuffer *front, *cur; >>> + >>> + front = i915_gem_object_get_frontbuffer(obj); >>> + if (front) >>> + return front; >>> + >>> + front = kmalloc(sizeof(*front), GFP_KERNEL); >>> + if (!front) >>> + return NULL; >>> + >>> + intel_frontbuffer_init(&front->base, &i915->drm); >>> + >>> + kref_init(&front->ref); >>> + i915_gem_object_get(obj); >>> + front->obj = obj; >>> + >>> + i915_active_init(&front->write, >>> + frontbuffer_active, >>> + frontbuffer_retire, >>> + I915_ACTIVE_RETIRE_SLEEPS); >>> + >>> + spin_lock(&i915->frontbuffer_lock); >>> + if (rcu_access_pointer(obj->frontbuffer)) { >>> + cur = rcu_dereference_protected(obj->frontbuffer, true); >>> + kref_get(&cur->ref); >>> + } else { >>> + cur = front; >>> + rcu_assign_pointer(obj->frontbuffer, front); >>> + } >>> + spin_unlock(&i915->frontbuffer_lock); >>> + >>> + if (cur != front) { >>> + i915_gem_object_put(obj); >>> + intel_frontbuffer_fini(&front->base); >>> + kfree(front); >>> + } >>> + >>> + return cur; >>> +} >>> + >>> +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front) >>> +{ >>> + kref_get(&front->ref); >>> +} >>> + >>> +static void frontbuffer_release(struct kref *ref) >>> + __releases(&i915->frontbuffer_lock) >>> +{ >>> + struct i915_frontbuffer *front = >>> + container_of(ref, typeof(*front), ref); >>> + struct drm_i915_gem_object *obj = front->obj; >>> + struct drm_i915_private *i915 = to_i915(obj->base.dev); >>> + >>> + i915_ggtt_clear_scanout(obj); >>> + >>> + RCU_INIT_POINTER(obj->frontbuffer, NULL); >>> + >>> + spin_unlock(&i915->frontbuffer_lock); >>> + >>> + i915_active_fini(&front->write); >>> + >>> + i915_gem_object_put(obj); >>> + >>> + intel_frontbuffer_fini(&front->base); >>> + >>> + kfree_rcu(front, rcu); >>> +} >>> + >>> +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front) >>> +{ >>> + struct drm_i915_private *i915 = to_i915(front->obj->base.dev); >>> + >>> + kref_put_lock(&front->ref, frontbuffer_release, >>> + &i915->frontbuffer_lock); >>> +} >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h >>> index 1ec382c43aee..385f7e8049b8 100644 >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h >>> @@ -12,6 +12,14 @@ >>> #include "display/intel_frontbuffer.h" >>> #include "i915_gem_object_types.h" >>> >>> +struct i915_frontbuffer { >>> + struct intel_frontbuffer base; >>> + struct drm_i915_gem_object *obj; >>> + struct i915_active write; >>> + struct rcu_head rcu; >>> + struct kref ref; >>> +}; >>> + >>> void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, >>> enum fb_op_origin origin); >>> void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, >>> @@ -33,6 +41,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, >>> __i915_gem_object_invalidate_frontbuffer(obj, origin); >>> } >>> >>> +struct i915_frontbuffer *i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj); >>> +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front); >>> +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); >>> + >>> /** >>> * i915_gem_object_get_frontbuffer - Get the object's frontbuffer >>> * @obj: The object whose frontbuffer to get. >>> @@ -42,10 +54,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, >>> * >>> * Return: pointer to object's frontbuffer is such exists or NULL >>> */ >>> -static inline struct intel_frontbuffer * >>> +static inline struct i915_frontbuffer * >>> i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) >>> { >>> - struct intel_frontbuffer *front; >>> + struct i915_frontbuffer *front; >>> >>> if (likely(!rcu_access_pointer(obj->frontbuffer))) >>> return NULL; >>> @@ -62,41 +74,11 @@ i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) >>> if (likely(front == rcu_access_pointer(obj->frontbuffer))) >>> break; >>> >>> - intel_frontbuffer_put(front); >>> + i915_gem_object_frontbuffer_put(front); >>> } while (1); >>> rcu_read_unlock(); >>> >>> return front; >>> } >>> >>> -/** >>> - * i915_gem_object_set_frontbuffer - Set the object's frontbuffer >>> - * @obj: The object whose frontbuffer to set. >>> - * @front: The frontbuffer to set >>> - * >>> - * Set object's frontbuffer pointer. If frontbuffer is already set for the >>> - * object keep it and return it's pointer to the caller. Please note that RCU >>> - * mechanism is used to handle e.g. ongoing removal of frontbuffer pointer. This >>> - * function is protected by i915->display->fb_tracking.frontbuffer_lock >>> - * >>> - * Return: pointer to frontbuffer which was set. >>> - */ >>> -static inline struct intel_frontbuffer * >>> -i915_gem_object_set_frontbuffer(struct drm_i915_gem_object *obj, >>> - struct intel_frontbuffer *front) >>> -{ >>> - struct intel_frontbuffer *cur = front; >>> - >>> - if (!front) { >>> - RCU_INIT_POINTER(obj->frontbuffer, NULL); >>> - } else if (rcu_access_pointer(obj->frontbuffer)) { >>> - cur = rcu_dereference_protected(obj->frontbuffer, true); >>> - kref_get(&cur->ref); >>> - } else { >>> - rcu_assign_pointer(obj->frontbuffer, front); >>> - } >>> - >>> - return cur; >>> -} >>> - >>> #endif >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h >>> index 64600aa8227f..465ce94aee76 100644 >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h >>> @@ -574,7 +574,7 @@ struct drm_i915_gem_object { >>> */ >>> u16 write_domain; >>> >>> - struct intel_frontbuffer __rcu *frontbuffer; >>> + struct i915_frontbuffer __rcu *frontbuffer; >>> >>> /** Current tiling stride for the object, if it's tiled. */ >>> unsigned int tiling_and_stride; >>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h >>> index 95f9ddf22ce4..5381a934a671 100644 >>> --- a/drivers/gpu/drm/i915/i915_drv.h >>> +++ b/drivers/gpu/drm/i915/i915_drv.h >>> @@ -311,6 +311,8 @@ struct drm_i915_private { >>> struct file *mmap_singleton; >>> } gem; >>> >>> + spinlock_t frontbuffer_lock; /* protects obj->frontbuffer (write-side) */ >>> + >>> struct intel_pxp *pxp; >>> >>> struct i915_pmu pmu; >>> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c >>> index e14a0c3db999..39b747c3e223 100644 >>> --- a/drivers/gpu/drm/i915/i915_gem.c >>> +++ b/drivers/gpu/drm/i915/i915_gem.c >>> @@ -1298,6 +1298,8 @@ void i915_gem_init_early(struct drm_i915_private *dev_priv) >>> { >>> i915_gem_init__mm(dev_priv); >>> i915_gem_init__contexts(dev_priv); >>> + >>> + spin_lock_init(&dev_priv->frontbuffer_lock); >>> } >>> >>> void i915_gem_cleanup_early(struct drm_i915_private *dev_priv) >>> diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c >>> index 25e97031d76e..cb36daaa101d 100644 >>> --- a/drivers/gpu/drm/i915/i915_vma.c >>> +++ b/drivers/gpu/drm/i915/i915_vma.c >>> @@ -1990,13 +1990,13 @@ int _i915_vma_move_to_active(struct i915_vma *vma, >>> } >>> >>> if (flags & EXEC_OBJECT_WRITE) { >>> - struct intel_frontbuffer *front; >>> + struct i915_frontbuffer *front; >>> >>> front = i915_gem_object_get_frontbuffer(obj); >>> if (unlikely(front)) { >>> - if (intel_frontbuffer_invalidate(front, ORIGIN_CS)) >>> + if (intel_frontbuffer_invalidate(&front->base, ORIGIN_CS)) >>> i915_active_add_request(&front->write, rq); >>> - intel_frontbuffer_put(front); >>> + i915_gem_object_frontbuffer_put(front); >>> } >>> } >>> >>> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h >>> index 4465c40f8134..b17e3bab23d5 100644 >>> --- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h >>> +++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h >>> @@ -26,8 +26,6 @@ struct i915_vma { >>> struct xe_ggtt_node *node; >>> }; >>> >>> -#define i915_ggtt_clear_scanout(bo) do { } while (0) >>> - >>> #define i915_vma_fence_id(vma) -1 >>> >>> static inline u32 i915_ggtt_offset(const struct i915_vma *vma) >>> diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/intel_bo.c >>> index 2437c00a2d3e..bad2243b9114 100644 >>> --- a/drivers/gpu/drm/xe/display/intel_bo.c >>> +++ b/drivers/gpu/drm/xe/display/intel_bo.c >>> @@ -5,6 +5,7 @@ >>> >>> #include "xe_bo.h" >>> #include "intel_bo.h" >>> +#include "intel_frontbuffer.h" >>> >>> bool intel_bo_is_tiled(struct drm_gem_object *obj) >>> { >>> @@ -40,15 +41,56 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i >>> return xe_bo_read(bo, offset, dst, size); >>> } >>> >>> -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) >>> +struct xe_frontbuffer { >>> + struct intel_frontbuffer base; >>> + struct drm_gem_object *obj; >>> + struct kref ref; >>> +}; >>> + >>> +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj) >>> { >>> - return NULL; >>> + struct xe_frontbuffer *front; >>> + >>> + front = kmalloc(sizeof(*front), GFP_KERNEL); >>> + if (!front) >>> + return NULL; >>> + >>> + intel_frontbuffer_init(&front->base, obj->dev); >>> + >>> + kref_init(&front->ref); >>> + >>> + drm_gem_object_get(obj); >>> + front->obj = obj; >>> + >>> + return &front->base; >>> } >>> >>> -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, >>> - struct intel_frontbuffer *front) >>> +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) >>> { >>> - return front; >>> + struct xe_frontbuffer *front = >>> + container_of(_front, typeof(*front), base); >>> + >>> + kref_get(&front->ref); >>> +} >>> + >>> +static void frontbuffer_release(struct kref *ref) >>> +{ >>> + struct xe_frontbuffer *front = >>> + container_of(ref, typeof(*front), ref); >>> + >>> + intel_frontbuffer_fini(&front->base); >>> + >>> + drm_gem_object_put(front->obj); >>> + >>> + kfree(front); >>> +} >>> + >>> +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) >>> +{ >>> + struct xe_frontbuffer *front = >>> + container_of(_front, typeof(*front), base); >>> + >>> + kref_put(&front->ref, frontbuffer_release); >>> } >>> >>> void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling 2025-11-06 13:48 ` Jani Nikula @ 2025-11-06 14:27 ` Ville Syrjälä 2025-11-07 18:45 ` Ville Syrjälä 0 siblings, 1 reply; 27+ messages in thread From: Ville Syrjälä @ 2025-11-06 14:27 UTC (permalink / raw) To: Jani Nikula; +Cc: intel-gfx, intel-xe On Thu, Nov 06, 2025 at 03:48:25PM +0200, Jani Nikula wrote: > On Wed, 29 Oct 2025, Jani Nikula <jani.nikula@intel.com> wrote: > > On Wed, 29 Oct 2025, Jani Nikula <jani.nikula@intel.com> wrote: > >> On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > >>> From: Ville Syrjälä <ville.syrjala@linux.intel.com> > >>> > >>> The current attempted split between xe/i915 vs. display > >>> for intel_frontbuffer is a mess: > >>> - the i915 rcu leaks through the interface to the display side > >>> - the obj->frontbuffer write-side is now protected by a display > >>> specific spinlock even though the actual obj->framebuffer > >>> pointer lives in a i915 specific structure > >>> - the kref is getting poked directly from both sides > >>> - i915_active is still on the display side > >>> > >>> Clean up the mess by moving everything about the frontbuffer > >>> lifetime management to the i915/xe side: > >>> - the rcu usage is now completely contained in i915 > >>> - frontbuffer_lock is moved into i915 > >>> - kref is on the i915/xe side (xe needs the refcount as well > >>> due to intel_frontbuffer_queue_flush()->intel_frontbuffer_ref()) > >>> - the bo (and its refcounting) is no longer on the display side > >>> - i915_active is contained in i915 > >>> > >>> I was pondering whether we could do this in some kind of smaller > >>> steps, and perhaps we could, but it would probably have to start > >>> with a bunch of reverts (which for sure won't go cleanly anymore). > >>> So not convinced it's worth the hassle. > >> > >> It's a PITA to review, that's for sure. :p > >> > >> I'm not particularly fond of embedding struct intel_frontbuffer inside > >> struct i915_frontbuffer and struct xe_frontbuffer, because it means i915 > >> and xe will need to know the struct intel_frontbuffer definition. If we > >> can't live with the embedding long term, we'll probably need opaque > >> pointers back and forth. > >> > >> That said, I think the overall change here is net positive, and makes > >> life much easier. We don't have to fix everything at once, so let's go > >> with this. > >> > >> I didn't spot any obvious issues, but my confidence level with the > >> review is super low. :( > >> > >> I guess the alternatives are to just go with that, trusting CI, or give > >> me more time to review. I'm fine either way, as I can trust you to step > >> up if it goes crashing down. ;) > > > > One approach is to send 1-8 first, get CI, get them merged, and then do > > 9-10 separately, to get separate CI. Maybe? *shrug* > > Any conclusions on this? Just merge the whole thing as-is rather than > let it go stale...? I think we could just merge as is. Pretty sure I didn't have any real functional changes in there. > > BR, > Jani. > > > > > >> > >> BR, > >> Jani. > >> > >> PS. I think patches 1-2 are fine with the acks alone. > >> > >>> > >>> Acked-by: Jani Nikula <jani.nikula@intel.com> > >>> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > >>> --- > >>> drivers/gpu/drm/i915/Makefile | 1 + > >>> drivers/gpu/drm/i915/display/intel_bo.c | 34 ++++-- > >>> drivers/gpu/drm/i915/display/intel_bo.h | 6 +- > >>> .../gpu/drm/i915/display/intel_display_core.h | 3 - > >>> .../drm/i915/display/intel_display_driver.c | 1 - > >>> .../gpu/drm/i915/display/intel_frontbuffer.c | 89 ++------------- > >>> .../gpu/drm/i915/display/intel_frontbuffer.h | 13 +-- > >>> drivers/gpu/drm/i915/gem/i915_gem_object.c | 12 +- > >>> .../i915/gem/i915_gem_object_frontbuffer.c | 103 ++++++++++++++++++ > >>> .../i915/gem/i915_gem_object_frontbuffer.h | 48 +++----- > >>> .../gpu/drm/i915/gem/i915_gem_object_types.h | 2 +- > >>> drivers/gpu/drm/i915/i915_drv.h | 2 + > >>> drivers/gpu/drm/i915/i915_gem.c | 2 + > >>> drivers/gpu/drm/i915/i915_vma.c | 6 +- > >>> .../gpu/drm/xe/compat-i915-headers/i915_vma.h | 2 - > >>> drivers/gpu/drm/xe/display/intel_bo.c | 52 ++++++++- > >>> 16 files changed, 227 insertions(+), 149 deletions(-) > >>> create mode 100644 drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c > >>> > >>> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > >>> index aa2f0fd95117..717e57205c85 100644 > >>> --- a/drivers/gpu/drm/i915/Makefile > >>> +++ b/drivers/gpu/drm/i915/Makefile > >>> @@ -155,6 +155,7 @@ gem-y += \ > >>> gem/i915_gem_lmem.o \ > >>> gem/i915_gem_mman.o \ > >>> gem/i915_gem_object.o \ > >>> + gem/i915_gem_object_frontbuffer.o \ > >>> gem/i915_gem_pages.o \ > >>> gem/i915_gem_phys.o \ > >>> gem/i915_gem_pm.o \ > >>> diff --git a/drivers/gpu/drm/i915/display/intel_bo.c b/drivers/gpu/drm/i915/display/intel_bo.c > >>> index 2792aca7bc22..f3687eb63467 100644 > >>> --- a/drivers/gpu/drm/i915/display/intel_bo.c > >>> +++ b/drivers/gpu/drm/i915/display/intel_bo.c > >>> @@ -39,20 +39,40 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i > >>> return i915_gem_object_read_from_page(to_intel_bo(obj), offset, dst, size); > >>> } > >>> > >>> -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) > >>> +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *_obj) > >>> { > >>> - return i915_gem_object_get_frontbuffer(to_intel_bo(obj)); > >>> + struct drm_i915_gem_object *obj = to_intel_bo(_obj); > >>> + struct i915_frontbuffer *front; > >>> + > >>> + front = i915_gem_object_frontbuffer_get(obj); > >>> + if (!front) > >>> + return NULL; > >>> + > >>> + return &front->base; > >>> +} > >>> + > >>> +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) > >>> +{ > >>> + struct i915_frontbuffer *front = > >>> + container_of(_front, typeof(*front), base); > >>> + > >>> + i915_gem_object_frontbuffer_ref(front); > >>> } > >>> > >>> -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, > >>> - struct intel_frontbuffer *front) > >>> +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) > >>> { > >>> - return i915_gem_object_set_frontbuffer(to_intel_bo(obj), front); > >>> + struct i915_frontbuffer *front = > >>> + container_of(_front, typeof(*front), base); > >>> + > >>> + return i915_gem_object_frontbuffer_put(front); > >>> } > >>> > >>> -void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) > >>> +void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *_front) > >>> { > >>> - i915_gem_object_flush_if_display(to_intel_bo(front->obj)); > >>> + struct i915_frontbuffer *front = > >>> + container_of(_front, typeof(*front), base); > >>> + > >>> + i915_gem_object_flush_if_display(front->obj); > >>> } > >>> > >>> void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) > >>> diff --git a/drivers/gpu/drm/i915/display/intel_bo.h b/drivers/gpu/drm/i915/display/intel_bo.h > >>> index 08247bf36d40..fc05f680dc76 100644 > >>> --- a/drivers/gpu/drm/i915/display/intel_bo.h > >>> +++ b/drivers/gpu/drm/i915/display/intel_bo.h > >>> @@ -19,9 +19,9 @@ bool intel_bo_is_protected(struct drm_gem_object *obj); > >>> int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma); > >>> int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size); > >>> > >>> -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj); > >>> -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, > >>> - struct intel_frontbuffer *front); > >>> +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj); > >>> +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *front); > >>> +void intel_bo_frontbuffer_put(struct intel_frontbuffer *front); > >>> void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front); > >>> > >>> void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj); > >>> diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h > >>> index 13576d07c999..34d578e2cc25 100644 > >>> --- a/drivers/gpu/drm/i915/display/intel_display_core.h > >>> +++ b/drivers/gpu/drm/i915/display/intel_display_core.h > >>> @@ -141,9 +141,6 @@ struct intel_dpll_global { > >>> }; > >>> > >>> struct intel_frontbuffer_tracking { > >>> - /* protects obj->frontbuffer (write-side) */ > >>> - spinlock_t frontbuffer_lock; > >>> - > >>> /* protects busy_bits */ > >>> spinlock_t lock; > >>> > >>> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c > >>> index ac684f8c5d40..f84a0b26b7a6 100644 > >>> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c > >>> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c > >>> @@ -184,7 +184,6 @@ void intel_display_driver_early_probe(struct intel_display *display) > >>> if (!HAS_DISPLAY(display)) > >>> return; > >>> > >>> - spin_lock_init(&display->fb_tracking.frontbuffer_lock); > >>> spin_lock_init(&display->fb_tracking.lock); > >>> mutex_init(&display->backlight.lock); > >>> mutex_init(&display->audio.mutex); > >>> diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > >>> index 5d627eac07bd..4761e116e442 100644 > >>> --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > >>> +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > >>> @@ -57,8 +57,6 @@ > >>> > >>> #include <drm/drm_gem.h> > >>> > >>> -#include "i915_active.h" > >>> -#include "i915_vma.h" > >>> #include "intel_bo.h" > >>> #include "intel_display_trace.h" > >>> #include "intel_display_types.h" > >>> @@ -167,7 +165,7 @@ void __intel_fb_flush(struct intel_frontbuffer *front, > >>> > >>> static void intel_frontbuffer_ref(struct intel_frontbuffer *front) > >>> { > >>> - kref_get(&front->ref); > >>> + intel_bo_frontbuffer_ref(front); > >>> } > >>> > >>> static void intel_frontbuffer_flush_work(struct work_struct *work) > >>> @@ -196,89 +194,26 @@ void intel_frontbuffer_queue_flush(struct intel_frontbuffer *front) > >>> intel_frontbuffer_put(front); > >>> } > >>> > >>> -static int frontbuffer_active(struct i915_active *ref) > >>> +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm) > >>> { > >>> - struct intel_frontbuffer *front = > >>> - container_of(ref, typeof(*front), write); > >>> - > >>> - kref_get(&front->ref); > >>> - return 0; > >>> -} > >>> - > >>> -static void frontbuffer_retire(struct i915_active *ref) > >>> -{ > >>> - struct intel_frontbuffer *front = > >>> - container_of(ref, typeof(*front), write); > >>> - > >>> - intel_frontbuffer_flush(front, ORIGIN_CS); > >>> - intel_frontbuffer_put(front); > >>> -} > >>> - > >>> -static void frontbuffer_release(struct kref *ref) > >>> - __releases(&front->display->fb_tracking.frontbuffer_lock) > >>> -{ > >>> - struct intel_frontbuffer *ret, *front = > >>> - container_of(ref, typeof(*front), ref); > >>> - struct intel_display *display = front->display; > >>> - struct drm_gem_object *obj = front->obj; > >>> - > >>> - drm_WARN_ON(display->drm, atomic_read(&front->bits)); > >>> - > >>> - i915_ggtt_clear_scanout(to_intel_bo(obj)); > >>> - > >>> - ret = intel_bo_set_frontbuffer(obj, NULL); > >>> - drm_WARN_ON(display->drm, ret); > >>> - spin_unlock(&display->fb_tracking.frontbuffer_lock); > >>> - > >>> - i915_active_fini(&front->write); > >>> - > >>> - drm_gem_object_put(obj); > >>> - kfree_rcu(front, rcu); > >>> -} > >>> - > >>> -struct intel_frontbuffer * > >>> -intel_frontbuffer_get(struct drm_gem_object *obj) > >>> -{ > >>> - struct intel_display *display = to_intel_display(obj->dev); > >>> - struct intel_frontbuffer *front, *cur; > >>> - > >>> - front = intel_bo_get_frontbuffer(obj); > >>> - if (front) > >>> - return front; > >>> - > >>> - front = kmalloc(sizeof(*front), GFP_KERNEL); > >>> - if (!front) > >>> - return NULL; > >>> - > >>> - drm_gem_object_get(obj); > >>> - > >>> - front->obj = obj; > >>> - front->display = display; > >>> - kref_init(&front->ref); > >>> + front->display = to_intel_display(drm); > >>> atomic_set(&front->bits, 0); > >>> - i915_active_init(&front->write, > >>> - frontbuffer_active, > >>> - frontbuffer_retire, > >>> - I915_ACTIVE_RETIRE_SLEEPS); > >>> INIT_WORK(&front->flush_work, intel_frontbuffer_flush_work); > >>> +} > >>> > >>> - spin_lock(&display->fb_tracking.frontbuffer_lock); > >>> - cur = intel_bo_set_frontbuffer(obj, front); > >>> - spin_unlock(&display->fb_tracking.frontbuffer_lock); > >>> +void intel_frontbuffer_fini(struct intel_frontbuffer *front) > >>> +{ > >>> + drm_WARN_ON(front->display->drm, atomic_read(&front->bits)); > >>> +} > >>> > >>> - if (cur != front) { > >>> - drm_gem_object_put(obj); > >>> - kfree(front); > >>> - } > >>> - > >>> - return cur; > >>> +struct intel_frontbuffer *intel_frontbuffer_get(struct drm_gem_object *obj) > >>> +{ > >>> + return intel_bo_frontbuffer_get(obj); > >>> } > >>> > >>> void intel_frontbuffer_put(struct intel_frontbuffer *front) > >>> { > >>> - kref_put_lock(&front->ref, > >>> - frontbuffer_release, > >>> - &front->display->fb_tracking.frontbuffer_lock); > >>> + intel_bo_frontbuffer_put(front); > >>> } > >>> > >>> /** > >>> diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > >>> index ff2a6ac75a34..22677acb4c06 100644 > >>> --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h > >>> +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > >>> @@ -26,10 +26,9 @@ > >>> > >>> #include <linux/atomic.h> > >>> #include <linux/bits.h> > >>> -#include <linux/kref.h> > >>> - > >>> -#include "i915_active_types.h" > >>> +#include <linux/workqueue_types.h> > >>> > >>> +struct drm_device; > >>> struct drm_gem_object; > >>> struct intel_display; > >>> > >>> @@ -42,13 +41,8 @@ enum fb_op_origin { > >>> }; > >>> > >>> struct intel_frontbuffer { > >>> - struct kref ref; > >>> struct intel_display *display; > >>> atomic_t bits; > >>> - struct i915_active write; > >>> - struct drm_gem_object *obj; > >>> - struct rcu_head rcu; > >>> - > >>> struct work_struct flush_work; > >>> }; > >>> > >>> @@ -141,4 +135,7 @@ void intel_frontbuffer_track(struct intel_frontbuffer *old, > >>> struct intel_frontbuffer *new, > >>> unsigned int frontbuffer_bits); > >>> > >>> +void intel_frontbuffer_init(struct intel_frontbuffer *front, struct drm_device *drm); > >>> +void intel_frontbuffer_fini(struct intel_frontbuffer *front); > >>> + > >>> #endif /* __INTEL_FRONTBUFFER_H__ */ > >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c > >>> index 478011e5ecb3..36680eddf88e 100644 > >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c > >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c > >>> @@ -476,24 +476,24 @@ static void i915_gem_free_object(struct drm_gem_object *gem_obj) > >>> void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, > >>> enum fb_op_origin origin) > >>> { > >>> - struct intel_frontbuffer *front; > >>> + struct i915_frontbuffer *front; > >>> > >>> front = i915_gem_object_get_frontbuffer(obj); > >>> if (front) { > >>> - intel_frontbuffer_flush(front, origin); > >>> - intel_frontbuffer_put(front); > >>> + intel_frontbuffer_flush(&front->base, origin); > >>> + i915_gem_object_frontbuffer_put(front); > >>> } > >>> } > >>> > >>> void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, > >>> enum fb_op_origin origin) > >>> { > >>> - struct intel_frontbuffer *front; > >>> + struct i915_frontbuffer *front; > >>> > >>> front = i915_gem_object_get_frontbuffer(obj); > >>> if (front) { > >>> - intel_frontbuffer_invalidate(front, origin); > >>> - intel_frontbuffer_put(front); > >>> + intel_frontbuffer_invalidate(&front->base, origin); > >>> + i915_gem_object_frontbuffer_put(front); > >>> } > >>> } > >>> > >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c > >>> new file mode 100644 > >>> index 000000000000..7ef89613c025 > >>> --- /dev/null > >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c > >>> @@ -0,0 +1,103 @@ > >>> +// SPDX-License-Identifier: MIT > >>> +/* Copyright © 2025 Intel Corporation */ > >>> + > >>> +#include "i915_drv.h" > >>> +#include "i915_gem_object_frontbuffer.h" > >>> + > >>> +static int frontbuffer_active(struct i915_active *ref) > >>> +{ > >>> + struct i915_frontbuffer *front = > >>> + container_of(ref, typeof(*front), write); > >>> + > >>> + kref_get(&front->ref); > >>> + return 0; > >>> +} > >>> + > >>> +static void frontbuffer_retire(struct i915_active *ref) > >>> +{ > >>> + struct i915_frontbuffer *front = > >>> + container_of(ref, typeof(*front), write); > >>> + > >>> + intel_frontbuffer_flush(&front->base, ORIGIN_CS); > >>> + i915_gem_object_frontbuffer_put(front); > >>> +} > >>> + > >>> +struct i915_frontbuffer * > >>> +i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj) > >>> +{ > >>> + struct drm_i915_private *i915 = to_i915(obj->base.dev); > >>> + struct i915_frontbuffer *front, *cur; > >>> + > >>> + front = i915_gem_object_get_frontbuffer(obj); > >>> + if (front) > >>> + return front; > >>> + > >>> + front = kmalloc(sizeof(*front), GFP_KERNEL); > >>> + if (!front) > >>> + return NULL; > >>> + > >>> + intel_frontbuffer_init(&front->base, &i915->drm); > >>> + > >>> + kref_init(&front->ref); > >>> + i915_gem_object_get(obj); > >>> + front->obj = obj; > >>> + > >>> + i915_active_init(&front->write, > >>> + frontbuffer_active, > >>> + frontbuffer_retire, > >>> + I915_ACTIVE_RETIRE_SLEEPS); > >>> + > >>> + spin_lock(&i915->frontbuffer_lock); > >>> + if (rcu_access_pointer(obj->frontbuffer)) { > >>> + cur = rcu_dereference_protected(obj->frontbuffer, true); > >>> + kref_get(&cur->ref); > >>> + } else { > >>> + cur = front; > >>> + rcu_assign_pointer(obj->frontbuffer, front); > >>> + } > >>> + spin_unlock(&i915->frontbuffer_lock); > >>> + > >>> + if (cur != front) { > >>> + i915_gem_object_put(obj); > >>> + intel_frontbuffer_fini(&front->base); > >>> + kfree(front); > >>> + } > >>> + > >>> + return cur; > >>> +} > >>> + > >>> +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front) > >>> +{ > >>> + kref_get(&front->ref); > >>> +} > >>> + > >>> +static void frontbuffer_release(struct kref *ref) > >>> + __releases(&i915->frontbuffer_lock) > >>> +{ > >>> + struct i915_frontbuffer *front = > >>> + container_of(ref, typeof(*front), ref); > >>> + struct drm_i915_gem_object *obj = front->obj; > >>> + struct drm_i915_private *i915 = to_i915(obj->base.dev); > >>> + > >>> + i915_ggtt_clear_scanout(obj); > >>> + > >>> + RCU_INIT_POINTER(obj->frontbuffer, NULL); > >>> + > >>> + spin_unlock(&i915->frontbuffer_lock); > >>> + > >>> + i915_active_fini(&front->write); > >>> + > >>> + i915_gem_object_put(obj); > >>> + > >>> + intel_frontbuffer_fini(&front->base); > >>> + > >>> + kfree_rcu(front, rcu); > >>> +} > >>> + > >>> +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front) > >>> +{ > >>> + struct drm_i915_private *i915 = to_i915(front->obj->base.dev); > >>> + > >>> + kref_put_lock(&front->ref, frontbuffer_release, > >>> + &i915->frontbuffer_lock); > >>> +} > >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > >>> index 1ec382c43aee..385f7e8049b8 100644 > >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > >>> @@ -12,6 +12,14 @@ > >>> #include "display/intel_frontbuffer.h" > >>> #include "i915_gem_object_types.h" > >>> > >>> +struct i915_frontbuffer { > >>> + struct intel_frontbuffer base; > >>> + struct drm_i915_gem_object *obj; > >>> + struct i915_active write; > >>> + struct rcu_head rcu; > >>> + struct kref ref; > >>> +}; > >>> + > >>> void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, > >>> enum fb_op_origin origin); > >>> void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, > >>> @@ -33,6 +41,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, > >>> __i915_gem_object_invalidate_frontbuffer(obj, origin); > >>> } > >>> > >>> +struct i915_frontbuffer *i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj); > >>> +void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front); > >>> +void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); > >>> + > >>> /** > >>> * i915_gem_object_get_frontbuffer - Get the object's frontbuffer > >>> * @obj: The object whose frontbuffer to get. > >>> @@ -42,10 +54,10 @@ i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, > >>> * > >>> * Return: pointer to object's frontbuffer is such exists or NULL > >>> */ > >>> -static inline struct intel_frontbuffer * > >>> +static inline struct i915_frontbuffer * > >>> i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) > >>> { > >>> - struct intel_frontbuffer *front; > >>> + struct i915_frontbuffer *front; > >>> > >>> if (likely(!rcu_access_pointer(obj->frontbuffer))) > >>> return NULL; > >>> @@ -62,41 +74,11 @@ i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) > >>> if (likely(front == rcu_access_pointer(obj->frontbuffer))) > >>> break; > >>> > >>> - intel_frontbuffer_put(front); > >>> + i915_gem_object_frontbuffer_put(front); > >>> } while (1); > >>> rcu_read_unlock(); > >>> > >>> return front; > >>> } > >>> > >>> -/** > >>> - * i915_gem_object_set_frontbuffer - Set the object's frontbuffer > >>> - * @obj: The object whose frontbuffer to set. > >>> - * @front: The frontbuffer to set > >>> - * > >>> - * Set object's frontbuffer pointer. If frontbuffer is already set for the > >>> - * object keep it and return it's pointer to the caller. Please note that RCU > >>> - * mechanism is used to handle e.g. ongoing removal of frontbuffer pointer. This > >>> - * function is protected by i915->display->fb_tracking.frontbuffer_lock > >>> - * > >>> - * Return: pointer to frontbuffer which was set. > >>> - */ > >>> -static inline struct intel_frontbuffer * > >>> -i915_gem_object_set_frontbuffer(struct drm_i915_gem_object *obj, > >>> - struct intel_frontbuffer *front) > >>> -{ > >>> - struct intel_frontbuffer *cur = front; > >>> - > >>> - if (!front) { > >>> - RCU_INIT_POINTER(obj->frontbuffer, NULL); > >>> - } else if (rcu_access_pointer(obj->frontbuffer)) { > >>> - cur = rcu_dereference_protected(obj->frontbuffer, true); > >>> - kref_get(&cur->ref); > >>> - } else { > >>> - rcu_assign_pointer(obj->frontbuffer, front); > >>> - } > >>> - > >>> - return cur; > >>> -} > >>> - > >>> #endif > >>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > >>> index 64600aa8227f..465ce94aee76 100644 > >>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > >>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h > >>> @@ -574,7 +574,7 @@ struct drm_i915_gem_object { > >>> */ > >>> u16 write_domain; > >>> > >>> - struct intel_frontbuffer __rcu *frontbuffer; > >>> + struct i915_frontbuffer __rcu *frontbuffer; > >>> > >>> /** Current tiling stride for the object, if it's tiled. */ > >>> unsigned int tiling_and_stride; > >>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > >>> index 95f9ddf22ce4..5381a934a671 100644 > >>> --- a/drivers/gpu/drm/i915/i915_drv.h > >>> +++ b/drivers/gpu/drm/i915/i915_drv.h > >>> @@ -311,6 +311,8 @@ struct drm_i915_private { > >>> struct file *mmap_singleton; > >>> } gem; > >>> > >>> + spinlock_t frontbuffer_lock; /* protects obj->frontbuffer (write-side) */ > >>> + > >>> struct intel_pxp *pxp; > >>> > >>> struct i915_pmu pmu; > >>> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > >>> index e14a0c3db999..39b747c3e223 100644 > >>> --- a/drivers/gpu/drm/i915/i915_gem.c > >>> +++ b/drivers/gpu/drm/i915/i915_gem.c > >>> @@ -1298,6 +1298,8 @@ void i915_gem_init_early(struct drm_i915_private *dev_priv) > >>> { > >>> i915_gem_init__mm(dev_priv); > >>> i915_gem_init__contexts(dev_priv); > >>> + > >>> + spin_lock_init(&dev_priv->frontbuffer_lock); > >>> } > >>> > >>> void i915_gem_cleanup_early(struct drm_i915_private *dev_priv) > >>> diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c > >>> index 25e97031d76e..cb36daaa101d 100644 > >>> --- a/drivers/gpu/drm/i915/i915_vma.c > >>> +++ b/drivers/gpu/drm/i915/i915_vma.c > >>> @@ -1990,13 +1990,13 @@ int _i915_vma_move_to_active(struct i915_vma *vma, > >>> } > >>> > >>> if (flags & EXEC_OBJECT_WRITE) { > >>> - struct intel_frontbuffer *front; > >>> + struct i915_frontbuffer *front; > >>> > >>> front = i915_gem_object_get_frontbuffer(obj); > >>> if (unlikely(front)) { > >>> - if (intel_frontbuffer_invalidate(front, ORIGIN_CS)) > >>> + if (intel_frontbuffer_invalidate(&front->base, ORIGIN_CS)) > >>> i915_active_add_request(&front->write, rq); > >>> - intel_frontbuffer_put(front); > >>> + i915_gem_object_frontbuffer_put(front); > >>> } > >>> } > >>> > >>> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h > >>> index 4465c40f8134..b17e3bab23d5 100644 > >>> --- a/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h > >>> +++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h > >>> @@ -26,8 +26,6 @@ struct i915_vma { > >>> struct xe_ggtt_node *node; > >>> }; > >>> > >>> -#define i915_ggtt_clear_scanout(bo) do { } while (0) > >>> - > >>> #define i915_vma_fence_id(vma) -1 > >>> > >>> static inline u32 i915_ggtt_offset(const struct i915_vma *vma) > >>> diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/intel_bo.c > >>> index 2437c00a2d3e..bad2243b9114 100644 > >>> --- a/drivers/gpu/drm/xe/display/intel_bo.c > >>> +++ b/drivers/gpu/drm/xe/display/intel_bo.c > >>> @@ -5,6 +5,7 @@ > >>> > >>> #include "xe_bo.h" > >>> #include "intel_bo.h" > >>> +#include "intel_frontbuffer.h" > >>> > >>> bool intel_bo_is_tiled(struct drm_gem_object *obj) > >>> { > >>> @@ -40,15 +41,56 @@ int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, i > >>> return xe_bo_read(bo, offset, dst, size); > >>> } > >>> > >>> -struct intel_frontbuffer *intel_bo_get_frontbuffer(struct drm_gem_object *obj) > >>> +struct xe_frontbuffer { > >>> + struct intel_frontbuffer base; > >>> + struct drm_gem_object *obj; > >>> + struct kref ref; > >>> +}; > >>> + > >>> +struct intel_frontbuffer *intel_bo_frontbuffer_get(struct drm_gem_object *obj) > >>> { > >>> - return NULL; > >>> + struct xe_frontbuffer *front; > >>> + > >>> + front = kmalloc(sizeof(*front), GFP_KERNEL); > >>> + if (!front) > >>> + return NULL; > >>> + > >>> + intel_frontbuffer_init(&front->base, obj->dev); > >>> + > >>> + kref_init(&front->ref); > >>> + > >>> + drm_gem_object_get(obj); > >>> + front->obj = obj; > >>> + > >>> + return &front->base; > >>> } > >>> > >>> -struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj, > >>> - struct intel_frontbuffer *front) > >>> +void intel_bo_frontbuffer_ref(struct intel_frontbuffer *_front) > >>> { > >>> - return front; > >>> + struct xe_frontbuffer *front = > >>> + container_of(_front, typeof(*front), base); > >>> + > >>> + kref_get(&front->ref); > >>> +} > >>> + > >>> +static void frontbuffer_release(struct kref *ref) > >>> +{ > >>> + struct xe_frontbuffer *front = > >>> + container_of(ref, typeof(*front), ref); > >>> + > >>> + intel_frontbuffer_fini(&front->base); > >>> + > >>> + drm_gem_object_put(front->obj); > >>> + > >>> + kfree(front); > >>> +} > >>> + > >>> +void intel_bo_frontbuffer_put(struct intel_frontbuffer *_front) > >>> +{ > >>> + struct xe_frontbuffer *front = > >>> + container_of(_front, typeof(*front), base); > >>> + > >>> + kref_put(&front->ref, frontbuffer_release); > >>> } > >>> > >>> void intel_bo_frontbuffer_flush_for_display(struct intel_frontbuffer *front) > > -- > Jani Nikula, Intel -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling 2025-11-06 14:27 ` Ville Syrjälä @ 2025-11-07 18:45 ` Ville Syrjälä 0 siblings, 0 replies; 27+ messages in thread From: Ville Syrjälä @ 2025-11-07 18:45 UTC (permalink / raw) To: Jani Nikula; +Cc: intel-gfx, intel-xe On Thu, Nov 06, 2025 at 04:27:42PM +0200, Ville Syrjälä wrote: > On Thu, Nov 06, 2025 at 03:48:25PM +0200, Jani Nikula wrote: > > On Wed, 29 Oct 2025, Jani Nikula <jani.nikula@intel.com> wrote: > > > On Wed, 29 Oct 2025, Jani Nikula <jani.nikula@intel.com> wrote: > > >> On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > > >>> From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > >>> > > >>> The current attempted split between xe/i915 vs. display > > >>> for intel_frontbuffer is a mess: > > >>> - the i915 rcu leaks through the interface to the display side > > >>> - the obj->frontbuffer write-side is now protected by a display > > >>> specific spinlock even though the actual obj->framebuffer > > >>> pointer lives in a i915 specific structure > > >>> - the kref is getting poked directly from both sides > > >>> - i915_active is still on the display side > > >>> > > >>> Clean up the mess by moving everything about the frontbuffer > > >>> lifetime management to the i915/xe side: > > >>> - the rcu usage is now completely contained in i915 > > >>> - frontbuffer_lock is moved into i915 > > >>> - kref is on the i915/xe side (xe needs the refcount as well > > >>> due to intel_frontbuffer_queue_flush()->intel_frontbuffer_ref()) > > >>> - the bo (and its refcounting) is no longer on the display side > > >>> - i915_active is contained in i915 > > >>> > > >>> I was pondering whether we could do this in some kind of smaller > > >>> steps, and perhaps we could, but it would probably have to start > > >>> with a bunch of reverts (which for sure won't go cleanly anymore). > > >>> So not convinced it's worth the hassle. > > >> > > >> It's a PITA to review, that's for sure. :p > > >> > > >> I'm not particularly fond of embedding struct intel_frontbuffer inside > > >> struct i915_frontbuffer and struct xe_frontbuffer, because it means i915 > > >> and xe will need to know the struct intel_frontbuffer definition. If we > > >> can't live with the embedding long term, we'll probably need opaque > > >> pointers back and forth. > > >> > > >> That said, I think the overall change here is net positive, and makes > > >> life much easier. We don't have to fix everything at once, so let's go > > >> with this. > > >> > > >> I didn't spot any obvious issues, but my confidence level with the > > >> review is super low. :( > > >> > > >> I guess the alternatives are to just go with that, trusting CI, or give > > >> me more time to review. I'm fine either way, as I can trust you to step > > >> up if it goes crashing down. ;) > > > > > > One approach is to send 1-8 first, get CI, get them merged, and then do > > > 9-10 separately, to get separate CI. Maybe? *shrug* > > > > Any conclusions on this? Just merge the whole thing as-is rather than > > let it go stale...? > > I think we could just merge as is. Pretty sure I didn't have any > real functional changes in there. Merged the whole thing. Thanks for the review. -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2 10/10] drm/i915/gem: s/i915_gem_object_get_frontbuffer/i915_gem_object_frontbuffer_lookup/ 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala ` (8 preceding siblings ...) 2025-10-16 18:54 ` [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling Ville Syrjala @ 2025-10-16 18:54 ` Ville Syrjala 2025-10-29 13:37 ` Jani Nikula 2025-10-16 21:49 ` ✓ i915.CI.BAT: success for drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess (rev2) Patchwork 2025-10-17 8:34 ` ✗ i915.CI.Full: failure " Patchwork 11 siblings, 1 reply; 27+ messages in thread From: Ville Syrjala @ 2025-10-16 18:54 UTC (permalink / raw) To: intel-gfx; +Cc: intel-xe, Jani Nikula From: Ville Syrjälä <ville.syrjala@linux.intel.com> The i915_gem_object_get_frontbuffer() name is rather confusing wrt. intel_frontbuffer_get(). Rename to i915_gem_object_frontbuffer_lookup() to make things less confusing. Acked-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> --- drivers/gpu/drm/i915/gem/i915_gem_object.c | 4 ++-- drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h | 6 +++--- drivers/gpu/drm/i915/i915_vma.c | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c index 36680eddf88e..828936e603a6 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c @@ -478,7 +478,7 @@ void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, { struct i915_frontbuffer *front; - front = i915_gem_object_get_frontbuffer(obj); + front = i915_gem_object_frontbuffer_lookup(obj); if (front) { intel_frontbuffer_flush(&front->base, origin); i915_gem_object_frontbuffer_put(front); @@ -490,7 +490,7 @@ void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, { struct i915_frontbuffer *front; - front = i915_gem_object_get_frontbuffer(obj); + front = i915_gem_object_frontbuffer_lookup(obj); if (front) { intel_frontbuffer_invalidate(&front->base, origin); i915_gem_object_frontbuffer_put(front); diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c index 7ef89613c025..aaa15e7b3f17 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c @@ -28,7 +28,7 @@ i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj) struct drm_i915_private *i915 = to_i915(obj->base.dev); struct i915_frontbuffer *front, *cur; - front = i915_gem_object_get_frontbuffer(obj); + front = i915_gem_object_frontbuffer_lookup(obj); if (front) return front; diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h index 385f7e8049b8..2133e29047c5 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h @@ -46,8 +46,8 @@ void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front); void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); /** - * i915_gem_object_get_frontbuffer - Get the object's frontbuffer - * @obj: The object whose frontbuffer to get. + * i915_gem_object_frontbuffer_lookup - Look up the object's frontbuffer + * @obj: The object whose frontbuffer to look up. * * Get pointer to object's frontbuffer if such exists. Please note that RCU * mechanism is used to handle e.g. ongoing removal of frontbuffer pointer. @@ -55,7 +55,7 @@ void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); * Return: pointer to object's frontbuffer is such exists or NULL */ static inline struct i915_frontbuffer * -i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) +i915_gem_object_frontbuffer_lookup(const struct drm_i915_gem_object *obj) { struct i915_frontbuffer *front; diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c index cb36daaa101d..6888d3f4557b 100644 --- a/drivers/gpu/drm/i915/i915_vma.c +++ b/drivers/gpu/drm/i915/i915_vma.c @@ -1992,7 +1992,7 @@ int _i915_vma_move_to_active(struct i915_vma *vma, if (flags & EXEC_OBJECT_WRITE) { struct i915_frontbuffer *front; - front = i915_gem_object_get_frontbuffer(obj); + front = i915_gem_object_frontbuffer_lookup(obj); if (unlikely(front)) { if (intel_frontbuffer_invalidate(&front->base, ORIGIN_CS)) i915_active_add_request(&front->write, rq); -- 2.49.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v2 10/10] drm/i915/gem: s/i915_gem_object_get_frontbuffer/i915_gem_object_frontbuffer_lookup/ 2025-10-16 18:54 ` [PATCH v2 10/10] drm/i915/gem: s/i915_gem_object_get_frontbuffer/i915_gem_object_frontbuffer_lookup/ Ville Syrjala @ 2025-10-29 13:37 ` Jani Nikula 0 siblings, 0 replies; 27+ messages in thread From: Jani Nikula @ 2025-10-29 13:37 UTC (permalink / raw) To: Ville Syrjala, intel-gfx; +Cc: intel-xe On Thu, 16 Oct 2025, Ville Syrjala <ville.syrjala@linux.intel.com> wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > The i915_gem_object_get_frontbuffer() name is rather confusing wrt. > intel_frontbuffer_get(). Rename to i915_gem_object_frontbuffer_lookup() > to make things less confusing. > > Acked-by: Jani Nikula <jani.nikula@intel.com> Upgrade to Reviewed-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > drivers/gpu/drm/i915/gem/i915_gem_object.c | 4 ++-- > drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c | 2 +- > drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h | 6 +++--- > drivers/gpu/drm/i915/i915_vma.c | 2 +- > 4 files changed, 7 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c > index 36680eddf88e..828936e603a6 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c > @@ -478,7 +478,7 @@ void __i915_gem_object_flush_frontbuffer(struct drm_i915_gem_object *obj, > { > struct i915_frontbuffer *front; > > - front = i915_gem_object_get_frontbuffer(obj); > + front = i915_gem_object_frontbuffer_lookup(obj); > if (front) { > intel_frontbuffer_flush(&front->base, origin); > i915_gem_object_frontbuffer_put(front); > @@ -490,7 +490,7 @@ void __i915_gem_object_invalidate_frontbuffer(struct drm_i915_gem_object *obj, > { > struct i915_frontbuffer *front; > > - front = i915_gem_object_get_frontbuffer(obj); > + front = i915_gem_object_frontbuffer_lookup(obj); > if (front) { > intel_frontbuffer_invalidate(&front->base, origin); > i915_gem_object_frontbuffer_put(front); > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c > index 7ef89613c025..aaa15e7b3f17 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.c > @@ -28,7 +28,7 @@ i915_gem_object_frontbuffer_get(struct drm_i915_gem_object *obj) > struct drm_i915_private *i915 = to_i915(obj->base.dev); > struct i915_frontbuffer *front, *cur; > > - front = i915_gem_object_get_frontbuffer(obj); > + front = i915_gem_object_frontbuffer_lookup(obj); > if (front) > return front; > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > index 385f7e8049b8..2133e29047c5 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h > @@ -46,8 +46,8 @@ void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front); > void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); > > /** > - * i915_gem_object_get_frontbuffer - Get the object's frontbuffer > - * @obj: The object whose frontbuffer to get. > + * i915_gem_object_frontbuffer_lookup - Look up the object's frontbuffer > + * @obj: The object whose frontbuffer to look up. > * > * Get pointer to object's frontbuffer if such exists. Please note that RCU > * mechanism is used to handle e.g. ongoing removal of frontbuffer pointer. > @@ -55,7 +55,7 @@ void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); > * Return: pointer to object's frontbuffer is such exists or NULL > */ > static inline struct i915_frontbuffer * > -i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj) > +i915_gem_object_frontbuffer_lookup(const struct drm_i915_gem_object *obj) > { > struct i915_frontbuffer *front; > > diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c > index cb36daaa101d..6888d3f4557b 100644 > --- a/drivers/gpu/drm/i915/i915_vma.c > +++ b/drivers/gpu/drm/i915/i915_vma.c > @@ -1992,7 +1992,7 @@ int _i915_vma_move_to_active(struct i915_vma *vma, > if (flags & EXEC_OBJECT_WRITE) { > struct i915_frontbuffer *front; > > - front = i915_gem_object_get_frontbuffer(obj); > + front = i915_gem_object_frontbuffer_lookup(obj); > if (unlikely(front)) { > if (intel_frontbuffer_invalidate(&front->base, ORIGIN_CS)) > i915_active_add_request(&front->write, rq); -- Jani Nikula, Intel ^ permalink raw reply [flat|nested] 27+ messages in thread
* ✓ i915.CI.BAT: success for drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess (rev2) 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala ` (9 preceding siblings ...) 2025-10-16 18:54 ` [PATCH v2 10/10] drm/i915/gem: s/i915_gem_object_get_frontbuffer/i915_gem_object_frontbuffer_lookup/ Ville Syrjala @ 2025-10-16 21:49 ` Patchwork 2025-10-17 8:34 ` ✗ i915.CI.Full: failure " Patchwork 11 siblings, 0 replies; 27+ messages in thread From: Patchwork @ 2025-10-16 21:49 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 1016 bytes --] == Series Details == Series: drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess (rev2) URL : https://patchwork.freedesktop.org/series/155472/ State : success == Summary == CI Bug Log - changes from CI_DRM_17377 -> Patchwork_155472v2 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/index.html Participating hosts (41 -> 40) ------------------------------ Missing (1): fi-snb-2520m Changes ------- No changes found Build changes ------------- * Linux: CI_DRM_17377 -> Patchwork_155472v2 CI-20190529: 20190529 CI_DRM_17377: 1f32baee68e7a3010d6092c3303516354f7b2298 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_8588: 8588 Patchwork_155472v2: 1f32baee68e7a3010d6092c3303516354f7b2298 @ git://anongit.freedesktop.org/gfx-ci/linux == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/index.html [-- Attachment #2: Type: text/html, Size: 1581 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
* ✗ i915.CI.Full: failure for drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess (rev2) 2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala ` (10 preceding siblings ...) 2025-10-16 21:49 ` ✓ i915.CI.BAT: success for drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess (rev2) Patchwork @ 2025-10-17 8:34 ` Patchwork 11 siblings, 0 replies; 27+ messages in thread From: Patchwork @ 2025-10-17 8:34 UTC (permalink / raw) To: Ville Syrjälä; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 157283 bytes --] == Series Details == Series: drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess (rev2) URL : https://patchwork.freedesktop.org/series/155472/ State : failure == Summary == CI Bug Log - changes from CI_DRM_17377_full -> Patchwork_155472v2_full ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with Patchwork_155472v2_full absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_155472v2_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them to document this new failure mode, which will reduce false positives in CI. Participating hosts (11 -> 11) ------------------------------ No changes in participating hosts Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_155472v2_full: ### IGT changes ### #### Possible regressions #### * igt@kms_async_flips@async-flip-with-page-flip-events-tiled-atomic@pipe-b-hdmi-a-2-y: - shard-rkl: [PASS][1] -> [DMESG-WARN][2] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_async_flips@async-flip-with-page-flip-events-tiled-atomic@pipe-b-hdmi-a-2-y.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_async_flips@async-flip-with-page-flip-events-tiled-atomic@pipe-b-hdmi-a-2-y.html New tests --------- New tests have been introduced between CI_DRM_17377_full and Patchwork_155472v2_full: ### New IGT tests (3) ### * igt@kms_invalid_mode@int-max-clock@pipe-d-hdmi-a-2: - Statuses : 1 pass(s) - Exec time: [0.00] s * igt@kms_vblank@crtc-id@pipe-d-hdmi-a-2: - Statuses : 1 pass(s) - Exec time: [0.24] s * igt@kms_vblank@wait-busy@pipe-d-hdmi-a-2: - Statuses : 1 pass(s) - Exec time: [2.34] s Known issues ------------ Here are the changes found in Patchwork_155472v2_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@api_intel_bb@crc32: - shard-tglu: NOTRUN -> [SKIP][3] ([i915#6230]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@api_intel_bb@crc32.html * igt@api_intel_bb@object-reloc-keep-cache: - shard-dg2: NOTRUN -> [SKIP][4] ([i915#8411]) +1 other test skip [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@api_intel_bb@object-reloc-keep-cache.html * igt@drm_buddy@drm_buddy: - shard-tglu: NOTRUN -> [DMESG-WARN][5] ([i915#15095]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@drm_buddy@drm_buddy.html * igt@gem_basic@multigpu-create-close: - shard-tglu-1: NOTRUN -> [SKIP][6] ([i915#7697]) [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@gem_basic@multigpu-create-close.html * igt@gem_busy@semaphore: - shard-dg2-9: NOTRUN -> [SKIP][7] ([i915#3936]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_busy@semaphore.html * igt@gem_ccs@ctrl-surf-copy: - shard-tglu-1: NOTRUN -> [SKIP][8] ([i915#3555] / [i915#9323]) [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@gem_ccs@ctrl-surf-copy.html * igt@gem_ccs@suspend-resume: - shard-tglu-1: NOTRUN -> [SKIP][9] ([i915#9323]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@gem_ccs@suspend-resume.html * igt@gem_ctx_isolation@preservation-s3@bcs0: - shard-glk: NOTRUN -> [INCOMPLETE][10] ([i915#12353]) +1 other test incomplete [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk1/igt@gem_ctx_isolation@preservation-s3@bcs0.html * igt@gem_ctx_isolation@preservation@rcs0: - shard-rkl: [PASS][11] -> [DMESG-WARN][12] ([i915#12964]) +5 other tests dmesg-warn [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@gem_ctx_isolation@preservation@rcs0.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_ctx_isolation@preservation@rcs0.html * igt@gem_ctx_persistence@heartbeat-many: - shard-dg2: NOTRUN -> [SKIP][13] ([i915#8555]) [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@gem_ctx_persistence@heartbeat-many.html * igt@gem_ctx_sseu@engines: - shard-dg2: NOTRUN -> [SKIP][14] ([i915#280]) [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@gem_ctx_sseu@engines.html * igt@gem_eio@kms: - shard-tglu: NOTRUN -> [DMESG-WARN][15] ([i915#13363]) [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@gem_eio@kms.html * igt@gem_exec_balancer@bonded-dual: - shard-dg2-9: NOTRUN -> [SKIP][16] ([i915#4771]) [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_exec_balancer@bonded-dual.html * igt@gem_exec_balancer@bonded-sync: - shard-dg2: NOTRUN -> [SKIP][17] ([i915#4771]) [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@gem_exec_balancer@bonded-sync.html * igt@gem_exec_balancer@bonded-true-hang: - shard-dg2: NOTRUN -> [SKIP][18] ([i915#4812]) [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@gem_exec_balancer@bonded-true-hang.html * igt@gem_exec_balancer@invalid-bonds: - shard-dg2-9: NOTRUN -> [SKIP][19] ([i915#4036]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_exec_balancer@invalid-bonds.html * igt@gem_exec_balancer@parallel: - shard-tglu: NOTRUN -> [SKIP][20] ([i915#4525]) [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@gem_exec_balancer@parallel.html * igt@gem_exec_balancer@parallel-contexts: - shard-rkl: NOTRUN -> [SKIP][21] ([i915#14544] / [i915#4525]) [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_exec_balancer@parallel-contexts.html * igt@gem_exec_capture@capture-invisible@smem0: - shard-rkl: NOTRUN -> [SKIP][22] ([i915#6334]) +1 other test skip [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@gem_exec_capture@capture-invisible@smem0.html * igt@gem_exec_fence@concurrent: - shard-dg2-9: NOTRUN -> [SKIP][23] ([i915#4812]) +1 other test skip [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_exec_fence@concurrent.html * igt@gem_exec_flush@basic-batch-kernel-default-cmd: - shard-dg2: NOTRUN -> [SKIP][24] ([i915#3539] / [i915#4852]) +1 other test skip [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@gem_exec_flush@basic-batch-kernel-default-cmd.html * igt@gem_exec_flush@basic-batch-kernel-default-wb: - shard-dg2-9: NOTRUN -> [SKIP][25] ([i915#3539] / [i915#4852]) [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_exec_flush@basic-batch-kernel-default-wb.html * igt@gem_exec_reloc@basic-gtt-read: - shard-dg2: NOTRUN -> [SKIP][26] ([i915#3281]) +6 other tests skip [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@gem_exec_reloc@basic-gtt-read.html * igt@gem_exec_reloc@basic-wc: - shard-rkl: NOTRUN -> [SKIP][27] ([i915#3281]) +3 other tests skip [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@gem_exec_reloc@basic-wc.html * igt@gem_exec_reloc@basic-wc-gtt-noreloc: - shard-dg2-9: NOTRUN -> [SKIP][28] ([i915#3281]) +5 other tests skip [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_exec_reloc@basic-wc-gtt-noreloc.html * igt@gem_exec_reloc@basic-write-gtt-noreloc: - shard-rkl: NOTRUN -> [SKIP][29] ([i915#14544] / [i915#3281]) [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_exec_reloc@basic-write-gtt-noreloc.html * igt@gem_exec_schedule@preempt-queue-contexts: - shard-dg2: NOTRUN -> [SKIP][30] ([i915#4537] / [i915#4812]) [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@gem_exec_schedule@preempt-queue-contexts.html * igt@gem_fence_thrash@bo-write-verify-y: - shard-dg2-9: NOTRUN -> [SKIP][31] ([i915#4860]) [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_fence_thrash@bo-write-verify-y.html * igt@gem_fenced_exec_thrash@2-spare-fences: - shard-dg2: NOTRUN -> [SKIP][32] ([i915#4860]) +2 other tests skip [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@gem_fenced_exec_thrash@2-spare-fences.html * igt@gem_lmem_swapping@heavy-random: - shard-tglu: NOTRUN -> [SKIP][33] ([i915#4613]) +3 other tests skip [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@gem_lmem_swapping@heavy-random.html * igt@gem_lmem_swapping@parallel-multi: - shard-tglu-1: NOTRUN -> [SKIP][34] ([i915#4613]) +2 other tests skip [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@gem_lmem_swapping@parallel-multi.html * igt@gem_lmem_swapping@parallel-random-verify-ccs: - shard-rkl: NOTRUN -> [SKIP][35] ([i915#14544] / [i915#4613]) [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_lmem_swapping@parallel-random-verify-ccs.html * igt@gem_lmem_swapping@random-engines: - shard-glk: NOTRUN -> [SKIP][36] ([i915#4613]) +5 other tests skip [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk1/igt@gem_lmem_swapping@random-engines.html * igt@gem_lmem_swapping@verify-ccs: - shard-rkl: NOTRUN -> [SKIP][37] ([i915#4613]) +1 other test skip [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@gem_lmem_swapping@verify-ccs.html * igt@gem_mmap@big-bo: - shard-mtlp: NOTRUN -> [SKIP][38] ([i915#4083]) [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-mtlp-6/igt@gem_mmap@big-bo.html * igt@gem_mmap_gtt@cpuset-basic-small-copy: - shard-dg1: NOTRUN -> [SKIP][39] ([i915#4077]) [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-12/igt@gem_mmap_gtt@cpuset-basic-small-copy.html * igt@gem_mmap_gtt@fault-concurrent: - shard-mtlp: NOTRUN -> [SKIP][40] ([i915#4077]) +1 other test skip [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-mtlp-6/igt@gem_mmap_gtt@fault-concurrent.html * igt@gem_mmap_gtt@pf-nonblock: - shard-dg2-9: NOTRUN -> [SKIP][41] ([i915#4077]) +9 other tests skip [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_mmap_gtt@pf-nonblock.html * igt@gem_mmap_offset@clear-via-pagefault: - shard-mtlp: [PASS][42] -> [ABORT][43] ([i915#14809]) +1 other test abort [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-mtlp-6/igt@gem_mmap_offset@clear-via-pagefault.html [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-mtlp-2/igt@gem_mmap_offset@clear-via-pagefault.html * igt@gem_mmap_wc@bad-object: - shard-dg2: NOTRUN -> [SKIP][44] ([i915#4083]) +3 other tests skip [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@gem_mmap_wc@bad-object.html * igt@gem_mmap_wc@bad-offset: - shard-dg2-9: NOTRUN -> [SKIP][45] ([i915#4083]) +1 other test skip [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_mmap_wc@bad-offset.html * igt@gem_partial_pwrite_pread@reads: - shard-dg2: NOTRUN -> [SKIP][46] ([i915#3282]) +5 other tests skip [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@gem_partial_pwrite_pread@reads.html * igt@gem_partial_pwrite_pread@write: - shard-dg2-9: NOTRUN -> [SKIP][47] ([i915#3282]) +3 other tests skip [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_partial_pwrite_pread@write.html * igt@gem_partial_pwrite_pread@write-snoop: - shard-rkl: NOTRUN -> [SKIP][48] ([i915#3282]) +1 other test skip [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@gem_partial_pwrite_pread@write-snoop.html * igt@gem_partial_pwrite_pread@writes-after-reads-snoop: - shard-mtlp: NOTRUN -> [SKIP][49] ([i915#3282]) [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-mtlp-6/igt@gem_partial_pwrite_pread@writes-after-reads-snoop.html * igt@gem_pwrite@basic-exhaustion: - shard-rkl: NOTRUN -> [SKIP][50] ([i915#14544] / [i915#3282]) [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_pwrite@basic-exhaustion.html * igt@gem_pxp@create-regular-context-2: - shard-rkl: NOTRUN -> [SKIP][51] ([i915#4270]) [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@gem_pxp@create-regular-context-2.html * igt@gem_pxp@fail-invalid-protected-context: - shard-dg2-9: NOTRUN -> [SKIP][52] ([i915#4270]) +2 other tests skip [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_pxp@fail-invalid-protected-context.html * igt@gem_pxp@hw-rejects-pxp-context: - shard-rkl: NOTRUN -> [TIMEOUT][53] ([i915#12917] / [i915#12964]) +1 other test timeout [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@gem_pxp@hw-rejects-pxp-context.html * igt@gem_pxp@protected-encrypted-src-copy-not-readible: - shard-rkl: [PASS][54] -> [TIMEOUT][55] ([i915#12917] / [i915#12964]) [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@gem_pxp@protected-encrypted-src-copy-not-readible.html [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-4/igt@gem_pxp@protected-encrypted-src-copy-not-readible.html * igt@gem_pxp@verify-pxp-key-change-after-suspend-resume: - shard-dg2: NOTRUN -> [SKIP][56] ([i915#4270]) [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@gem_pxp@verify-pxp-key-change-after-suspend-resume.html * igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs: - shard-glk: NOTRUN -> [SKIP][57] +246 other tests skip [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk9/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs.html * igt@gem_render_copy@y-tiled-to-vebox-x-tiled: - shard-dg2-9: NOTRUN -> [SKIP][58] ([i915#5190] / [i915#8428]) +2 other tests skip [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_render_copy@y-tiled-to-vebox-x-tiled.html * igt@gem_render_copy@yf-tiled-to-vebox-y-tiled: - shard-dg2: NOTRUN -> [SKIP][59] ([i915#5190] / [i915#8428]) +6 other tests skip [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@gem_render_copy@yf-tiled-to-vebox-y-tiled.html * igt@gem_set_tiling_vs_blt@untiled-to-tiled: - shard-dg2: NOTRUN -> [SKIP][60] ([i915#4079]) [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html * igt@gem_softpin@evict-snoop-interruptible: - shard-dg2: NOTRUN -> [SKIP][61] ([i915#4885]) [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@gem_softpin@evict-snoop-interruptible.html * igt@gem_sync@basic-each: - shard-rkl: NOTRUN -> [DMESG-WARN][62] ([i915#12964]) +3 other tests dmesg-warn [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_sync@basic-each.html * igt@gem_unfence_active_buffers: - shard-dg2: NOTRUN -> [SKIP][63] ([i915#4879]) [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@gem_unfence_active_buffers.html * igt@gem_userptr_blits@coherency-sync: - shard-dg2: NOTRUN -> [SKIP][64] ([i915#3297]) [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@gem_userptr_blits@coherency-sync.html * igt@gem_userptr_blits@dmabuf-unsync: - shard-snb: NOTRUN -> [SKIP][65] +26 other tests skip [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-snb4/igt@gem_userptr_blits@dmabuf-unsync.html - shard-tglu-1: NOTRUN -> [SKIP][66] ([i915#3297]) +1 other test skip [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@gem_userptr_blits@dmabuf-unsync.html * igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy: - shard-dg2: NOTRUN -> [SKIP][67] ([i915#3297] / [i915#4880]) [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@gem_userptr_blits@map-fixed-invalidate-overlap-busy.html * igt@gem_userptr_blits@unsync-unmap: - shard-dg2-9: NOTRUN -> [SKIP][68] ([i915#3297]) +1 other test skip [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gem_userptr_blits@unsync-unmap.html - shard-tglu: NOTRUN -> [SKIP][69] ([i915#3297]) [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@gem_userptr_blits@unsync-unmap.html * igt@gem_workarounds@suspend-resume-context: - shard-glk: NOTRUN -> [INCOMPLETE][70] ([i915#13356]) [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk6/igt@gem_workarounds@suspend-resume-context.html - shard-rkl: [PASS][71] -> [INCOMPLETE][72] ([i915#13356]) [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@gem_workarounds@suspend-resume-context.html [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-3/igt@gem_workarounds@suspend-resume-context.html * igt@gen9_exec_parse@allowed-single: - shard-dg1: NOTRUN -> [SKIP][73] ([i915#2527]) [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-12/igt@gen9_exec_parse@allowed-single.html * igt@gen9_exec_parse@basic-rejected-ctx-param: - shard-tglu: NOTRUN -> [SKIP][74] ([i915#2527] / [i915#2856]) +1 other test skip [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@gen9_exec_parse@basic-rejected-ctx-param.html - shard-dg2-9: NOTRUN -> [SKIP][75] ([i915#2856]) +2 other tests skip [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@gen9_exec_parse@basic-rejected-ctx-param.html * igt@gen9_exec_parse@bb-chained: - shard-tglu-1: NOTRUN -> [SKIP][76] ([i915#2527] / [i915#2856]) +1 other test skip [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@gen9_exec_parse@bb-chained.html * igt@gen9_exec_parse@bb-start-param: - shard-dg2: NOTRUN -> [SKIP][77] ([i915#2856]) +3 other tests skip [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@gen9_exec_parse@bb-start-param.html * igt@gen9_exec_parse@unaligned-access: - shard-rkl: NOTRUN -> [SKIP][78] ([i915#2527]) [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@gen9_exec_parse@unaligned-access.html * igt@i915_drm_fdinfo@busy-hang@vcs0: - shard-dg2: NOTRUN -> [SKIP][79] ([i915#14073]) +7 other tests skip [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@i915_drm_fdinfo@busy-hang@vcs0.html * igt@i915_drm_fdinfo@busy-idle-check-all@vcs0: - shard-dg2: NOTRUN -> [SKIP][80] ([i915#11527]) +7 other tests skip [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@i915_drm_fdinfo@busy-idle-check-all@vcs0.html * igt@i915_drm_fdinfo@virtual-busy-idle-all: - shard-dg2-9: NOTRUN -> [SKIP][81] ([i915#14118]) [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@i915_drm_fdinfo@virtual-busy-idle-all.html * igt@i915_fb_tiling@basic-x-tiling: - shard-dg2: NOTRUN -> [SKIP][82] ([i915#13786]) [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@i915_fb_tiling@basic-x-tiling.html * igt@i915_module_load@reload-no-display: - shard-tglu-1: NOTRUN -> [DMESG-WARN][83] ([i915#13029] / [i915#14545]) [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@i915_module_load@reload-no-display.html * igt@i915_module_load@resize-bar: - shard-dg2: NOTRUN -> [DMESG-WARN][84] ([i915#14545]) [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@i915_module_load@resize-bar.html * igt@i915_pm_freq_api@freq-reset: - shard-tglu-1: NOTRUN -> [SKIP][85] ([i915#8399]) [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@i915_pm_freq_api@freq-reset.html * igt@i915_pm_freq_api@freq-suspend: - shard-tglu: NOTRUN -> [SKIP][86] ([i915#8399]) [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@i915_pm_freq_api@freq-suspend.html * igt@i915_pm_freq_api@freq-suspend@gt0: - shard-dg2: [PASS][87] -> [INCOMPLETE][88] ([i915#13356] / [i915#13820]) +1 other test incomplete [87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg2-8/igt@i915_pm_freq_api@freq-suspend@gt0.html [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@i915_pm_freq_api@freq-suspend@gt0.html * igt@i915_pm_rc6_residency@rc6-idle: - shard-tglu-1: NOTRUN -> [SKIP][89] ([i915#14498]) [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@i915_pm_rc6_residency@rc6-idle.html * igt@i915_pm_rps@min-max-config-loaded: - shard-dg2-9: NOTRUN -> [SKIP][90] ([i915#11681] / [i915#6621]) [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@i915_pm_rps@min-max-config-loaded.html * igt@i915_pm_sseu@full-enable: - shard-tglu: NOTRUN -> [SKIP][91] ([i915#4387]) [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@i915_pm_sseu@full-enable.html - shard-dg2-9: NOTRUN -> [SKIP][92] ([i915#4387]) [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@i915_pm_sseu@full-enable.html * igt@i915_query@hwconfig_table: - shard-tglu: NOTRUN -> [SKIP][93] ([i915#6245]) [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@i915_query@hwconfig_table.html * igt@i915_query@query-topology-coherent-slice-mask: - shard-dg2: NOTRUN -> [SKIP][94] ([i915#6188]) [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@i915_query@query-topology-coherent-slice-mask.html * igt@i915_suspend@fence-restore-untiled: - shard-dg2: NOTRUN -> [SKIP][95] ([i915#4077]) +5 other tests skip [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@i915_suspend@fence-restore-untiled.html * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy: - shard-dg2: NOTRUN -> [SKIP][96] ([i915#5190]) [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html * igt@kms_addfb_basic@bo-too-small-due-to-tiling: - shard-dg2: NOTRUN -> [SKIP][97] ([i915#4212]) [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_addfb_basic@bo-too-small-due-to-tiling.html * igt@kms_async_flips@crc: - shard-rkl: NOTRUN -> [SKIP][98] ([i915#14544]) +13 other tests skip [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_async_flips@crc.html * igt@kms_atomic@plane-primary-overlay-mutable-zpos: - shard-dg2-9: NOTRUN -> [SKIP][99] ([i915#9531]) [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html - shard-tglu: NOTRUN -> [SKIP][100] ([i915#9531]) [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels: - shard-dg2-9: NOTRUN -> [SKIP][101] ([i915#1769] / [i915#3555]) [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html - shard-tglu: NOTRUN -> [SKIP][102] ([i915#1769] / [i915#3555]) [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html * igt@kms_big_fb@4-tiled-32bpp-rotate-180: - shard-tglu-1: NOTRUN -> [SKIP][103] ([i915#5286]) +1 other test skip [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_big_fb@4-tiled-32bpp-rotate-180.html * igt@kms_big_fb@4-tiled-64bpp-rotate-90: - shard-dg2: NOTRUN -> [SKIP][104] +9 other tests skip [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@kms_big_fb@4-tiled-64bpp-rotate-90.html * igt@kms_big_fb@4-tiled-8bpp-rotate-180: - shard-tglu: NOTRUN -> [SKIP][105] ([i915#5286]) +3 other tests skip [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_big_fb@4-tiled-8bpp-rotate-180.html * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180: - shard-rkl: NOTRUN -> [SKIP][106] ([i915#5286]) +2 other tests skip [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180.html * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip: - shard-mtlp: [PASS][107] -> [FAIL][108] ([i915#5138]) [107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-mtlp-6/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-mtlp-6/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html * igt@kms_big_fb@x-tiled-32bpp-rotate-90: - shard-rkl: NOTRUN -> [SKIP][109] ([i915#3638]) [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_big_fb@x-tiled-32bpp-rotate-90.html * igt@kms_big_fb@y-tiled-64bpp-rotate-90: - shard-dg1: NOTRUN -> [SKIP][110] ([i915#3638]) [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-12/igt@kms_big_fb@y-tiled-64bpp-rotate-90.html * igt@kms_big_fb@y-tiled-8bpp-rotate-0: - shard-dg2-9: NOTRUN -> [SKIP][111] ([i915#4538] / [i915#5190]) +7 other tests skip [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_big_fb@y-tiled-8bpp-rotate-0.html * igt@kms_big_fb@yf-tiled-8bpp-rotate-0: - shard-dg2: NOTRUN -> [SKIP][112] ([i915#4538] / [i915#5190]) +8 other tests skip [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_big_fb@yf-tiled-8bpp-rotate-0.html * igt@kms_big_fb@yf-tiled-8bpp-rotate-270: - shard-dg1: NOTRUN -> [SKIP][113] ([i915#4538]) [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-12/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180: - shard-rkl: NOTRUN -> [SKIP][114] +2 other tests skip [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180.html * igt@kms_busy@basic: - shard-glk10: NOTRUN -> [SKIP][115] ([i915#11190]) +1 other test skip [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk10/igt@kms_busy@basic.html * igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-4: - shard-dg1: NOTRUN -> [SKIP][116] ([i915#6095]) +136 other tests skip [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-17/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-4.html * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs: - shard-dg2: NOTRUN -> [SKIP][117] ([i915#10307] / [i915#6095]) +98 other tests skip [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs.html * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-a-hdmi-a-1: - shard-rkl: NOTRUN -> [SKIP][118] ([i915#6095]) +24 other tests skip [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-a-hdmi-a-1.html * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-d-hdmi-a-1: - shard-dg2: NOTRUN -> [SKIP][119] ([i915#10307] / [i915#10434] / [i915#6095]) +4 other tests skip [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-d-hdmi-a-1.html * igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc: - shard-dg2-9: NOTRUN -> [SKIP][120] ([i915#10307] / [i915#6095]) +39 other tests skip [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc.html * igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs: - shard-tglu-1: NOTRUN -> [SKIP][121] ([i915#12313]) [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-c-hdmi-a-2: - shard-rkl: NOTRUN -> [SKIP][122] ([i915#14098] / [i915#6095]) +27 other tests skip [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-8/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-c-hdmi-a-2.html * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs: - shard-dg2-9: NOTRUN -> [SKIP][123] ([i915#12805]) [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html - shard-tglu: NOTRUN -> [SKIP][124] ([i915#12805]) [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-mc-ccs: - shard-dg2-9: NOTRUN -> [SKIP][125] ([i915#6095]) +4 other tests skip [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-mc-ccs.html * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-c-hdmi-a-3: - shard-dg2: NOTRUN -> [SKIP][126] ([i915#6095]) +17 other tests skip [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-1/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-c-hdmi-a-3.html * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs: - shard-tglu: NOTRUN -> [SKIP][127] ([i915#12313]) [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs: - shard-tglu-1: NOTRUN -> [SKIP][128] ([i915#6095]) +24 other tests skip [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs.html * igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs: - shard-dg2-9: NOTRUN -> [SKIP][129] ([i915#12313]) +1 other test skip [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html * igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc: - shard-tglu: NOTRUN -> [SKIP][130] ([i915#6095]) +54 other tests skip [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc.html * igt@kms_cdclk@plane-scaling: - shard-tglu-1: NOTRUN -> [SKIP][131] ([i915#3742]) [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_cdclk@plane-scaling.html * igt@kms_chamelium_audio@dp-audio: - shard-tglu: NOTRUN -> [SKIP][132] ([i915#11151] / [i915#7828]) +6 other tests skip [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@kms_chamelium_audio@dp-audio.html * igt@kms_chamelium_color@ctm-0-25: - shard-dg2-9: NOTRUN -> [SKIP][133] +5 other tests skip [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_chamelium_color@ctm-0-25.html * igt@kms_chamelium_frames@dp-crc-multiple: - shard-rkl: NOTRUN -> [SKIP][134] ([i915#11151] / [i915#14544] / [i915#7828]) [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_chamelium_frames@dp-crc-multiple.html * igt@kms_chamelium_frames@dp-crc-single: - shard-tglu-1: NOTRUN -> [SKIP][135] ([i915#11151] / [i915#7828]) +4 other tests skip [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_chamelium_frames@dp-crc-single.html * igt@kms_chamelium_frames@hdmi-cmp-planar-formats: - shard-rkl: NOTRUN -> [SKIP][136] ([i915#11151] / [i915#7828]) +1 other test skip [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_chamelium_frames@hdmi-cmp-planar-formats.html * igt@kms_chamelium_frames@hdmi-crc-fast: - shard-dg2-9: NOTRUN -> [SKIP][137] ([i915#11151] / [i915#7828]) +4 other tests skip [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_chamelium_frames@hdmi-crc-fast.html * igt@kms_chamelium_frames@hdmi-crc-multiple: - shard-dg2: NOTRUN -> [SKIP][138] ([i915#11151] / [i915#7828]) +5 other tests skip [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_chamelium_frames@hdmi-crc-multiple.html * igt@kms_color@deep-color: - shard-dg2: NOTRUN -> [SKIP][139] ([i915#12655] / [i915#3555]) [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_color@deep-color.html * igt@kms_color@degamma: - shard-rkl: [PASS][140] -> [SKIP][141] ([i915#12655] / [i915#14544]) +2 other tests skip [140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_color@degamma.html [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_color@degamma.html * igt@kms_content_protection@content-type-change: - shard-tglu-1: NOTRUN -> [SKIP][142] ([i915#6944] / [i915#9424]) [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_content_protection@content-type-change.html * igt@kms_content_protection@dp-mst-lic-type-1: - shard-tglu: NOTRUN -> [SKIP][143] ([i915#3116] / [i915#3299]) [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_content_protection@dp-mst-lic-type-1.html - shard-dg2-9: NOTRUN -> [SKIP][144] ([i915#3299]) [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_content_protection@dp-mst-lic-type-1.html * igt@kms_content_protection@legacy: - shard-tglu-1: NOTRUN -> [SKIP][145] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424]) [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_content_protection@legacy.html * igt@kms_cursor_crc@cursor-offscreen-512x170: - shard-tglu: NOTRUN -> [SKIP][146] ([i915#13049]) +2 other tests skip [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_cursor_crc@cursor-offscreen-512x170.html - shard-dg2-9: NOTRUN -> [SKIP][147] ([i915#13049]) +1 other test skip [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_cursor_crc@cursor-offscreen-512x170.html * igt@kms_cursor_crc@cursor-onscreen-256x85: - shard-tglu: [PASS][148] -> [FAIL][149] ([i915#13566]) +3 other tests fail [148]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-tglu-8/igt@kms_cursor_crc@cursor-onscreen-256x85.html [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-6/igt@kms_cursor_crc@cursor-onscreen-256x85.html * igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1: - shard-tglu: NOTRUN -> [FAIL][150] ([i915#13566]) +1 other test fail [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1.html * igt@kms_cursor_crc@cursor-sliding-512x512: - shard-tglu-1: NOTRUN -> [SKIP][151] ([i915#13049]) +1 other test skip [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_cursor_crc@cursor-sliding-512x512.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy: - shard-dg2: NOTRUN -> [SKIP][152] ([i915#4103] / [i915#4213]) [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size: - shard-tglu: NOTRUN -> [SKIP][153] ([i915#4103]) [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html - shard-dg2-9: NOTRUN -> [SKIP][154] ([i915#4103] / [i915#4213]) +1 other test skip [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html * igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size: - shard-rkl: [PASS][155] -> [SKIP][156] ([i915#11190] / [i915#14544]) +4 other tests skip [155]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html * igt@kms_cursor_legacy@cursorb-vs-flipb-legacy: - shard-dg2: NOTRUN -> [SKIP][157] ([i915#13046] / [i915#5354]) +4 other tests skip [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_cursor_legacy@cursorb-vs-flipb-legacy.html * igt@kms_cursor_legacy@flip-vs-cursor-atomic: - shard-rkl: [PASS][158] -> [FAIL][159] ([i915#2346]) [158]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-3/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot: - shard-dg2: NOTRUN -> [SKIP][160] ([i915#9067]) [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html * igt@kms_display_modes@extended-mode-basic: - shard-dg2-9: NOTRUN -> [SKIP][161] ([i915#13691]) [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_display_modes@extended-mode-basic.html - shard-tglu: NOTRUN -> [SKIP][162] ([i915#13691]) [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_display_modes@extended-mode-basic.html * igt@kms_dp_aux_dev: - shard-dg2: NOTRUN -> [SKIP][163] ([i915#1257]) [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@kms_dp_aux_dev.html * igt@kms_dp_linktrain_fallback@dp-fallback: - shard-tglu: NOTRUN -> [SKIP][164] ([i915#13707]) [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@kms_dp_linktrain_fallback@dp-fallback.html * igt@kms_draw_crc@draw-method-mmap-wc: - shard-dg2-9: NOTRUN -> [SKIP][165] ([i915#8812]) [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_draw_crc@draw-method-mmap-wc.html * igt@kms_dsc@dsc-basic: - shard-rkl: NOTRUN -> [SKIP][166] ([i915#3555] / [i915#3840]) [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_dsc@dsc-basic.html * igt@kms_dsc@dsc-with-bpc: - shard-dg2-9: NOTRUN -> [SKIP][167] ([i915#3555] / [i915#3840]) [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_dsc@dsc-with-bpc.html * igt@kms_dsc@dsc-with-output-formats: - shard-tglu-1: NOTRUN -> [SKIP][168] ([i915#3555] / [i915#3840]) [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_dsc@dsc-with-output-formats.html * igt@kms_feature_discovery@display-4x: - shard-dg2: NOTRUN -> [SKIP][169] ([i915#1839]) [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@kms_feature_discovery@display-4x.html * igt@kms_feature_discovery@dp-mst: - shard-tglu: NOTRUN -> [SKIP][170] ([i915#9337]) [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@kms_feature_discovery@dp-mst.html * igt@kms_feature_discovery@psr1: - shard-dg2: NOTRUN -> [SKIP][171] ([i915#658]) [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@kms_feature_discovery@psr1.html * igt@kms_flip@2x-absolute-wf_vblank-interruptible: - shard-dg2: NOTRUN -> [SKIP][172] ([i915#9934]) +3 other tests skip [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html * igt@kms_flip@2x-flip-vs-dpms-on-nop: - shard-rkl: NOTRUN -> [SKIP][173] ([i915#14544] / [i915#9934]) [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_flip@2x-flip-vs-dpms-on-nop.html * igt@kms_flip@2x-flip-vs-fences-interruptible: - shard-dg2: NOTRUN -> [SKIP][174] ([i915#8381]) +1 other test skip [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@kms_flip@2x-flip-vs-fences-interruptible.html * igt@kms_flip@2x-flip-vs-wf_vblank: - shard-dg2-9: NOTRUN -> [SKIP][175] ([i915#9934]) +4 other tests skip [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_flip@2x-flip-vs-wf_vblank.html * igt@kms_flip@2x-plain-flip-interruptible: - shard-rkl: NOTRUN -> [SKIP][176] ([i915#9934]) +1 other test skip [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_flip@2x-plain-flip-interruptible.html * igt@kms_flip@2x-plain-flip-ts-check: - shard-tglu: NOTRUN -> [SKIP][177] ([i915#3637] / [i915#9934]) +5 other tests skip [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_flip@2x-plain-flip-ts-check.html * igt@kms_flip@2x-plain-flip-ts-check-interruptible: - shard-tglu-1: NOTRUN -> [SKIP][178] ([i915#3637] / [i915#9934]) +3 other tests skip [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html * igt@kms_flip@flip-vs-absolute-wf_vblank: - shard-rkl: NOTRUN -> [SKIP][179] ([i915#14544] / [i915#3637]) [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_flip@flip-vs-absolute-wf_vblank.html * igt@kms_flip@flip-vs-expired-vblank-interruptible: - shard-rkl: [PASS][180] -> [SKIP][181] ([i915#14544] / [i915#3637]) +7 other tests skip [180]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible.html [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_flip@flip-vs-expired-vblank-interruptible.html * igt@kms_flip@flip-vs-fences-interruptible: - shard-dg1: NOTRUN -> [SKIP][182] ([i915#8381]) [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-12/igt@kms_flip@flip-vs-fences-interruptible.html * igt@kms_flip@flip-vs-suspend-interruptible@b-hdmi-a1: - shard-rkl: [PASS][183] -> [ABORT][184] ([i915#15132]) +1 other test abort [183]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-7/igt@kms_flip@flip-vs-suspend-interruptible@b-hdmi-a1.html [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-4/igt@kms_flip@flip-vs-suspend-interruptible@b-hdmi-a1.html * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-upscaling: - shard-tglu: NOTRUN -> [SKIP][185] ([i915#2672] / [i915#3555]) +1 other test skip [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-upscaling.html * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling: - shard-dg2: NOTRUN -> [SKIP][186] ([i915#2672] / [i915#3555] / [i915#5190]) [186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling.html * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-valid-mode: - shard-dg2: NOTRUN -> [SKIP][187] ([i915#2672]) +2 other tests skip [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode: - shard-dg2-9: NOTRUN -> [SKIP][188] ([i915#2672]) +2 other tests skip [188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-downscaling: - shard-rkl: NOTRUN -> [SKIP][189] ([i915#14544] / [i915#3555]) [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-downscaling.html * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling: - shard-dg2-9: NOTRUN -> [SKIP][190] ([i915#2672] / [i915#3555] / [i915#5190]) +2 other tests skip [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling@pipe-a-valid-mode: - shard-rkl: NOTRUN -> [SKIP][191] ([i915#2672]) +1 other test skip [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode: - shard-tglu: NOTRUN -> [SKIP][192] ([i915#2587] / [i915#2672]) +1 other test skip [192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling@pipe-a-valid-mode: - shard-tglu-1: NOTRUN -> [SKIP][193] ([i915#2587] / [i915#2672]) +1 other test skip [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling@pipe-a-valid-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling: - shard-tglu-1: NOTRUN -> [SKIP][194] ([i915#2672] / [i915#3555]) +1 other test skip [194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-downscaling: - shard-rkl: [PASS][195] -> [SKIP][196] ([i915#14544] / [i915#3555]) +4 other tests skip [195]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-downscaling.html [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-downscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling: - shard-dg2: NOTRUN -> [SKIP][197] ([i915#2672] / [i915#3555]) +1 other test skip [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt: - shard-rkl: [PASS][198] -> [SKIP][199] ([i915#14544] / [i915#1849] / [i915#5354]) +6 other tests skip [198]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt.html [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-cpu: - shard-tglu-1: NOTRUN -> [SKIP][200] +29 other tests skip [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-cpu.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt: - shard-rkl: NOTRUN -> [SKIP][201] ([i915#1825]) +7 other tests skip [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-move: - shard-dg1: NOTRUN -> [SKIP][202] [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-12/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-move.html * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff: - shard-tglu: NOTRUN -> [SKIP][203] +37 other tests skip [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-indfb-fliptrack-mmap-gtt: - shard-dg2: NOTRUN -> [SKIP][204] ([i915#8708]) +10 other tests skip [204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-indfb-fliptrack-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move: - shard-rkl: NOTRUN -> [SKIP][205] ([i915#14544] / [i915#1849] / [i915#5354]) +6 other tests skip [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite: - shard-dg2: NOTRUN -> [SKIP][206] ([i915#15102] / [i915#3458]) +8 other tests skip [206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-mmap-gtt: - shard-dg2-9: NOTRUN -> [SKIP][207] ([i915#8708]) +10 other tests skip [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite: - shard-dg2-9: NOTRUN -> [SKIP][208] ([i915#15102] / [i915#3458]) +12 other tests skip [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite.html * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc: - shard-tglu-1: NOTRUN -> [SKIP][209] ([i915#15102]) +7 other tests skip [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc.html * igt@kms_frontbuffer_tracking@fbcpsr-tiling-y: - shard-dg2-9: NOTRUN -> [SKIP][210] ([i915#10055]) [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html * igt@kms_frontbuffer_tracking@pipe-fbc-rte: - shard-dg2: NOTRUN -> [SKIP][211] ([i915#9766]) [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc: - shard-tglu: NOTRUN -> [SKIP][212] ([i915#15102]) +17 other tests skip [212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt: - shard-rkl: NOTRUN -> [SKIP][213] ([i915#15102] / [i915#3023]) +4 other tests skip [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-blt: - shard-dg2: NOTRUN -> [SKIP][214] ([i915#5354]) +21 other tests skip [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-blt.html * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-mmap-cpu: - shard-dg2-9: NOTRUN -> [SKIP][215] ([i915#5354]) +19 other tests skip [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-mmap-cpu.html * igt@kms_hdr@bpc-switch: - shard-tglu: NOTRUN -> [SKIP][216] ([i915#3555] / [i915#8228]) +1 other test skip [216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_hdr@bpc-switch.html * igt@kms_hdr@bpc-switch-dpms: - shard-dg2: NOTRUN -> [SKIP][217] ([i915#3555] / [i915#8228]) +1 other test skip [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@kms_hdr@bpc-switch-dpms.html * igt@kms_hdr@invalid-hdr: - shard-dg2-9: NOTRUN -> [SKIP][218] ([i915#3555] / [i915#8228]) +1 other test skip [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_hdr@invalid-hdr.html * igt@kms_invalid_mode@zero-vdisplay: - shard-rkl: [PASS][219] -> [SKIP][220] ([i915#14544] / [i915#3555] / [i915#8826]) [219]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_invalid_mode@zero-vdisplay.html [220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_invalid_mode@zero-vdisplay.html * igt@kms_joiner@basic-big-joiner: - shard-tglu: NOTRUN -> [SKIP][221] ([i915#10656]) [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@kms_joiner@basic-big-joiner.html * igt@kms_joiner@basic-force-ultra-joiner: - shard-tglu-1: NOTRUN -> [SKIP][222] ([i915#12394]) [222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_joiner@basic-force-ultra-joiner.html * igt@kms_joiner@basic-ultra-joiner: - shard-dg2: NOTRUN -> [SKIP][223] ([i915#12339]) [223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_joiner@basic-ultra-joiner.html * igt@kms_joiner@invalid-modeset-big-joiner: - shard-tglu-1: NOTRUN -> [SKIP][224] ([i915#10656]) [224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_joiner@invalid-modeset-big-joiner.html * igt@kms_joiner@invalid-modeset-force-big-joiner: - shard-tglu: NOTRUN -> [SKIP][225] ([i915#12388]) [225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@kms_joiner@invalid-modeset-force-big-joiner.html * igt@kms_joiner@invalid-modeset-force-ultra-joiner: - shard-dg2: NOTRUN -> [SKIP][226] ([i915#10656]) [226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html * igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner: - shard-tglu: NOTRUN -> [SKIP][227] ([i915#13522]) [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html - shard-dg2-9: NOTRUN -> [SKIP][228] ([i915#13522]) [228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html * igt@kms_lease@lease-invalid-plane: - shard-rkl: [PASS][229] -> [SKIP][230] ([i915#14544]) +38 other tests skip [229]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_lease@lease-invalid-plane.html [230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_lease@lease-invalid-plane.html * igt@kms_panel_fitting@atomic-fastset: - shard-dg2: NOTRUN -> [SKIP][231] ([i915#6301]) [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@kms_panel_fitting@atomic-fastset.html * igt@kms_plane@plane-panning-bottom-right-suspend: - shard-glk: NOTRUN -> [INCOMPLETE][232] ([i915#13026]) +1 other test incomplete [232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk6/igt@kms_plane@plane-panning-bottom-right-suspend.html * igt@kms_plane_alpha_blend@alpha-basic: - shard-rkl: [PASS][233] -> [SKIP][234] ([i915#14544] / [i915#7294]) +2 other tests skip [233]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_plane_alpha_blend@alpha-basic.html [234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_alpha_blend@alpha-basic.html * igt@kms_plane_alpha_blend@alpha-opaque-fb: - shard-glk: NOTRUN -> [FAIL][235] ([i915#10647] / [i915#12169]) [235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk6/igt@kms_plane_alpha_blend@alpha-opaque-fb.html * igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-a-hdmi-a-1: - shard-glk: NOTRUN -> [FAIL][236] ([i915#10647]) +1 other test fail [236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk6/igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-a-hdmi-a-1.html * igt@kms_plane_lowres@tiling-y: - shard-dg2-9: NOTRUN -> [SKIP][237] ([i915#8821]) [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_plane_lowres@tiling-y.html * igt@kms_plane_lowres@tiling-yf: - shard-dg2: NOTRUN -> [SKIP][238] ([i915#3555] / [i915#8821]) [238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@kms_plane_lowres@tiling-yf.html * igt@kms_plane_multiple@2x-tiling-none: - shard-tglu: NOTRUN -> [SKIP][239] ([i915#13958]) [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_plane_multiple@2x-tiling-none.html - shard-dg2-9: NOTRUN -> [SKIP][240] ([i915#13958]) [240]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_plane_multiple@2x-tiling-none.html * igt@kms_plane_multiple@2x-tiling-yf: - shard-rkl: NOTRUN -> [SKIP][241] ([i915#13958]) [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_plane_multiple@2x-tiling-yf.html * igt@kms_plane_multiple@tiling-yf: - shard-tglu-1: NOTRUN -> [SKIP][242] ([i915#14259]) [242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_plane_multiple@tiling-yf.html * igt@kms_plane_scaling@intel-max-src-size: - shard-tglu-1: NOTRUN -> [SKIP][243] ([i915#6953]) [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_plane_scaling@intel-max-src-size.html * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers: - shard-rkl: NOTRUN -> [SKIP][244] ([i915#12247] / [i915#14544] / [i915#8152]) +1 other test skip [244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers.html * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers@pipe-a: - shard-rkl: NOTRUN -> [SKIP][245] ([i915#12247] / [i915#14544]) [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers@pipe-a.html * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-d: - shard-tglu-1: NOTRUN -> [SKIP][246] ([i915#12247]) +4 other tests skip [246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-d.html * igt@kms_plane_scaling@plane-upscale-20x20-with-pixel-format: - shard-rkl: [PASS][247] -> [SKIP][248] ([i915#14544] / [i915#8152]) +1 other test skip [247]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_plane_scaling@plane-upscale-20x20-with-pixel-format.html [248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@plane-upscale-20x20-with-pixel-format.html * igt@kms_plane_scaling@planes-downscale-factor-0-75: - shard-rkl: [PASS][249] -> [SKIP][250] ([i915#12247] / [i915#14544] / [i915#3555] / [i915#6953] / [i915#8152]) [249]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_plane_scaling@planes-downscale-factor-0-75.html [250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-75.html * igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25: - shard-rkl: [PASS][251] -> [SKIP][252] ([i915#14544] / [i915#6953] / [i915#8152]) [251]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25.html [252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75: - shard-rkl: [PASS][253] -> [SKIP][254] ([i915#12247] / [i915#14544] / [i915#6953] / [i915#8152]) [253]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75.html [254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-a: - shard-rkl: [PASS][255] -> [SKIP][256] ([i915#12247] / [i915#14544]) +4 other tests skip [255]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-a.html [256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-a.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-b: - shard-rkl: [PASS][257] -> [SKIP][258] ([i915#12247] / [i915#14544] / [i915#8152]) +4 other tests skip [257]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-b.html [258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-b.html * igt@kms_pm_backlight@brightness-with-dpms: - shard-dg2: NOTRUN -> [SKIP][259] ([i915#12343]) [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_pm_backlight@brightness-with-dpms.html * igt@kms_pm_backlight@fade-with-dpms: - shard-tglu: NOTRUN -> [SKIP][260] ([i915#9812]) +1 other test skip [260]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_pm_backlight@fade-with-dpms.html * igt@kms_pm_dc@dc5-psr: - shard-tglu: NOTRUN -> [SKIP][261] ([i915#9685]) [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@kms_pm_dc@dc5-psr.html * igt@kms_pm_dc@dc5-retention-flops: - shard-tglu-1: NOTRUN -> [SKIP][262] ([i915#3828]) [262]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_pm_dc@dc5-retention-flops.html * igt@kms_pm_dc@dc6-dpms: - shard-dg2: NOTRUN -> [SKIP][263] ([i915#14104]) [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_pm_dc@dc6-dpms.html * igt@kms_pm_lpsp@kms-lpsp: - shard-glk10: NOTRUN -> [SKIP][264] +223 other tests skip [264]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk10/igt@kms_pm_lpsp@kms-lpsp.html * igt@kms_pm_rpm@dpms-lpsp: - shard-dg2-9: NOTRUN -> [SKIP][265] ([i915#15073]) [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_pm_rpm@dpms-lpsp.html * igt@kms_pm_rpm@dpms-non-lpsp: - shard-dg2: NOTRUN -> [SKIP][266] ([i915#15073]) [266]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@kms_pm_rpm@dpms-non-lpsp.html * igt@kms_pm_rpm@fences: - shard-rkl: NOTRUN -> [SKIP][267] ([i915#12916] / [i915#14544]) [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_pm_rpm@fences.html * igt@kms_pm_rpm@modeset-lpsp: - shard-rkl: [PASS][268] -> [SKIP][269] ([i915#15073]) [268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_pm_rpm@modeset-lpsp.html [269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-8/igt@kms_pm_rpm@modeset-lpsp.html * igt@kms_pm_rpm@modeset-non-lpsp: - shard-tglu-1: NOTRUN -> [SKIP][270] ([i915#15073]) [270]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_pm_rpm@modeset-non-lpsp.html * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait: - shard-dg2: [PASS][271] -> [SKIP][272] ([i915#15073]) [271]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg2-7/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html [272]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html - shard-rkl: NOTRUN -> [SKIP][273] ([i915#15073]) [273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html * igt@kms_prime@basic-crc-hybrid: - shard-dg2: NOTRUN -> [SKIP][274] ([i915#6524] / [i915#6805]) +1 other test skip [274]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_prime@basic-crc-hybrid.html * igt@kms_prime@basic-crc-vgem: - shard-rkl: [PASS][275] -> [SKIP][276] ([i915#14544] / [i915#6524]) [275]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_prime@basic-crc-vgem.html [276]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_prime@basic-crc-vgem.html * igt@kms_properties@crtc-properties-atomic: - shard-rkl: NOTRUN -> [SKIP][277] ([i915#11521] / [i915#14544]) [277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_properties@crtc-properties-atomic.html * igt@kms_properties@crtc-properties-legacy: - shard-rkl: [PASS][278] -> [SKIP][279] ([i915#11521] / [i915#14544]) [278]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_properties@crtc-properties-legacy.html [279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_properties@crtc-properties-legacy.html * igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-sf: - shard-rkl: NOTRUN -> [SKIP][280] ([i915#11520]) +2 other tests skip [280]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-sf.html * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf: - shard-glk: NOTRUN -> [SKIP][281] ([i915#11520]) +6 other tests skip [281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk9/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html - shard-tglu-1: NOTRUN -> [SKIP][282] ([i915#11520]) +3 other tests skip [282]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html * igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf: - shard-dg2-9: NOTRUN -> [SKIP][283] ([i915#11520]) +5 other tests skip [283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html * igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf: - shard-dg2: NOTRUN -> [SKIP][284] ([i915#11520]) +5 other tests skip [284]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf.html * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-sf: - shard-glk10: NOTRUN -> [SKIP][285] ([i915#11520]) +5 other tests skip [285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk10/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-sf.html * igt@kms_psr2_sf@pr-cursor-plane-update-sf: - shard-tglu: NOTRUN -> [SKIP][286] ([i915#11520]) +5 other tests skip [286]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_psr2_sf@pr-cursor-plane-update-sf.html * igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-fully-sf: - shard-snb: NOTRUN -> [SKIP][287] ([i915#11520]) [287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-snb4/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-fully-sf.html * igt@kms_psr2_sf@psr2-overlay-plane-update-continuous-sf: - shard-rkl: NOTRUN -> [SKIP][288] ([i915#11520] / [i915#14544]) [288]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_psr2_sf@psr2-overlay-plane-update-continuous-sf.html * igt@kms_psr@fbc-pr-primary-mmap-gtt: - shard-dg2-9: NOTRUN -> [SKIP][289] ([i915#1072] / [i915#9732]) +14 other tests skip [289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_psr@fbc-pr-primary-mmap-gtt.html * igt@kms_psr@fbc-psr-cursor-blt: - shard-rkl: NOTRUN -> [SKIP][290] ([i915#1072] / [i915#9732]) +2 other tests skip [290]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_psr@fbc-psr-cursor-blt.html * igt@kms_psr@fbc-psr-cursor-plane-move: - shard-tglu-1: NOTRUN -> [SKIP][291] ([i915#9732]) +10 other tests skip [291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_psr@fbc-psr-cursor-plane-move.html * igt@kms_psr@fbc-psr2-primary-mmap-gtt: - shard-tglu: NOTRUN -> [SKIP][292] ([i915#9732]) +14 other tests skip [292]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_psr@fbc-psr2-primary-mmap-gtt.html * igt@kms_psr@pr-primary-mmap-cpu: - shard-dg2: NOTRUN -> [SKIP][293] ([i915#1072] / [i915#9732]) +14 other tests skip [293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@kms_psr@pr-primary-mmap-cpu.html * igt@kms_psr@psr2-cursor-mmap-gtt: - shard-rkl: NOTRUN -> [SKIP][294] ([i915#1072] / [i915#14544] / [i915#9732]) +1 other test skip [294]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_psr@psr2-cursor-mmap-gtt.html * igt@kms_psr_stress_test@flip-primary-invalidate-overlay: - shard-dg2: NOTRUN -> [SKIP][295] ([i915#9685]) [295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html * igt@kms_rotation_crc@primary-4-tiled-reflect-x-180: - shard-rkl: NOTRUN -> [SKIP][296] ([i915#5289]) [296]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_rotation_crc@primary-4-tiled-reflect-x-180.html * igt@kms_rotation_crc@primary-y-tiled-reflect-x-90: - shard-dg2-9: NOTRUN -> [SKIP][297] ([i915#12755] / [i915#5190]) [297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90: - shard-tglu-1: NOTRUN -> [SKIP][298] ([i915#5289]) [298]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html * igt@kms_rotation_crc@sprite-rotation-90: - shard-dg2: NOTRUN -> [SKIP][299] ([i915#12755]) +1 other test skip [299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@kms_rotation_crc@sprite-rotation-90.html * igt@kms_rotation_crc@sprite-rotation-90-pos-100-0: - shard-dg2-9: NOTRUN -> [SKIP][300] ([i915#12755]) [300]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html * igt@kms_scaling_modes@scaling-mode-none: - shard-tglu-1: NOTRUN -> [SKIP][301] ([i915#3555]) +1 other test skip [301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_scaling_modes@scaling-mode-none.html * igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_swab: - shard-dg2: NOTRUN -> [FAIL][302] ([i915#15119]) +17 other tests fail [302]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_swab.html * igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_xrgb8888_to_rgb888: - shard-glk: NOTRUN -> [FAIL][303] ([i915#15119]) +18 other tests fail [303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk1/igt@kms_selftest@drm_format_helper@drm_format_helper_test-drm_test_fb_xrgb8888_to_rgb888.html * igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_create: - shard-glk: NOTRUN -> [ABORT][304] ([i915#13179]) +1 other test abort [304]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk5/igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_create.html * igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_free: - shard-glk: NOTRUN -> [DMESG-FAIL][305] ([i915#13179]) [305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk5/igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_free.html * igt@kms_selftest@drm_plane_helper@drm_test_check_plane_state: - shard-glk10: NOTRUN -> [FAIL][306] ([i915#15119]) +2 other tests fail [306]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk10/igt@kms_selftest@drm_plane_helper@drm_test_check_plane_state.html * igt@kms_setmode@basic: - shard-tglu: [PASS][307] -> [FAIL][308] ([i915#15106]) +2 other tests fail [307]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-tglu-8/igt@kms_setmode@basic.html [308]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-6/igt@kms_setmode@basic.html * igt@kms_setmode@invalid-clone-exclusive-crtc: - shard-dg2-9: NOTRUN -> [SKIP][309] ([i915#3555]) +4 other tests skip [309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_setmode@invalid-clone-exclusive-crtc.html * igt@kms_tiled_display@basic-test-pattern: - shard-tglu: NOTRUN -> [SKIP][310] ([i915#8623]) [310]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_tiled_display@basic-test-pattern.html - shard-dg2-9: NOTRUN -> [SKIP][311] ([i915#8623]) [311]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@kms_tiled_display@basic-test-pattern.html * igt@kms_vblank@ts-continuation-suspend@pipe-a-hdmi-a-1: - shard-glk: [PASS][312] -> [INCOMPLETE][313] ([i915#12276]) [312]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-glk3/igt@kms_vblank@ts-continuation-suspend@pipe-a-hdmi-a-1.html [313]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk9/igt@kms_vblank@ts-continuation-suspend@pipe-a-hdmi-a-1.html * igt@kms_vrr@flip-dpms: - shard-dg2: NOTRUN -> [SKIP][314] ([i915#3555]) +6 other tests skip [314]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@kms_vrr@flip-dpms.html * igt@kms_vrr@flip-suspend: - shard-tglu: NOTRUN -> [SKIP][315] ([i915#3555]) +4 other tests skip [315]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-10/igt@kms_vrr@flip-suspend.html * igt@kms_vrr@max-min: - shard-dg2: NOTRUN -> [SKIP][316] ([i915#9906]) [316]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@kms_vrr@max-min.html * igt@kms_vrr@negative-basic: - shard-rkl: NOTRUN -> [SKIP][317] ([i915#3555] / [i915#9906]) [317]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_vrr@negative-basic.html * igt@kms_vrr@seamless-rr-switch-virtual: - shard-tglu-1: NOTRUN -> [SKIP][318] ([i915#9906]) [318]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_vrr@seamless-rr-switch-virtual.html * igt@kms_writeback@writeback-check-output: - shard-tglu: NOTRUN -> [SKIP][319] ([i915#2437]) [319]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@kms_writeback@writeback-check-output.html * igt@kms_writeback@writeback-fb-id-xrgb2101010: - shard-tglu-1: NOTRUN -> [SKIP][320] ([i915#2437] / [i915#9412]) [320]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-1/igt@kms_writeback@writeback-fb-id-xrgb2101010.html * igt@kms_writeback@writeback-invalid-parameters: - shard-dg2: NOTRUN -> [SKIP][321] ([i915#2437]) [321]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@kms_writeback@writeback-invalid-parameters.html * igt@kms_writeback@writeback-pixel-formats: - shard-rkl: NOTRUN -> [SKIP][322] ([i915#2437] / [i915#9412]) [322]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@kms_writeback@writeback-pixel-formats.html * igt@perf@global-sseu-config: - shard-dg2-9: NOTRUN -> [SKIP][323] ([i915#7387]) [323]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@perf@global-sseu-config.html * igt@perf_pmu@busy-double-start@vecs1: - shard-dg2: NOTRUN -> [FAIL][324] ([i915#4349]) +4 other tests fail [324]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@perf_pmu@busy-double-start@vecs1.html * igt@perf_pmu@module-unload: - shard-glk10: NOTRUN -> [FAIL][325] ([i915#14433]) [325]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-glk10/igt@perf_pmu@module-unload.html * igt@perf_pmu@rc6@other-idle-gt0: - shard-tglu: NOTRUN -> [SKIP][326] ([i915#8516]) [326]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-tglu-9/igt@perf_pmu@rc6@other-idle-gt0.html * igt@prime_vgem@basic-fence-flip: - shard-rkl: [PASS][327] -> [SKIP][328] ([i915#14544] / [i915#3708]) [327]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@prime_vgem@basic-fence-flip.html [328]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@prime_vgem@basic-fence-flip.html * igt@prime_vgem@basic-fence-mmap: - shard-dg2: NOTRUN -> [SKIP][329] ([i915#3708] / [i915#4077]) [329]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-8/igt@prime_vgem@basic-fence-mmap.html * igt@prime_vgem@basic-write: - shard-rkl: NOTRUN -> [SKIP][330] ([i915#3291] / [i915#3708]) [330]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@prime_vgem@basic-write.html * igt@prime_vgem@fence-flip-hang: - shard-rkl: NOTRUN -> [SKIP][331] ([i915#3708]) [331]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@prime_vgem@fence-flip-hang.html * igt@prime_vgem@fence-write-hang: - shard-dg2: NOTRUN -> [SKIP][332] ([i915#3708]) [332]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-6/igt@prime_vgem@fence-write-hang.html * igt@sriov_basic@bind-unbind-vf: - shard-dg2-9: NOTRUN -> [SKIP][333] ([i915#9917]) [333]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-9/igt@sriov_basic@bind-unbind-vf.html * igt@sriov_basic@enable-vfs-autoprobe-off: - shard-rkl: NOTRUN -> [SKIP][334] ([i915#14544] / [i915#9917]) [334]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@sriov_basic@enable-vfs-autoprobe-off.html #### Possible fixes #### * igt@fbdev@unaligned-write: - shard-rkl: [SKIP][335] ([i915#14544] / [i915#2582]) -> [PASS][336] [335]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@fbdev@unaligned-write.html [336]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@fbdev@unaligned-write.html * igt@gem_eio@kms: - shard-dg1: [FAIL][337] ([i915#5784]) -> [PASS][338] [337]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-12/igt@gem_eio@kms.html [338]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-17/igt@gem_eio@kms.html * igt@gem_exec_schedule@wide: - shard-rkl: [DMESG-WARN][339] ([i915#12964]) -> [PASS][340] +18 other tests pass [339]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_exec_schedule@wide.html [340]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@gem_exec_schedule@wide.html * igt@gem_lmem_swapping@smem-oom@lmem0: - shard-dg2: [TIMEOUT][341] ([i915#5493]) -> [PASS][342] +1 other test pass [341]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg2-4/igt@gem_lmem_swapping@smem-oom@lmem0.html [342]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-5/igt@gem_lmem_swapping@smem-oom@lmem0.html - shard-dg1: [TIMEOUT][343] ([i915#5493]) -> [PASS][344] +1 other test pass [343]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-13/igt@gem_lmem_swapping@smem-oom@lmem0.html [344]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-18/igt@gem_lmem_swapping@smem-oom@lmem0.html * igt@gem_mmap_wc@set-cache-level: - shard-rkl: [SKIP][345] ([i915#14544] / [i915#1850]) -> [PASS][346] [345]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_mmap_wc@set-cache-level.html [346]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@gem_mmap_wc@set-cache-level.html * igt@gem_pxp@verify-pxp-key-change-after-suspend-resume: - shard-rkl: [TIMEOUT][347] ([i915#12917] / [i915#12964]) -> [PASS][348] [347]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@gem_pxp@verify-pxp-key-change-after-suspend-resume.html [348]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-8/igt@gem_pxp@verify-pxp-key-change-after-suspend-resume.html * igt@i915_suspend@basic-s3-without-i915: - shard-dg1: [DMESG-WARN][349] ([i915#4391] / [i915#4423]) -> [PASS][350] [349]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-17/igt@i915_suspend@basic-s3-without-i915.html [350]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-14/igt@i915_suspend@basic-s3-without-i915.html * igt@i915_suspend@sysfs-reader: - shard-rkl: [ABORT][351] -> [PASS][352] [351]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-4/igt@i915_suspend@sysfs-reader.html [352]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-7/igt@i915_suspend@sysfs-reader.html * igt@kms_atomic_transition@plane-toggle-modeset-transition: - shard-dg2: [FAIL][353] ([i915#5956]) -> [PASS][354] +1 other test pass [353]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg2-7/igt@kms_atomic_transition@plane-toggle-modeset-transition.html [354]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@kms_atomic_transition@plane-toggle-modeset-transition.html * igt@kms_color@legacy-gamma-reset: - shard-rkl: [SKIP][355] ([i915#12655] / [i915#14544]) -> [PASS][356] [355]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_color@legacy-gamma-reset.html [356]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_color@legacy-gamma-reset.html * igt@kms_cursor_crc@cursor-onscreen-256x256: - shard-rkl: [SKIP][357] ([i915#14544]) -> [PASS][358] +42 other tests pass [357]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_cursor_crc@cursor-onscreen-256x256.html [358]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_cursor_crc@cursor-onscreen-256x256.html * igt@kms_fbcon_fbt@fbc: - shard-rkl: [SKIP][359] ([i915#14544] / [i915#14561]) -> [PASS][360] [359]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_fbcon_fbt@fbc.html [360]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_fbcon_fbt@fbc.html * igt@kms_fbcon_fbt@fbc-suspend: - shard-dg1: [ABORT][361] -> [PASS][362] [361]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-12/igt@kms_fbcon_fbt@fbc-suspend.html [362]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-12/igt@kms_fbcon_fbt@fbc-suspend.html * igt@kms_flip@dpms-off-confusion: - shard-dg1: [DMESG-WARN][363] ([i915#4423]) -> [PASS][364] [363]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-16/igt@kms_flip@dpms-off-confusion.html [364]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-17/igt@kms_flip@dpms-off-confusion.html * igt@kms_flip@flip-vs-suspend: - shard-rkl: [SKIP][365] ([i915#14544] / [i915#3637]) -> [PASS][366] +5 other tests pass [365]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_flip@flip-vs-suspend.html [366]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_flip@flip-vs-suspend.html * igt@kms_flip@plain-flip-fb-recreate@a-hdmi-a3: - shard-dg2: [FAIL][367] -> [PASS][368] +1 other test pass [367]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg2-5/igt@kms_flip@plain-flip-fb-recreate@a-hdmi-a3.html [368]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-7/igt@kms_flip@plain-flip-fb-recreate@a-hdmi-a3.html * igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling: - shard-rkl: [SKIP][369] ([i915#14544] / [i915#3555]) -> [PASS][370] [369]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling.html [370]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling.html * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-pwrite: - shard-snb: [SKIP][371] -> [PASS][372] [371]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-pwrite.html [372]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-snb1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-pwrite.html * igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-gtt: - shard-rkl: [SKIP][373] ([i915#14544] / [i915#1849] / [i915#5354]) -> [PASS][374] +8 other tests pass [373]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-gtt.html [374]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-gtt.html * igt@kms_invalid_mode@uint-max-clock: - shard-rkl: [SKIP][375] ([i915#14544] / [i915#3555] / [i915#8826]) -> [PASS][376] +1 other test pass [375]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_invalid_mode@uint-max-clock.html [376]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_invalid_mode@uint-max-clock.html * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence: - shard-rkl: [SKIP][377] ([i915#11190] / [i915#14544]) -> [PASS][378] [377]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html [378]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html * igt@kms_plane@planar-pixel-format-settings: - shard-rkl: [SKIP][379] ([i915#14544] / [i915#9581]) -> [PASS][380] [379]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_plane@planar-pixel-format-settings.html [380]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_plane@planar-pixel-format-settings.html * igt@kms_plane@plane-panning-top-left: - shard-rkl: [SKIP][381] ([i915#14544] / [i915#8825]) -> [PASS][382] [381]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_plane@plane-panning-top-left.html [382]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_plane@plane-panning-top-left.html * igt@kms_plane_alpha_blend@alpha-7efc: - shard-rkl: [SKIP][383] ([i915#14544] / [i915#7294]) -> [PASS][384] +1 other test pass [383]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_plane_alpha_blend@alpha-7efc.html [384]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_plane_alpha_blend@alpha-7efc.html * igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-20x20: - shard-rkl: [SKIP][385] ([i915#12247] / [i915#14544] / [i915#8152]) -> [PASS][386] +3 other tests pass [385]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-20x20.html [386]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-20x20.html * igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-20x20@pipe-a: - shard-rkl: [SKIP][387] ([i915#12247] / [i915#14544]) -> [PASS][388] +1 other test pass [387]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-20x20@pipe-a.html [388]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-20x20@pipe-a.html * igt@kms_pm_rpm@dpms-mode-unset-lpsp: - shard-rkl: [SKIP][389] ([i915#14544] / [i915#15073]) -> [PASS][390] [389]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html [390]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html * igt@kms_properties@plane-properties-legacy: - shard-rkl: [SKIP][391] ([i915#11521] / [i915#14544]) -> [PASS][392] [391]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_properties@plane-properties-legacy.html [392]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_properties@plane-properties-legacy.html * igt@perf_pmu@rc6-suspend: - shard-rkl: [ABORT][393] ([i915#15131]) -> [PASS][394] [393]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-4/igt@perf_pmu@rc6-suspend.html [394]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@perf_pmu@rc6-suspend.html #### Warnings #### * igt@api_intel_bb@blit-reloc-keep-cache: - shard-rkl: [SKIP][395] ([i915#14544] / [i915#8411]) -> [SKIP][396] ([i915#8411]) [395]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@api_intel_bb@blit-reloc-keep-cache.html [396]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@api_intel_bb@blit-reloc-keep-cache.html * igt@device_reset@unbind-cold-reset-rebind: - shard-rkl: [SKIP][397] ([i915#11078]) -> [SKIP][398] ([i915#11078] / [i915#14544]) [397]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@device_reset@unbind-cold-reset-rebind.html [398]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@device_reset@unbind-cold-reset-rebind.html * igt@gem_bad_reloc@negative-reloc-lut: - shard-rkl: [SKIP][399] ([i915#3281]) -> [SKIP][400] ([i915#14544] / [i915#3281]) +9 other tests skip [399]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@gem_bad_reloc@negative-reloc-lut.html [400]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_bad_reloc@negative-reloc-lut.html * igt@gem_ccs@block-copy-compressed: - shard-rkl: [SKIP][401] ([i915#3555] / [i915#9323]) -> [SKIP][402] ([i915#14544] / [i915#3555] / [i915#9323]) [401]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@gem_ccs@block-copy-compressed.html [402]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_ccs@block-copy-compressed.html * igt@gem_ccs@ctrl-surf-copy: - shard-rkl: [SKIP][403] ([i915#14544] / [i915#3555] / [i915#9323]) -> [SKIP][404] ([i915#3555] / [i915#9323]) [403]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_ccs@ctrl-surf-copy.html [404]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@gem_ccs@ctrl-surf-copy.html * igt@gem_ccs@suspend-resume: - shard-rkl: [SKIP][405] ([i915#14544] / [i915#9323]) -> [SKIP][406] ([i915#9323]) [405]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_ccs@suspend-resume.html [406]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@gem_ccs@suspend-resume.html * igt@gem_ctx_sseu@invalid-sseu: - shard-rkl: [SKIP][407] ([i915#280]) -> [SKIP][408] ([i915#14544] / [i915#280]) [407]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@gem_ctx_sseu@invalid-sseu.html [408]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_ctx_sseu@invalid-sseu.html * igt@gem_exec_balancer@parallel: - shard-rkl: [SKIP][409] ([i915#4525]) -> [SKIP][410] ([i915#14544] / [i915#4525]) +1 other test skip [409]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@gem_exec_balancer@parallel.html [410]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_exec_balancer@parallel.html * igt@gem_exec_balancer@parallel-out-fence: - shard-rkl: [SKIP][411] ([i915#14544] / [i915#4525]) -> [SKIP][412] ([i915#4525]) [411]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_exec_balancer@parallel-out-fence.html [412]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@gem_exec_balancer@parallel-out-fence.html * igt@gem_exec_reloc@basic-gtt-cpu: - shard-rkl: [SKIP][413] ([i915#14544] / [i915#3281]) -> [SKIP][414] ([i915#3281]) +7 other tests skip [413]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_exec_reloc@basic-gtt-cpu.html [414]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@gem_exec_reloc@basic-gtt-cpu.html * igt@gem_lmem_swapping@heavy-random: - shard-rkl: [SKIP][415] ([i915#14544] / [i915#4613]) -> [SKIP][416] ([i915#4613]) +2 other tests skip [415]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_lmem_swapping@heavy-random.html [416]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@gem_lmem_swapping@heavy-random.html * igt@gem_lmem_swapping@random: - shard-rkl: [SKIP][417] ([i915#4613]) -> [SKIP][418] ([i915#14544] / [i915#4613]) +2 other tests skip [417]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@gem_lmem_swapping@random.html [418]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_lmem_swapping@random.html * igt@gem_madvise@dontneed-before-pwrite: - shard-rkl: [SKIP][419] ([i915#14544] / [i915#3282]) -> [SKIP][420] ([i915#3282]) +2 other tests skip [419]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_madvise@dontneed-before-pwrite.html [420]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@gem_madvise@dontneed-before-pwrite.html * igt@gem_pwrite@basic-self: - shard-rkl: [SKIP][421] ([i915#3282]) -> [SKIP][422] ([i915#14544] / [i915#3282]) +2 other tests skip [421]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@gem_pwrite@basic-self.html [422]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_pwrite@basic-self.html * igt@gem_pxp@create-valid-protected-context: - shard-rkl: [SKIP][423] ([i915#14544] / [i915#4270]) -> [SKIP][424] ([i915#4270]) [423]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_pxp@create-valid-protected-context.html [424]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@gem_pxp@create-valid-protected-context.html * igt@gem_pxp@reject-modify-context-protection-off-2: - shard-rkl: [TIMEOUT][425] ([i915#12917] / [i915#12964]) -> [SKIP][426] ([i915#14544] / [i915#4270]) [425]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@gem_pxp@reject-modify-context-protection-off-2.html [426]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_pxp@reject-modify-context-protection-off-2.html * igt@gem_set_tiling_vs_blt@tiled-to-untiled: - shard-rkl: [SKIP][427] ([i915#8411]) -> [SKIP][428] ([i915#14544] / [i915#8411]) +1 other test skip [427]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html [428]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html * igt@gem_userptr_blits@dmabuf-sync: - shard-rkl: [SKIP][429] ([i915#3297] / [i915#3323]) -> [SKIP][430] ([i915#14544] / [i915#3297] / [i915#3323]) [429]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@gem_userptr_blits@dmabuf-sync.html [430]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_userptr_blits@dmabuf-sync.html * igt@gem_userptr_blits@dmabuf-unsync: - shard-rkl: [SKIP][431] ([i915#14544] / [i915#3297]) -> [SKIP][432] ([i915#3297]) +2 other tests skip [431]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gem_userptr_blits@dmabuf-unsync.html [432]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@gem_userptr_blits@dmabuf-unsync.html * igt@gem_userptr_blits@forbidden-operations: - shard-rkl: [SKIP][433] ([i915#3282] / [i915#3297]) -> [SKIP][434] ([i915#14544] / [i915#3282] / [i915#3297]) [433]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@gem_userptr_blits@forbidden-operations.html [434]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_userptr_blits@forbidden-operations.html * igt@gem_userptr_blits@relocations: - shard-rkl: [SKIP][435] ([i915#3281] / [i915#3297]) -> [SKIP][436] ([i915#14544] / [i915#3281] / [i915#3297]) [435]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@gem_userptr_blits@relocations.html [436]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_userptr_blits@relocations.html * igt@gem_userptr_blits@unsync-unmap-cycles: - shard-rkl: [SKIP][437] ([i915#3297]) -> [SKIP][438] ([i915#14544] / [i915#3297]) [437]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@gem_userptr_blits@unsync-unmap-cycles.html [438]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gem_userptr_blits@unsync-unmap-cycles.html * igt@gen9_exec_parse@bb-start-cmd: - shard-rkl: [SKIP][439] ([i915#2527]) -> [SKIP][440] ([i915#14544] / [i915#2527]) +1 other test skip [439]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@gen9_exec_parse@bb-start-cmd.html [440]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@gen9_exec_parse@bb-start-cmd.html * igt@gen9_exec_parse@bb-start-far: - shard-rkl: [SKIP][441] ([i915#14544] / [i915#2527]) -> [SKIP][442] ([i915#2527]) +3 other tests skip [441]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@gen9_exec_parse@bb-start-far.html [442]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@gen9_exec_parse@bb-start-far.html * igt@i915_pm_freq_api@freq-suspend: - shard-rkl: [SKIP][443] ([i915#8399]) -> [SKIP][444] ([i915#14544] / [i915#8399]) [443]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@i915_pm_freq_api@freq-suspend.html [444]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@i915_pm_freq_api@freq-suspend.html * igt@i915_pm_rc6_residency@rc6-accuracy: - shard-rkl: [DMESG-FAIL][445] ([i915#12964]) -> [FAIL][446] ([i915#12964]) +1 other test fail [445]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@i915_pm_rc6_residency@rc6-accuracy.html [446]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@i915_pm_rc6_residency@rc6-accuracy.html * igt@i915_pm_rc6_residency@rc6-idle: - shard-rkl: [SKIP][447] ([i915#14498] / [i915#14544]) -> [SKIP][448] ([i915#14498]) [447]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@i915_pm_rc6_residency@rc6-idle.html [448]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@i915_pm_rc6_residency@rc6-idle.html * igt@i915_query@hwconfig_table: - shard-rkl: [SKIP][449] ([i915#14544] / [i915#6245]) -> [SKIP][450] ([i915#6245]) [449]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@i915_query@hwconfig_table.html [450]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@i915_query@hwconfig_table.html * igt@intel_hwmon@hwmon-read: - shard-rkl: [SKIP][451] ([i915#7707]) -> [SKIP][452] ([i915#14544] / [i915#7707]) [451]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@intel_hwmon@hwmon-read.html [452]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@intel_hwmon@hwmon-read.html * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels: - shard-rkl: [SKIP][453] ([i915#1769] / [i915#3555]) -> [SKIP][454] ([i915#14544]) [453]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html [454]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html * igt@kms_big_fb@4-tiled-16bpp-rotate-0: - shard-rkl: [SKIP][455] ([i915#5286]) -> [SKIP][456] ([i915#14544]) +5 other tests skip [455]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html [456]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html * igt@kms_big_fb@4-tiled-32bpp-rotate-0: - shard-rkl: [SKIP][457] ([i915#14544]) -> [SKIP][458] ([i915#5286]) +2 other tests skip [457]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_big_fb@4-tiled-32bpp-rotate-0.html [458]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_big_fb@4-tiled-32bpp-rotate-0.html * igt@kms_big_fb@linear-64bpp-rotate-90: - shard-rkl: [SKIP][459] ([i915#3638]) -> [SKIP][460] ([i915#14544]) +4 other tests skip [459]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_big_fb@linear-64bpp-rotate-90.html [460]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_big_fb@linear-64bpp-rotate-90.html * igt@kms_big_fb@y-tiled-8bpp-rotate-90: - shard-rkl: [SKIP][461] ([i915#14544]) -> [SKIP][462] ([i915#3638]) +3 other tests skip [461]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html [462]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip: - shard-rkl: [SKIP][463] ([i915#14544]) -> [SKIP][464] +6 other tests skip [463]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html [464]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip: - shard-dg1: [SKIP][465] ([i915#4423] / [i915#4538]) -> [SKIP][466] ([i915#4538]) [465]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-19/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html [466]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-18/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html * igt@kms_ccs@bad-pixel-format-yf-tiled-ccs: - shard-rkl: [SKIP][467] ([i915#14098] / [i915#6095]) -> [SKIP][468] ([i915#14544]) +12 other tests skip [467]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs.html [468]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs.html * igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs: - shard-rkl: [SKIP][469] ([i915#14544]) -> [SKIP][470] ([i915#12313]) +1 other test skip [469]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html [470]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs: - shard-rkl: [SKIP][471] ([i915#14544]) -> [SKIP][472] ([i915#12805]) [471]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html [472]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs: - shard-rkl: [SKIP][473] ([i915#12313]) -> [SKIP][474] ([i915#14544]) [473]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html [474]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2: - shard-rkl: [SKIP][475] ([i915#14098] / [i915#6095]) -> [SKIP][476] ([i915#6095]) +3 other tests skip [475]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html [476]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-8/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html * igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs: - shard-rkl: [SKIP][477] ([i915#14544]) -> [SKIP][478] ([i915#14098] / [i915#6095]) +10 other tests skip [477]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs.html [478]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs.html * igt@kms_chamelium_frames@hdmi-frame-dump: - shard-rkl: [SKIP][479] ([i915#11151] / [i915#7828]) -> [SKIP][480] ([i915#11151] / [i915#14544] / [i915#7828]) +7 other tests skip [479]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_chamelium_frames@hdmi-frame-dump.html [480]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_chamelium_frames@hdmi-frame-dump.html * igt@kms_chamelium_hpd@dp-hpd-storm: - shard-rkl: [SKIP][481] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][482] ([i915#11151] / [i915#7828]) +6 other tests skip [481]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_chamelium_hpd@dp-hpd-storm.html [482]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_chamelium_hpd@dp-hpd-storm.html * igt@kms_chamelium_hpd@hdmi-hpd-fast: - shard-dg1: [SKIP][483] ([i915#11151] / [i915#4423] / [i915#7828]) -> [SKIP][484] ([i915#11151] / [i915#7828]) [483]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-14/igt@kms_chamelium_hpd@hdmi-hpd-fast.html [484]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-13/igt@kms_chamelium_hpd@hdmi-hpd-fast.html * igt@kms_content_protection@legacy: - shard-rkl: [SKIP][485] ([i915#14544]) -> [SKIP][486] ([i915#7118] / [i915#9424]) [485]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_content_protection@legacy.html [486]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_content_protection@legacy.html * igt@kms_content_protection@lic-type-0: - shard-rkl: [SKIP][487] ([i915#9424]) -> [SKIP][488] ([i915#14544]) [487]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_content_protection@lic-type-0.html [488]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_content_protection@lic-type-0.html * igt@kms_content_protection@mei-interface: - shard-dg1: [SKIP][489] ([i915#9424]) -> [SKIP][490] ([i915#9433]) [489]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-19/igt@kms_content_protection@mei-interface.html [490]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-12/igt@kms_content_protection@mei-interface.html * igt@kms_cursor_crc@cursor-offscreen-512x512: - shard-rkl: [SKIP][491] ([i915#13049]) -> [SKIP][492] ([i915#14544]) [491]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_cursor_crc@cursor-offscreen-512x512.html [492]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_cursor_crc@cursor-offscreen-512x512.html * igt@kms_cursor_crc@cursor-rapid-movement-32x32: - shard-rkl: [SKIP][493] ([i915#14544]) -> [SKIP][494] ([i915#3555]) +1 other test skip [493]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html [494]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html * igt@kms_cursor_crc@cursor-rapid-movement-512x170: - shard-rkl: [SKIP][495] ([i915#14544]) -> [SKIP][496] ([i915#13049]) +1 other test skip [495]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html [496]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html * igt@kms_cursor_crc@cursor-rapid-movement-max-size: - shard-rkl: [SKIP][497] ([i915#3555]) -> [SKIP][498] ([i915#14544]) [497]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_cursor_crc@cursor-rapid-movement-max-size.html [498]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-max-size.html * igt@kms_cursor_crc@cursor-sliding-256x85: - shard-rkl: [FAIL][499] ([i915#13566]) -> [SKIP][500] ([i915#14544]) [499]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_cursor_crc@cursor-sliding-256x85.html [500]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-256x85.html * igt@kms_cursor_edge_walk@256x256-left-edge: - shard-rkl: [SKIP][501] ([i915#14544]) -> [DMESG-WARN][502] ([i915#12964]) [501]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_cursor_edge_walk@256x256-left-edge.html [502]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_cursor_edge_walk@256x256-left-edge.html * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy: - shard-rkl: [SKIP][503] -> [SKIP][504] ([i915#14544]) +20 other tests skip [503]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html [504]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size: - shard-rkl: [SKIP][505] ([i915#14544]) -> [SKIP][506] ([i915#4103]) +1 other test skip [505]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html [506]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size: - shard-rkl: [FAIL][507] ([i915#2346]) -> [SKIP][508] ([i915#14544]) [507]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html [508]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html * igt@kms_dirtyfb@drrs-dirtyfb-ioctl: - shard-rkl: [SKIP][509] ([i915#9723]) -> [SKIP][510] ([i915#14544]) [509]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html [510]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html * igt@kms_dp_link_training@non-uhbr-sst: - shard-rkl: [SKIP][511] ([i915#13749]) -> [SKIP][512] ([i915#14544]) [511]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_dp_link_training@non-uhbr-sst.html [512]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_dp_link_training@non-uhbr-sst.html * igt@kms_dp_linktrain_fallback@dp-fallback: - shard-rkl: [SKIP][513] ([i915#13707]) -> [SKIP][514] ([i915#14544]) [513]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_dp_linktrain_fallback@dp-fallback.html [514]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_dp_linktrain_fallback@dp-fallback.html * igt@kms_dsc@dsc-with-bpc-formats: - shard-rkl: [SKIP][515] ([i915#3555] / [i915#3840]) -> [SKIP][516] ([i915#14544]) [515]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_dsc@dsc-with-bpc-formats.html [516]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_dsc@dsc-with-bpc-formats.html * igt@kms_dsc@dsc-with-formats: - shard-rkl: [SKIP][517] ([i915#14544]) -> [SKIP][518] ([i915#3555] / [i915#3840]) [517]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_dsc@dsc-with-formats.html [518]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_dsc@dsc-with-formats.html * igt@kms_dsc@dsc-with-output-formats-with-bpc: - shard-rkl: [SKIP][519] ([i915#3840] / [i915#9053]) -> [SKIP][520] ([i915#14544]) [519]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_dsc@dsc-with-output-formats-with-bpc.html [520]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_dsc@dsc-with-output-formats-with-bpc.html * igt@kms_feature_discovery@dp-mst: - shard-rkl: [SKIP][521] ([i915#9337]) -> [SKIP][522] ([i915#14544] / [i915#9337]) [521]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_feature_discovery@dp-mst.html [522]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_feature_discovery@dp-mst.html * igt@kms_feature_discovery@psr2: - shard-rkl: [SKIP][523] ([i915#14544] / [i915#658]) -> [SKIP][524] ([i915#658]) [523]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_feature_discovery@psr2.html [524]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_feature_discovery@psr2.html * igt@kms_flip@2x-dpms-vs-vblank-race: - shard-rkl: [SKIP][525] ([i915#14544] / [i915#9934]) -> [SKIP][526] ([i915#9934]) +5 other tests skip [525]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_flip@2x-dpms-vs-vblank-race.html [526]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_flip@2x-dpms-vs-vblank-race.html * igt@kms_flip@2x-modeset-vs-vblank-race: - shard-rkl: [SKIP][527] ([i915#9934]) -> [SKIP][528] ([i915#14544] / [i915#9934]) +3 other tests skip [527]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_flip@2x-modeset-vs-vblank-race.html [528]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_flip@2x-modeset-vs-vblank-race.html * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling: - shard-rkl: [SKIP][529] ([i915#14544] / [i915#3555]) -> [DMESG-WARN][530] ([i915#12964]) [529]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html [530]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling: - shard-rkl: [SKIP][531] ([i915#14544] / [i915#3555]) -> [SKIP][532] ([i915#2672] / [i915#3555]) +1 other test skip [531]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling.html [532]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling.html * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling: - shard-rkl: [SKIP][533] ([i915#2672] / [i915#3555]) -> [SKIP][534] ([i915#14544] / [i915#3555]) +2 other tests skip [533]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html [534]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render: - shard-rkl: [SKIP][535] ([i915#14544] / [i915#1849] / [i915#5354]) -> [DMESG-WARN][536] ([i915#12964]) [535]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html [536]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw: - shard-rkl: [SKIP][537] ([i915#14544] / [i915#1849] / [i915#5354]) -> [SKIP][538] ([i915#15102] / [i915#3023]) +12 other tests skip [537]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html [538]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move: - shard-dg2: [SKIP][539] ([i915#10433] / [i915#15102] / [i915#3458]) -> [SKIP][540] ([i915#15102] / [i915#3458]) +4 other tests skip [539]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move.html [540]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-rte: - shard-rkl: [SKIP][541] ([i915#15102] / [i915#3023]) -> [SKIP][542] ([i915#14544] / [i915#1849] / [i915#5354]) +17 other tests skip [541]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html [542]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-pwrite: - shard-dg1: [SKIP][543] -> [SKIP][544] ([i915#4423]) +1 other test skip [543]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-18/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-pwrite.html [544]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-16/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-pwrite.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt: - shard-rkl: [SKIP][545] ([i915#14544] / [i915#1849] / [i915#5354]) -> [SKIP][546] ([i915#1825]) +24 other tests skip [545]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt.html [546]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt: - shard-rkl: [SKIP][547] ([i915#1825]) -> [SKIP][548] ([i915#14544] / [i915#1849] / [i915#5354]) +24 other tests skip [547]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html [548]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html * igt@kms_frontbuffer_tracking@fbcpsr-tiling-4: - shard-rkl: [SKIP][549] ([i915#14544] / [i915#1849] / [i915#5354]) -> [SKIP][550] ([i915#5439]) [549]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html [550]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move: - shard-dg2: [SKIP][551] ([i915#15102] / [i915#3458]) -> [SKIP][552] ([i915#10433] / [i915#15102] / [i915#3458]) +1 other test skip [551]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html [552]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html * igt@kms_hdr@bpc-switch-suspend: - shard-rkl: [SKIP][553] ([i915#14544]) -> [SKIP][554] ([i915#3555] / [i915#8228]) [553]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_hdr@bpc-switch-suspend.html [554]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_hdr@bpc-switch-suspend.html * igt@kms_hdr@brightness-with-hdr: - shard-rkl: [SKIP][555] ([i915#12713]) -> [SKIP][556] ([i915#1187] / [i915#12713]) [555]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_hdr@brightness-with-hdr.html [556]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-3/igt@kms_hdr@brightness-with-hdr.html - shard-dg1: [SKIP][557] ([i915#1187] / [i915#12713]) -> [SKIP][558] ([i915#12713]) [557]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-13/igt@kms_hdr@brightness-with-hdr.html [558]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-18/igt@kms_hdr@brightness-with-hdr.html * igt@kms_hdr@static-toggle: - shard-rkl: [SKIP][559] ([i915#3555] / [i915#8228]) -> [SKIP][560] ([i915#14544]) +1 other test skip [559]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_hdr@static-toggle.html [560]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_hdr@static-toggle.html * igt@kms_joiner@basic-big-joiner: - shard-rkl: [SKIP][561] ([i915#10656]) -> [SKIP][562] ([i915#10656] / [i915#14544]) [561]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_joiner@basic-big-joiner.html [562]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_joiner@basic-big-joiner.html * igt@kms_joiner@invalid-modeset-big-joiner: - shard-rkl: [SKIP][563] ([i915#10656] / [i915#14544]) -> [SKIP][564] ([i915#10656]) [563]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_joiner@invalid-modeset-big-joiner.html [564]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_joiner@invalid-modeset-big-joiner.html * igt@kms_joiner@invalid-modeset-force-big-joiner: - shard-rkl: [SKIP][565] ([i915#12388]) -> [SKIP][566] ([i915#12388] / [i915#14544]) [565]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_joiner@invalid-modeset-force-big-joiner.html [566]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_joiner@invalid-modeset-force-big-joiner.html * igt@kms_multipipe_modeset@basic-max-pipe-crc-check: - shard-rkl: [SKIP][567] ([i915#4070] / [i915#4816]) -> [SKIP][568] ([i915#1839] / [i915#4816]) [567]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html [568]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-8/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html * igt@kms_plane_scaling@2x-scaler-multi-pipe: - shard-rkl: [SKIP][569] -> [SKIP][570] ([i915#14544] / [i915#8152]) [569]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_plane_scaling@2x-scaler-multi-pipe.html [570]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@2x-scaler-multi-pipe.html * igt@kms_plane_scaling@intel-max-src-size: - shard-rkl: [SKIP][571] ([i915#14544] / [i915#6953] / [i915#8152]) -> [SKIP][572] ([i915#6953]) [571]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_plane_scaling@intel-max-src-size.html [572]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_plane_scaling@intel-max-src-size.html * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a: - shard-rkl: [SKIP][573] ([i915#12247]) -> [SKIP][574] ([i915#12247] / [i915#14544]) [573]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a.html [574]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a.html * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b: - shard-rkl: [SKIP][575] ([i915#12247]) -> [SKIP][576] ([i915#12247] / [i915#14544] / [i915#8152]) +1 other test skip [575]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html [576]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html * igt@kms_pm_backlight@fade: - shard-rkl: [SKIP][577] ([i915#5354]) -> [SKIP][578] ([i915#14544] / [i915#5354]) [577]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_pm_backlight@fade.html [578]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_pm_backlight@fade.html * igt@kms_pm_backlight@fade-with-suspend: - shard-rkl: [SKIP][579] ([i915#14544] / [i915#5354]) -> [SKIP][580] ([i915#5354]) +1 other test skip [579]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_pm_backlight@fade-with-suspend.html [580]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_pm_backlight@fade-with-suspend.html * igt@kms_pm_dc@dc5-dpms-negative: - shard-rkl: [SKIP][581] ([i915#13441] / [i915#14544]) -> [DMESG-WARN][582] ([i915#12964]) [581]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_pm_dc@dc5-dpms-negative.html [582]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_pm_dc@dc5-dpms-negative.html * igt@kms_pm_dc@dc5-psr: - shard-rkl: [SKIP][583] ([i915#9685]) -> [SKIP][584] ([i915#14544] / [i915#9685]) [583]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_pm_dc@dc5-psr.html [584]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_pm_dc@dc5-psr.html * igt@kms_pm_dc@dc9-dpms: - shard-rkl: [SKIP][585] ([i915#4281]) -> [SKIP][586] ([i915#3361]) [585]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_pm_dc@dc9-dpms.html [586]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-8/igt@kms_pm_dc@dc9-dpms.html * igt@kms_pm_lpsp@screens-disabled: - shard-rkl: [SKIP][587] ([i915#8430]) -> [SKIP][588] ([i915#14544] / [i915#8430]) [587]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@kms_pm_lpsp@screens-disabled.html [588]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_pm_lpsp@screens-disabled.html * igt@kms_pm_rpm@modeset-lpsp-stress: - shard-rkl: [SKIP][589] ([i915#14544] / [i915#15073]) -> [SKIP][590] ([i915#15073]) [589]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_pm_rpm@modeset-lpsp-stress.html [590]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_pm_rpm@modeset-lpsp-stress.html * igt@kms_pm_rpm@system-suspend-modeset: - shard-rkl: [INCOMPLETE][591] ([i915#14419]) -> [SKIP][592] ([i915#14544]) [591]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_pm_rpm@system-suspend-modeset.html [592]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_pm_rpm@system-suspend-modeset.html * igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf: - shard-dg1: [SKIP][593] ([i915#11520] / [i915#4423]) -> [SKIP][594] ([i915#11520]) [593]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-16/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf.html [594]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-13/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf.html * igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area: - shard-rkl: [SKIP][595] ([i915#11520] / [i915#14544]) -> [SKIP][596] ([i915#11520]) +5 other tests skip [595]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html [596]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html * igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area: - shard-rkl: [SKIP][597] ([i915#11520]) -> [SKIP][598] ([i915#11520] / [i915#14544]) +6 other tests skip [597]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html [598]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html * igt@kms_psr@fbc-psr2-primary-blt: - shard-rkl: [SKIP][599] ([i915#1072] / [i915#9732]) -> [SKIP][600] ([i915#1072] / [i915#14544] / [i915#9732]) +18 other tests skip [599]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_psr@fbc-psr2-primary-blt.html [600]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_psr@fbc-psr2-primary-blt.html * igt@kms_psr@pr-cursor-plane-onoff: - shard-rkl: [SKIP][601] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][602] ([i915#1072] / [i915#9732]) +15 other tests skip [601]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_psr@pr-cursor-plane-onoff.html [602]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_psr@pr-cursor-plane-onoff.html * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270: - shard-rkl: [SKIP][603] ([i915#5289]) -> [SKIP][604] ([i915#14544]) [603]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html [604]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90: - shard-rkl: [SKIP][605] ([i915#14544]) -> [SKIP][606] ([i915#5289]) [605]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html [606]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html * igt@kms_setmode@basic-clone-single-crtc: - shard-rkl: [SKIP][607] ([i915#14544] / [i915#3555]) -> [SKIP][608] ([i915#3555]) [607]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_setmode@basic-clone-single-crtc.html [608]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_setmode@basic-clone-single-crtc.html * igt@kms_vrr@seamless-rr-switch-drrs: - shard-rkl: [SKIP][609] ([i915#14544]) -> [SKIP][610] ([i915#9906]) [609]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_vrr@seamless-rr-switch-drrs.html [610]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-2/igt@kms_vrr@seamless-rr-switch-drrs.html * igt@kms_writeback@writeback-check-output: - shard-rkl: [SKIP][611] ([i915#2437]) -> [SKIP][612] ([i915#14544] / [i915#2437]) [611]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-8/igt@kms_writeback@writeback-check-output.html [612]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_writeback@writeback-check-output.html * igt@kms_writeback@writeback-check-output-xrgb2101010: - shard-rkl: [SKIP][613] ([i915#2437] / [i915#9412]) -> [SKIP][614] ([i915#14544] / [i915#2437] / [i915#9412]) [613]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-3/igt@kms_writeback@writeback-check-output-xrgb2101010.html [614]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@kms_writeback@writeback-check-output-xrgb2101010.html * igt@kms_writeback@writeback-fb-id-xrgb2101010: - shard-rkl: [SKIP][615] ([i915#14544] / [i915#2437] / [i915#9412]) -> [SKIP][616] ([i915#2437] / [i915#9412]) [615]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@kms_writeback@writeback-fb-id-xrgb2101010.html [616]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@kms_writeback@writeback-fb-id-xrgb2101010.html * igt@kms_writeback@writeback-pixel-formats: - shard-dg1: [SKIP][617] ([i915#2437] / [i915#4423] / [i915#9412]) -> [SKIP][618] ([i915#2437] / [i915#9412]) [617]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-dg1-16/igt@kms_writeback@writeback-pixel-formats.html [618]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-dg1-17/igt@kms_writeback@writeback-pixel-formats.html * igt@perf@unprivileged-single-ctx-counters: - shard-rkl: [SKIP][619] ([i915#14544] / [i915#2433]) -> [SKIP][620] ([i915#2433]) [619]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-6/igt@perf@unprivileged-single-ctx-counters.html [620]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-5/igt@perf@unprivileged-single-ctx-counters.html * igt@prime_vgem@basic-fence-read: - shard-rkl: [SKIP][621] ([i915#3291] / [i915#3708]) -> [SKIP][622] ([i915#14544] / [i915#3291] / [i915#3708]) +1 other test skip [621]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@prime_vgem@basic-fence-read.html [622]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@prime_vgem@basic-fence-read.html * igt@sriov_basic@enable-vfs-bind-unbind-each: - shard-rkl: [SKIP][623] ([i915#9917]) -> [SKIP][624] ([i915#14544] / [i915#9917]) [623]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-2/igt@sriov_basic@enable-vfs-bind-unbind-each.html [624]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@sriov_basic@enable-vfs-bind-unbind-each.html * igt@testdisplay: - shard-rkl: [DMESG-WARN][625] ([i915#12964]) -> [SKIP][626] ([i915#14544]) +1 other test skip [625]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17377/shard-rkl-5/igt@testdisplay.html [626]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/shard-rkl-6/igt@testdisplay.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [i915#10055]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10055 [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307 [i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433 [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434 [i915#10647]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10647 [i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656 [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072 [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078 [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151 [i915#11190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11190 [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520 [i915#11521]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11521 [i915#11527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11527 [i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681 [i915#1187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1187 [i915#12169]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12169 [i915#12247]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12247 [i915#12276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12276 [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313 [i915#12339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12339 [i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343 [i915#12353]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12353 [i915#12388]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12388 [i915#12394]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12394 [i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257 [i915#12655]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12655 [i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713 [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755 [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805 [i915#12916]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12916 [i915#12917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12917 [i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964 [i915#13026]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13026 [i915#13029]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13029 [i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046 [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049 [i915#13179]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13179 [i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356 [i915#13363]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13363 [i915#13441]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13441 [i915#13522]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13522 [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566 [i915#13691]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13691 [i915#13707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13707 [i915#13749]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13749 [i915#13786]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13786 [i915#13820]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13820 [i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958 [i915#14073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14073 [i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098 [i915#14104]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14104 [i915#14118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14118 [i915#14259]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14259 [i915#14419]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14419 [i915#14433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14433 [i915#14498]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14498 [i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544 [i915#14545]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14545 [i915#14561]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14561 [i915#14712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14712 [i915#14809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14809 [i915#15073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15073 [i915#15095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15095 [i915#15102]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15102 [i915#15104]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15104 [i915#15106]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15106 [i915#15119]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15119 [i915#15131]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15131 [i915#15132]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15132 [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769 [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825 [i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839 [i915#1849]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1849 [i915#1850]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1850 [i915#2346]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2346 [i915#2433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2433 [i915#2437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2437 [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527 [i915#2582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2582 [i915#2587]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2587 [i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672 [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280 [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856 [i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023 [i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116 [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281 [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282 [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291 [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297 [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299 [i915#3323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3323 [i915#3361]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3361 [i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458 [i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539 [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555 [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637 [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638 [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708 [i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742 [i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828 [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840 [i915#3936]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3936 [i915#4036]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4036 [i915#4070]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4070 [i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077 [i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079 [i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083 [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103 [i915#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212 [i915#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213 [i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270 [i915#4281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4281 [i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349 [i915#4387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4387 [i915#4391]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4391 [i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423 [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525 [i915#4537]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4537 [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538 [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613 [i915#4771]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4771 [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812 [i915#4816]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4816 [i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852 [i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860 [i915#4879]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4879 [i915#4880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4880 [i915#4885]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4885 [i915#5138]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5138 [i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190 [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286 [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289 [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354 [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439 [i915#5493]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5493 [i915#5784]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5784 [i915#5956]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5956 [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095 [i915#6188]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6188 [i915#6230]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6230 [i915#6245]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6245 [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301 [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334 [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524 [i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658 [i915#6621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6621 [i915#6805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6805 [i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944 [i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953 [i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116 [i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118 [i915#7294]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7294 [i915#7387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7387 [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697 [i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707 [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828 [i915#8152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8152 [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228 [i915#8381]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8381 [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399 [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411 [i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428 [i915#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430 [i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516 [i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555 [i915#8623]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8623 [i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708 [i915#8812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8812 [i915#8821]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8821 [i915#8825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8825 [i915#8826]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8826 [i915#9053]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9053 [i915#9067]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9067 [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323 [i915#9337]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9337 [i915#9412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9412 [i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424 [i915#9433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9433 [i915#9531]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9531 [i915#9581]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9581 [i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685 [i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723 [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732 [i915#9766]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9766 [i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812 [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906 [i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917 [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934 Build changes ------------- * Linux: CI_DRM_17377 -> Patchwork_155472v2 CI-20190529: 20190529 CI_DRM_17377: 1f32baee68e7a3010d6092c3303516354f7b2298 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_8588: 8588 Patchwork_155472v2: 1f32baee68e7a3010d6092c3303516354f7b2298 @ git://anongit.freedesktop.org/gfx-ci/linux piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_155472v2/index.html [-- Attachment #2: Type: text/html, Size: 214668 bytes --] ^ permalink raw reply [flat|nested] 27+ messages in thread
end of thread, other threads:[~2025-11-07 18:45 UTC | newest]
Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-16 18:53 [PATCH v2 00/10] drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess Ville Syrjala
2025-10-16 18:53 ` [PATCH v2 01/10] drm/i915/overlay: Drop the DIRTYFB flush Ville Syrjala
2025-10-16 18:54 ` [PATCH v2 02/10] drm/i915/overlay: Switch to intel_frontbuffer_flip() Ville Syrjala
2025-10-16 18:54 ` [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare, complete}() Ville Syrjala
2025-10-29 13:32 ` [PATCH v2 03/10] drm/i915/frontbuffer: Nuke intel_frontbuffer_flip_{prepare,complete}() Jani Nikula
2025-10-29 13:32 ` Jani Nikula
2025-10-16 18:54 ` [PATCH v2 04/10] drm/i915/frontbuffer: Turn intel_bo_flush_if_display() into a frontbuffer operation Ville Syrjala
2025-10-29 13:33 ` Jani Nikula
2025-10-16 18:54 ` [PATCH v2 05/10] drm/i915/frontbuffer: Handle the dirtyfb cache flush inside intel_frontbuffer_flush() Ville Syrjala
2025-10-29 13:34 ` Jani Nikula
2025-10-16 18:54 ` [PATCH v2 06/10] drm/i915/frontbuffef: Split fb_tracking.lock into two Ville Syrjala
2025-10-29 13:35 ` Jani Nikula
2025-10-16 18:54 ` [PATCH v2 07/10] drm/i915/frontbuffer: Extract intel_frontbuffer_ref() Ville Syrjala
2025-10-29 13:35 ` Jani Nikula
2025-10-16 18:54 ` [PATCH v2 08/10] drm/i915/frontbuffer: Add intel_frontbuffer::display Ville Syrjala
2025-10-29 13:36 ` Jani Nikula
2025-10-29 13:37 ` Jani Nikula
2025-10-16 18:54 ` [PATCH v2 09/10] drm/i915/frontbuffer: Fix intel_frontbuffer lifetime handling Ville Syrjala
2025-10-29 13:51 ` Jani Nikula
2025-10-29 15:00 ` Jani Nikula
2025-11-06 13:48 ` Jani Nikula
2025-11-06 14:27 ` Ville Syrjälä
2025-11-07 18:45 ` Ville Syrjälä
2025-10-16 18:54 ` [PATCH v2 10/10] drm/i915/gem: s/i915_gem_object_get_frontbuffer/i915_gem_object_frontbuffer_lookup/ Ville Syrjala
2025-10-29 13:37 ` Jani Nikula
2025-10-16 21:49 ` ✓ i915.CI.BAT: success for drm/i915/frontbuffer: Fix the intel_frontbuffer lifetime mess (rev2) Patchwork
2025-10-17 8:34 ` ✗ i915.CI.Full: failure " Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).