[PATCH v7 00/26] drm/i915/display: All patches to make PREEMPT_RT work on i915 + xe.

Maarten Lankhorst
2026-03-10T11:57:32Z

New version with patch from Sebastian to fix starvation of irq_work.

Still need feedback on the vblank approach, and check to see if there are some bugs left.
Hoping this passes BAT on i915, and still mostly the full run on xe.

Maarten Lankhorst (20):
drm/vblank_work: Add methods to schedule vblank_work in 2 stages
drm/vblank: Add a 2-stage version of drm_crtc_arm_vblank_event
drm/intel/display: Make intel_crtc_arm_vblank_event static
drm/intel/display: Convert vblank event handling to 2-stage arming
drm/i915/display: Move vblank put until after critical section
drm/i915/display: Remove locking from intel_vblank_evade critical
section
drm/i915/display: Handle vlv dsi workaround in scanline_in_safe_range
too
drm/i915/display: Make get_vblank_counter use intel_de_read_fw()
drm/i915/display: Do not take uncore lock in i915_get_vblank_counter
drm/i915/display: Make icl_dsi_frame_update use _fw too
drm/i915/display: Use intel_de_read/write_fw in colorops
drm/i915/display: Use intel_de_write_fw in intel_pipe_fastset
drm/i915/display: Make set_pipeconf use the fw variants
drm/i915/display: Fix intel_lpe_audio_irq_handler for PREEMPT-RT
drm/i915/gt: Fix selftests on PREEMPT_RT
drm/i915/gt: Set stop_timeout() correctly on PREEMPT-RT
drm/i915/display: Remove uncore lock from vlv_atomic_update_fifo
drm/i915: Use sleeping selftests for igt_atomic on PREEMPT_RT
PREEMPT_RT injection
FOR-CI: bump MAX_STACK_TRACE_ENTRIES

Mike Galbraith (1):
drm/i915: Use preempt_disable/enable_rt() where recommended

Sebastian Andrzej Siewior (5):
drm/i915/gt: Use spin_lock_irq() instead of local_irq_disable() +
spin_lock()
drm/i915: Drop the irqs_disabled() check
drm/i915/guc: Consider also RCU depth in busy loop.
Revert "drm/i915: Depend on !PREEMPT_RT."
drm/i915/gt: Add a spinlock to prevent starvation of irq_work.

drivers/gpu/drm/drm_vblank.c | 61 +++++++++-
drivers/gpu/drm/drm_vblank_work.c | 106 ++++++++++++----
drivers/gpu/drm/i915/Kconfig | 1 -
drivers/gpu/drm/i915/Kconfig.debug | 15 ---
drivers/gpu/drm/i915/display/i9xx_wm.c | 4 -
drivers/gpu/drm/i915/display/icl_dsi.c | 4 +-
drivers/gpu/drm/i915/display/intel_color.c | 6 +-
drivers/gpu/drm/i915/display/intel_crtc.c | 86 ++++++-------
drivers/gpu/drm/i915/display/intel_crtc.h | 1 -
drivers/gpu/drm/i915/display/intel_cursor.c | 8 +-
drivers/gpu/drm/i915/display/intel_de.h | 8 ++
drivers/gpu/drm/i915/display/intel_display.c | 46 +++----
.../gpu/drm/i915/display/intel_lpe_audio.c | 2 +-
drivers/gpu/drm/i915/display/intel_vblank.c | 115 ++++++++++--------
drivers/gpu/drm/i915/display/intel_vblank.h | 1 +
drivers/gpu/drm/i915/display/intel_vrr.c | 18 +--
drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 8 +-
.../gpu/drm/i915/gt/intel_breadcrumbs_types.h | 1 +
drivers/gpu/drm/i915/gt/intel_engine_cs.c | 2 +-
.../drm/i915/gt/intel_execlists_submission.c | 17 +--
drivers/gpu/drm/i915/gt/selftest_engine_pm.c | 8 +-
drivers/gpu/drm/i915/gt/uc/intel_guc.h | 2 +-
drivers/gpu/drm/i915/i915_request.c | 2 -
drivers/gpu/drm/i915/intel_uncore.h | 26 ++--
drivers/gpu/drm/i915/selftests/igt_atomic.c | 7 ++
drivers/gpu/drm/xe/Kconfig.debug | 5 +
.../drm/xe/compat-i915-headers/intel_uncore.h | 7 ++
include/drm/drm_vblank.h | 14 ++-
include/drm/drm_vblank_work.h | 12 ++
kernel/Kconfig.preempt | 4 +-
lib/Kconfig.debug | 4 +-
31 files changed, 391 insertions(+), 210 deletions(-)

--
2.51.0