* [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix.
@ 2026-02-25 13:19 Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 01/25] drm/vblank_work: Add methods to schedule vblank_work in 2 stages Maarten Lankhorst
` (25 more replies)
0 siblings, 26 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
This is PURELY a CI run. I want to see what happens if I change
the igt_atomic selftests to use a sleeping context instead. I do
believe that there should be no functional change, and it's not
necessary to convert the uncore lock to a raw spinlock.
I hope I'm right!
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 (4):
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."
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_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 +-
29 files changed, 383 insertions(+), 209 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 01/25] drm/vblank_work: Add methods to schedule vblank_work in 2 stages
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 02/25] drm/vblank: Add a 2-stage version of drm_crtc_arm_vblank_event Maarten Lankhorst
` (24 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
In case of vblank evasion in intel/display, it's necessary to
perform some work in advance, so the critical section will always run in
constant time on PREEMPT_RT.
By preparing all the work in advance, the part that needs to finish in
constant time only has to write a single variable instead. This allows
PREEMPT_RT to keep the interrupts disabled at the most critical part,
without completely reworking all locks to be raw spinlocks.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/drm_vblank_work.c | 106 ++++++++++++++++++++++--------
include/drm/drm_vblank_work.h | 12 ++++
2 files changed, 92 insertions(+), 26 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank_work.c b/drivers/gpu/drm/drm_vblank_work.c
index 70f0199251ea0..6acb240b9c112 100644
--- a/drivers/gpu/drm/drm_vblank_work.c
+++ b/drivers/gpu/drm/drm_vblank_work.c
@@ -54,7 +54,8 @@ void drm_handle_vblank_works(struct drm_vblank_crtc *vblank)
assert_spin_locked(&vblank->dev->event_lock);
list_for_each_entry_safe(work, next, &vblank->pending_work, node) {
- if (!drm_vblank_passed(count, work->count))
+ /* READ_ONCE pairs with WRITE_ONCE in drm_vblank_work_enable() */
+ if (!READ_ONCE(work->armed) || !drm_vblank_passed(count, work->count))
continue;
list_del_init(&work->node);
@@ -86,30 +87,8 @@ void drm_vblank_cancel_pending_works(struct drm_vblank_crtc *vblank)
wake_up_all(&vblank->work_wait_queue);
}
-/**
- * drm_vblank_work_schedule - schedule a vblank work
- * @work: vblank work to schedule
- * @count: target vblank count
- * @nextonmiss: defer until the next vblank if target vblank was missed
- *
- * Schedule @work for execution once the crtc vblank count reaches @count.
- *
- * If the crtc vblank count has already reached @count and @nextonmiss is
- * %false the work starts to execute immediately.
- *
- * If the crtc vblank count has already reached @count and @nextonmiss is
- * %true the work is deferred until the next vblank (as if @count has been
- * specified as crtc vblank count + 1).
- *
- * If @work is already scheduled, this function will reschedule said work
- * using the new @count. This can be used for self-rearming work items.
- *
- * Returns:
- * %1 if @work was successfully (re)scheduled, %0 if it was either already
- * scheduled or cancelled, or a negative error code on failure.
- */
-int drm_vblank_work_schedule(struct drm_vblank_work *work,
- u64 count, bool nextonmiss)
+static int __drm_vblank_work_schedule(struct drm_vblank_work *work,
+ u64 count, bool nextonmiss, bool armed)
{
struct drm_vblank_crtc *vblank = work->vblank;
struct drm_device *dev = vblank->dev;
@@ -139,6 +118,7 @@ int drm_vblank_work_schedule(struct drm_vblank_work *work,
rescheduling = true;
}
+ work->armed = armed;
work->count = count;
cur_vbl = drm_vblank_count(dev, vblank->pipe);
passed = drm_vblank_passed(cur_vbl, count);
@@ -147,7 +127,7 @@ int drm_vblank_work_schedule(struct drm_vblank_work *work,
"crtc %d vblank %llu already passed (current %llu)\n",
vblank->pipe, count, cur_vbl);
- if (!nextonmiss && passed) {
+ if (!nextonmiss && passed && armed) {
drm_vblank_put(dev, vblank->pipe);
ret = kthread_queue_work(vblank->worker, &work->base);
@@ -167,8 +147,82 @@ int drm_vblank_work_schedule(struct drm_vblank_work *work,
wake_up_all(&vblank->work_wait_queue);
return ret;
}
+
+/**
+ * drm_vblank_work_schedule - schedule a vblank work
+ * @work: vblank work to schedule
+ * @count: target vblank count
+ * @nextonmiss: defer until the next vblank if target vblank was missed
+ *
+ * Schedule @work for execution once the crtc vblank count reaches @count.
+ *
+ * If the crtc vblank count has already reached @count and @nextonmiss is
+ * %false the work starts to execute immediately.
+ *
+ * If the crtc vblank count has already reached @count and @nextonmiss is
+ * %true the work is deferred until the next vblank (as if @count has been
+ * specified as crtc vblank count + 1).
+ *
+ * If @work is already scheduled, this function will reschedule said work
+ * using the new @count. This can be used for self-rearming work items.
+ *
+ * Returns:
+ * %1 if @work was successfully (re)scheduled, %0 if it was either already
+ * scheduled or cancelled, or a negative error code on failure.
+ */
+int drm_vblank_work_schedule(struct drm_vblank_work *work,
+ u64 count, bool nextonmiss)
+{
+ return __drm_vblank_work_schedule(work, count, nextonmiss, true);
+}
EXPORT_SYMBOL(drm_vblank_work_schedule);
+
+/**
+ * drm_vblank_work_schedule_disabled - schedule a vblank work, withoug enabling
+ * @work: vblank work to schedule
+ * @count: target vblank count
+ *
+ * Schedule @work for execution once the crtc vblank count reaches @count.
+ *
+ * The vblank work will not be scheduled until drm_vblank_work_enable() is called.
+ * If the crtc vblank count has already reached @count, the work will still
+ * not be scheduled until the first following vblank.
+ *
+ * If @work is already scheduled, this function will reschedule said work
+ * using the new @count. This can be used for self-rearming work items.
+ *
+ * Returns:
+ * %1 if @work was successfully (re)scheduled, %0 if it was either already
+ * scheduled or cancelled, or a negative error code on failure.
+ */
+int drm_vblank_work_schedule_disabled(struct drm_vblank_work *work, u64 count)
+{
+ return __drm_vblank_work_schedule(work, count, true, false);
+}
+EXPORT_SYMBOL(drm_vblank_work_schedule_disabled);
+
+/**
+ * drm_vblank_work_enable - enable vblank work
+ * @work: vblank work to enable
+ *
+ * This function is specifically only for when drm_vblank_work_schedule_disabled() is
+ * called. It allows for the work to be armed in any context, without any locks.
+ *
+ * The work will be signalled earliest at the @count argument, if it has been passed,
+ * it will signalled at the next vblank.
+ *
+ * This is particularly useful for PREEMPT_RT, where the spin_lock is converted
+ * into a sleeping rtmutex, and vblank evasion requires some work to be
+ * scheduled on completion with interrupts disabled.
+ */
+void drm_vblank_work_enable(struct drm_vblank_work *work)
+{
+ WARN_ON(work->armed);
+ WRITE_ONCE(work->armed, true);
+}
+EXPORT_SYMBOL(drm_vblank_work_enable);
+
/**
* drm_vblank_work_cancel_sync - cancel a vblank work and wait for it to
* finish executing
diff --git a/include/drm/drm_vblank_work.h b/include/drm/drm_vblank_work.h
index e04d436b72973..e19351200da24 100644
--- a/include/drm/drm_vblank_work.h
+++ b/include/drm/drm_vblank_work.h
@@ -47,6 +47,14 @@ struct drm_vblank_work {
*/
int cancelling;
+ /**
+ * @armed: If false, the work item has been added to the
+ * drm_vblank_crtc.pending_work list, but will not yet be signalled.
+ *
+ * Call drm_vblank_work_enable() to fire on next vblank.
+ */
+ bool armed;
+
/**
* @node: The position of this work item in
* &drm_vblank_crtc.pending_work.
@@ -64,6 +72,10 @@ struct drm_vblank_work {
int drm_vblank_work_schedule(struct drm_vblank_work *work,
u64 count, bool nextonmiss);
+
+int drm_vblank_work_schedule_disabled(struct drm_vblank_work *work, u64 count);
+void drm_vblank_work_enable(struct drm_vblank_work *work);
+
void drm_vblank_work_init(struct drm_vblank_work *work, struct drm_crtc *crtc,
void (*func)(struct kthread_work *work));
bool drm_vblank_work_cancel_sync(struct drm_vblank_work *work);
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 02/25] drm/vblank: Add a 2-stage version of drm_crtc_arm_vblank_event
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 01/25] drm/vblank_work: Add methods to schedule vblank_work in 2 stages Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 03/25] drm/intel/display: Make intel_crtc_arm_vblank_event static Maarten Lankhorst
` (23 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
When trying to fix the hardware programming in intel/display, I had
to take all the vblank locks with local_irqs_disabled(). This
required converting the entire vblank code to raw spinlocks.
In the alternative approach, do all preparations in advance, and only
enable the vblank_event with interrupts disabled, this requires only
a simple write and prevents a complete re-architecture of the code.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/drm_vblank.c | 61 +++++++++++++++++++++++++++++++++++-
include/drm/drm_vblank.h | 14 ++++++++-
2 files changed, 73 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index f78bf37f1e0a7..388d94e2e961f 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1118,12 +1118,68 @@ void drm_crtc_arm_vblank_event(struct drm_crtc *crtc,
assert_spin_locked(&dev->event_lock);
+ WARN_ON(e->postponed);
e->pipe = pipe;
e->sequence = drm_crtc_accurate_vblank_count(crtc) + 1;
list_add_tail(&e->base.link, &dev->vblank_event_list);
}
EXPORT_SYMBOL(drm_crtc_arm_vblank_event);
+/**
+ * drm_crtc_prepare_arm_vblank_event - arm vblank event *before* pageflip.
+ * @crtc: the source CRTC of the vblank event
+ * @e: the event to send
+ *
+ * See drm_crtc_arm_vblank_event(). This function is a 2-stage version of
+ * that call. This function is called *BEFORE* programming the hardware.
+ *
+ * After programming, call drm_crtc_arm_prepared_vblank_event() and the
+ * event will be scheduled on the next vblank.
+ *
+ * This is mainly useful for code that has to run on PREEMPT_RT kernels,
+ * with interrupts disabled, since all vblank spinlocks are converted to
+ * rtmutexes, and code running with irqs disabled cannot take any vblank lock.
+ *
+ * It also increases determinism for any hardware
+ * programming, since no vblank related locks are taking when arming.
+ */
+void drm_crtc_prepare_arm_vblank_event(struct drm_crtc *crtc,
+ struct drm_pending_vblank_event *e)
+{
+ drm_crtc_arm_vblank_event(crtc, e);
+
+ /* Set the flag, so that the event is not fired yet */
+ e->postponed = true;
+}
+EXPORT_SYMBOL(drm_crtc_prepare_arm_vblank_event);
+
+/**
+ * drm_crtc_arm_prepared_vblank_event - arm prepared vblank event *after* pageflip.
+ * @crtc: the source CRTC of the vblank event
+ * @e: the event to send
+ *
+ * See drm_crtc_prepare_arm_vblank_event(). This function is a 2-stage version of
+ * that call. This function is called directly *AFTER* programming the hardware.
+ *
+ * Before this function is called, drm_crtc_prepare_arm_vblank_event() should be
+ * called instead.
+ *
+ * This is mainly useful for code that has to run on PREEMPT_RT kernels,
+ * with interrupts disabled, since all vblank spinlocks are converted to
+ * rtmutexes, and code running with irqs disabled cannot take any vblank lock.
+ *
+ * It also increases determinism for any hardware
+ * programming, since no vblank related locks are taking when arming.
+ */
+void drm_crtc_arm_prepared_vblank_event(struct drm_pending_vblank_event *e)
+{
+ WARN_ON(!e->postponed);
+
+ /* remove the flag to be processed as a normal event */
+ WRITE_ONCE(e->postponed, false);
+}
+EXPORT_SYMBOL(drm_crtc_arm_prepared_vblank_event);
+
/**
* drm_crtc_send_vblank_event - helper to send vblank event after pageflip
* @crtc: the source CRTC of the vblank event
@@ -1381,6 +1437,8 @@ void drm_crtc_vblank_off(struct drm_crtc *crtc)
list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
if (e->pipe != pipe)
continue;
+
+ WARN_ON(e->postponed);
drm_dbg_core(dev, "Sending premature vblank event on disable: "
"wanted %llu, current %llu\n",
e->sequence, seq);
@@ -1886,7 +1944,8 @@ static void drm_handle_vblank_events(struct drm_device *dev, unsigned int pipe)
seq = drm_vblank_count_and_time(dev, pipe, &now);
list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
- if (e->pipe != pipe)
+ /* Matches WRITE_ONCE in drm_crtc_arm_prepared_vblank_event() */
+ if (e->pipe != pipe || READ_ONCE(e->postponed))
continue;
if (!drm_vblank_passed(seq, e->sequence))
continue;
diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h
index 2fcef9c0f5b1b..956d5621eb7f9 100644
--- a/include/drm/drm_vblank.h
+++ b/include/drm/drm_vblank.h
@@ -53,6 +53,13 @@ struct drm_pending_vblank_event {
* @sequence: frame event should be triggered at
*/
u64 sequence;
+
+ /**
+ * @postponed: whether drm_crtc_prepare_arm_vblank_event() is called,
+ * and drm_crtc_arm_prepared_vblank_event has yet to be called to arm.
+ */
+ bool postponed;
+
/**
* @event: Actual event which will be sent to userspace.
*/
@@ -294,7 +301,12 @@ int drm_crtc_next_vblank_start(struct drm_crtc *crtc, ktime_t *vblanktime);
void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
struct drm_pending_vblank_event *e);
void drm_crtc_arm_vblank_event(struct drm_crtc *crtc,
- struct drm_pending_vblank_event *e);
+ struct drm_pending_vblank_event *e);
+
+void drm_crtc_prepare_arm_vblank_event(struct drm_crtc *crtc,
+ struct drm_pending_vblank_event *e);
+void drm_crtc_arm_prepared_vblank_event(struct drm_pending_vblank_event *e);
+
void drm_vblank_set_event(struct drm_pending_vblank_event *e,
u64 *seq,
ktime_t *now);
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 03/25] drm/intel/display: Make intel_crtc_arm_vblank_event static
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 01/25] drm/vblank_work: Add methods to schedule vblank_work in 2 stages Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 02/25] drm/vblank: Add a 2-stage version of drm_crtc_arm_vblank_event Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 04/25] drm/intel/display: Convert vblank event handling to 2-stage arming Maarten Lankhorst
` (22 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
Only used inside intel_crtc.c now, so no need to export it any more.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/display/intel_crtc.c | 2 +-
drivers/gpu/drm/i915/display/intel_crtc.h | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i915/display/intel_crtc.c
index b8189cd5d864a..296f7a7b962fa 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc.c
@@ -638,7 +638,7 @@ static void dbg_vblank_evade(struct intel_crtc *crtc, ktime_t end)
static void dbg_vblank_evade(struct intel_crtc *crtc, ktime_t end) {}
#endif
-void intel_crtc_arm_vblank_event(struct intel_crtc_state *crtc_state)
+static void intel_crtc_arm_vblank_event(struct intel_crtc_state *crtc_state)
{
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
unsigned long irqflags;
diff --git a/drivers/gpu/drm/i915/display/intel_crtc.h b/drivers/gpu/drm/i915/display/intel_crtc.h
index 12507b51ee77e..f65cbafe2b42a 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc.h
+++ b/drivers/gpu/drm/i915/display/intel_crtc.h
@@ -33,7 +33,6 @@ int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode,
int usecs);
int intel_scanlines_to_usecs(const struct drm_display_mode *adjusted_mode,
int scanlines);
-void intel_crtc_arm_vblank_event(struct intel_crtc_state *crtc_state);
void intel_crtc_prepare_vblank_event(struct intel_crtc_state *crtc_state,
struct drm_pending_vblank_event **event);
u32 intel_crtc_max_vblank_count(const struct intel_crtc_state *crtc_state);
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 04/25] drm/intel/display: Convert vblank event handling to 2-stage arming
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (2 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 03/25] drm/intel/display: Make intel_crtc_arm_vblank_event static Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 05/25] drm/i915/display: Move vblank put until after critical section Maarten Lankhorst
` (21 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
This is converts the vblank functions to be called with interrupts
disabled, even on PREEMPT_RT kernels.
Because the PREEMPT_RT kernel converts all spinlocks to rt-mutexes,
the normal vblank functions cannot be used inside the critical section.
Instead, prepare the vblank at the start, and then enable the vblank
work after the hardware programming is completed.
This allows us to keep programming the hardware with interrupts
disabled, and still schedule completion on PREEMPT_RT on next vblank.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/display/intel_crtc.c | 84 ++++++++++++-----------
1 file changed, 44 insertions(+), 40 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i915/display/intel_crtc.c
index 296f7a7b962fa..ca85b6fe50c6f 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc.c
@@ -480,6 +480,10 @@ static void intel_crtc_vblank_work_init(struct intel_crtc_state *crtc_state)
drm_vblank_work_init(&crtc_state->vblank_work, &crtc->base,
intel_crtc_vblank_work);
+
+ drm_vblank_work_schedule_disabled(&crtc_state->vblank_work,
+ drm_crtc_accurate_vblank_count(&crtc->base) + 1);
+
/*
* Interrupt latency is critical for getting the vblank
* work executed as early as possible during the vblank.
@@ -525,6 +529,21 @@ int intel_scanlines_to_usecs(const struct drm_display_mode *adjusted_mode,
adjusted_mode->crtc_clock);
}
+static void intel_crtc_arm_vblank_event(struct intel_crtc_state *crtc_state)
+{
+ struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
+ unsigned long irqflags;
+
+ if (!crtc_state->uapi.event)
+ return;
+
+ drm_WARN_ON(crtc->base.dev, drm_crtc_vblank_get(&crtc->base) != 0);
+
+ spin_lock_irqsave(&crtc->base.dev->event_lock, irqflags);
+ drm_crtc_prepare_arm_vblank_event(&crtc->base, crtc_state->uapi.event);
+ spin_unlock_irqrestore(&crtc->base.dev->event_lock, irqflags);
+}
+
/**
* intel_pipe_update_start() - start update of a set of display registers
* @state: the atomic state
@@ -561,6 +580,8 @@ void intel_pipe_update_start(struct intel_atomic_state *state,
if (intel_crtc_needs_vblank_work(new_crtc_state))
intel_crtc_vblank_work_init(new_crtc_state);
+ else
+ intel_crtc_arm_vblank_event(new_crtc_state);
if (state->base.legacy_cursor_update) {
struct intel_plane *plane;
@@ -638,23 +659,6 @@ static void dbg_vblank_evade(struct intel_crtc *crtc, ktime_t end)
static void dbg_vblank_evade(struct intel_crtc *crtc, ktime_t end) {}
#endif
-static void intel_crtc_arm_vblank_event(struct intel_crtc_state *crtc_state)
-{
- struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
- unsigned long irqflags;
-
- if (!crtc_state->uapi.event)
- return;
-
- drm_WARN_ON(crtc->base.dev, drm_crtc_vblank_get(&crtc->base) != 0);
-
- spin_lock_irqsave(&crtc->base.dev->event_lock, irqflags);
- drm_crtc_arm_vblank_event(&crtc->base, crtc_state->uapi.event);
- spin_unlock_irqrestore(&crtc->base.dev->event_lock, irqflags);
-
- crtc_state->uapi.event = NULL;
-}
-
void intel_crtc_prepare_vblank_event(struct intel_crtc_state *crtc_state,
struct drm_pending_vblank_event **event)
{
@@ -708,29 +712,10 @@ void intel_pipe_update_end(struct intel_atomic_state *state,
* event outside of the critical section - the spinlock might spin for a
* while ... */
if (intel_crtc_needs_vblank_work(new_crtc_state)) {
- drm_vblank_work_schedule(&new_crtc_state->vblank_work,
- drm_crtc_accurate_vblank_count(&crtc->base) + 1,
- false);
- } else {
- intel_crtc_arm_vblank_event(new_crtc_state);
- }
-
- if (state->base.legacy_cursor_update) {
- struct intel_plane *plane;
- struct intel_plane_state *old_plane_state;
- int i;
-
- for_each_old_intel_plane_in_state(state, plane, old_plane_state, i) {
- if (old_plane_state->hw.crtc == &crtc->base &&
- old_plane_state->unpin_work.vblank) {
- drm_vblank_work_schedule(&old_plane_state->unpin_work,
- drm_crtc_accurate_vblank_count(&crtc->base) + 1,
- false);
-
- /* Remove plane from atomic state, cleanup/free is done from vblank worker. */
- memset(&state->base.planes[i], 0, sizeof(state->base.planes[i]));
- }
- }
+ drm_vblank_work_enable(&new_crtc_state->vblank_work);
+ } else if (new_crtc_state->uapi.event) {
+ drm_crtc_arm_prepared_vblank_event(new_crtc_state->uapi.event);
+ new_crtc_state->uapi.event = NULL;
}
/*
@@ -754,6 +739,25 @@ void intel_pipe_update_end(struct intel_atomic_state *state,
local_irq_enable();
+ /* Run after local_irq_enable(), not timing sensitive */
+ if (state->base.legacy_cursor_update) {
+ struct intel_plane *plane;
+ struct intel_plane_state *old_plane_state;
+ int i;
+
+ for_each_old_intel_plane_in_state(state, plane, old_plane_state, i) {
+ if (old_plane_state->hw.crtc == &crtc->base &&
+ old_plane_state->unpin_work.vblank) {
+ drm_vblank_work_schedule(&old_plane_state->unpin_work,
+ drm_crtc_accurate_vblank_count(&crtc->base) + 1,
+ false);
+
+ /* Remove plane from atomic state, cleanup/free is done from vblank worker. */
+ memset(&state->base.planes[i], 0, sizeof(state->base.planes[i]));
+ }
+ }
+ }
+
if (intel_parent_vgpu_active(display))
goto out;
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 05/25] drm/i915/display: Move vblank put until after critical section
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (3 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 04/25] drm/intel/display: Convert vblank event handling to 2-stage arming Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 06/25] drm/i915/display: Remove locking from intel_vblank_evade " Maarten Lankhorst
` (20 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
drm_crtc_vblank_put may take some locks, this should probably
not be the first thing we do after entering the time sensitive
part.
A better place is after programming is completed. Add a flag
to put the vblank after completion.
In the case of drm_vblank_work_schedule, we may not even need
to disable the vblank interrupt any more if it takes its own
reference.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/i915/display/intel_cursor.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index 2c5d917fbd7e9..3e84a2078a0a7 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -816,6 +816,7 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
to_intel_crtc_state(crtc->base.state);
struct intel_crtc_state *new_crtc_state;
struct intel_vblank_evade_ctx evade;
+ bool has_vblank = false;
int ret;
/*
@@ -913,6 +914,8 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
intel_psr_lock(crtc_state);
if (!drm_WARN_ON(display->drm, drm_crtc_vblank_get(&crtc->base))) {
+ has_vblank = true;
+
/*
* TODO: maybe check if we're still in PSR
* and skip the vblank evasion entirely?
@@ -922,8 +925,6 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
local_irq_disable();
intel_vblank_evade(&evade);
-
- drm_crtc_vblank_put(&crtc->base);
} else {
local_irq_disable();
}
@@ -939,6 +940,9 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
intel_psr_unlock(crtc_state);
+ if (has_vblank)
+ drm_crtc_vblank_put(&crtc->base);
+
if (old_plane_state->ggtt_vma != new_plane_state->ggtt_vma) {
drm_vblank_work_init(&old_plane_state->unpin_work, &crtc->base,
intel_cursor_unpin_work);
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 06/25] drm/i915/display: Remove locking from intel_vblank_evade critical section
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (4 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 05/25] drm/i915/display: Move vblank put until after critical section Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 07/25] drm/i915/display: Handle vlv dsi workaround in scanline_in_safe_range too Maarten Lankhorst
` (19 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
finish_wait() may take a lock, which means that it can take any amount
of time. On PREEMPT-RT we should not be taking any lock after disabling
preemption, so ensure that the completion is done before disabling
interrupts.
This also has the benefit of making vblank evasion more deterministic,
by performing the final vblank check after all locking is done.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/display/intel_crtc.c | 2 +-
drivers/gpu/drm/i915/display/intel_vblank.c | 30 +++++++++------------
drivers/gpu/drm/i915/display/intel_vblank.h | 1 +
3 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i915/display/intel_crtc.c
index ca85b6fe50c6f..1022c2cf4eec2 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc.c
@@ -688,7 +688,7 @@ void intel_pipe_update_end(struct intel_atomic_state *state,
struct intel_crtc_state *new_crtc_state =
intel_atomic_get_new_crtc_state(state, crtc);
enum pipe pipe = crtc->pipe;
- int scanline_end = intel_get_crtc_scanline(crtc);
+ int scanline_end = __intel_get_crtc_scanline(crtc);
u32 end_vbl_count = intel_crtc_get_vblank_counter(crtc);
ktime_t end_vbl_time = ktime_get();
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c
index 1b7cfe226ff8f..73676d8ccec8b 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
@@ -241,7 +241,7 @@ int intel_crtc_scanline_offset(const struct intel_crtc_state *crtc_state)
* intel_de_read_fw(), only for fast reads of display block, no need for
* forcewake etc.
*/
-static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
+int __intel_get_crtc_scanline(struct intel_crtc *crtc)
{
struct intel_display *display = to_intel_display(crtc);
struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc->base);
@@ -732,6 +732,16 @@ void intel_vblank_evade_init(const struct intel_crtc_state *old_crtc_state,
evade->min -= vblank_delay;
}
+static bool scanline_in_safe_range(struct intel_vblank_evade_ctx *evade, int *scanline, bool unlocked)
+{
+ if (unlocked)
+ *scanline = intel_get_crtc_scanline(evade->crtc);
+ else
+ *scanline = __intel_get_crtc_scanline(evade->crtc);
+
+ return *scanline < evade->min || *scanline > evade->max;
+}
+
/* must be called with vblank interrupt already enabled! */
int intel_vblank_evade(struct intel_vblank_evade_ctx *evade)
{
@@ -739,24 +749,12 @@ int intel_vblank_evade(struct intel_vblank_evade_ctx *evade)
struct intel_display *display = to_intel_display(crtc);
long timeout = msecs_to_jiffies_timeout(1);
wait_queue_head_t *wq = drm_crtc_vblank_waitqueue(&crtc->base);
- DEFINE_WAIT(wait);
int scanline;
if (evade->min <= 0 || evade->max <= 0)
return 0;
- for (;;) {
- /*
- * prepare_to_wait() has a memory barrier, which guarantees
- * other CPUs can see the task state update by the time we
- * read the scanline.
- */
- prepare_to_wait(wq, &wait, TASK_UNINTERRUPTIBLE);
-
- scanline = intel_get_crtc_scanline(crtc);
- if (scanline < evade->min || scanline > evade->max)
- break;
-
+ while (!scanline_in_safe_range(evade, &scanline, false)) {
if (!timeout) {
drm_dbg_kms(display->drm,
"Potential atomic update failure on pipe %c\n",
@@ -766,13 +764,11 @@ int intel_vblank_evade(struct intel_vblank_evade_ctx *evade)
local_irq_enable();
- timeout = schedule_timeout(timeout);
+ timeout = wait_event_timeout(*wq, scanline_in_safe_range(evade, &scanline, true), timeout);
local_irq_disable();
}
- finish_wait(wq, &wait);
-
/*
* On VLV/CHV DSI the scanline counter would appear to
* increment approx. 1/3 of a scanline before start of vblank.
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.h b/drivers/gpu/drm/i915/display/intel_vblank.h
index 98d04cacd65f8..aa1974400e9fc 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.h
+++ b/drivers/gpu/drm/i915/display/intel_vblank.h
@@ -38,6 +38,7 @@ u32 g4x_get_vblank_counter(struct drm_crtc *crtc);
bool intel_crtc_get_vblank_timestamp(struct drm_crtc *crtc, int *max_error,
ktime_t *vblank_time, bool in_vblank_irq);
int intel_get_crtc_scanline(struct intel_crtc *crtc);
+int __intel_get_crtc_scanline(struct intel_crtc *crtc);
void intel_wait_for_pipe_scanline_stopped(struct intel_crtc *crtc);
void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc);
void intel_crtc_update_active_timings(const struct intel_crtc_state *crtc_state,
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 07/25] drm/i915/display: Handle vlv dsi workaround in scanline_in_safe_range too
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (5 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 06/25] drm/i915/display: Remove locking from intel_vblank_evade " Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 08/25] drm/i915: Use preempt_disable/enable_rt() where recommended Maarten Lankhorst
` (18 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
Now that we have a macro, might as well handle the VLV dsi workaround
too.
This makes the vblank evasion code slightly more deterministic, by not
looping with interrupts disabled.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/i915/display/intel_vblank.c | 36 ++++++++++-----------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c
index 73676d8ccec8b..3eb6418723a84 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
@@ -739,6 +739,24 @@ static bool scanline_in_safe_range(struct intel_vblank_evade_ctx *evade, int *sc
else
*scanline = __intel_get_crtc_scanline(evade->crtc);
+ /*
+ * On VLV/CHV DSI the scanline counter would appear to
+ * increment approx. 1/3 of a scanline before start of vblank.
+ * The registers still get latched at start of vblank however.
+ * This means we must not write any registers on the first
+ * line of vblank (since not the whole line is actually in
+ * vblank). And unfortunately we can't use the interrupt to
+ * wait here since it will fire too soon. We could use the
+ * frame start interrupt instead since it will fire after the
+ * critical scanline, but that would require more changes
+ * in the interrupt code. So for now we'll just do the nasty
+ * thing and poll for the bad scanline to pass us by.
+ *
+ * FIXME figure out if BXT+ DSI suffers from this as well
+ */
+ if (evade->need_vlv_dsi_wa && *scanline == evade->vblank_start)
+ return false;
+
return *scanline < evade->min || *scanline > evade->max;
}
@@ -769,24 +787,6 @@ int intel_vblank_evade(struct intel_vblank_evade_ctx *evade)
local_irq_disable();
}
- /*
- * On VLV/CHV DSI the scanline counter would appear to
- * increment approx. 1/3 of a scanline before start of vblank.
- * The registers still get latched at start of vblank however.
- * This means we must not write any registers on the first
- * line of vblank (since not the whole line is actually in
- * vblank). And unfortunately we can't use the interrupt to
- * wait here since it will fire too soon. We could use the
- * frame start interrupt instead since it will fire after the
- * critical scanline, but that would require more changes
- * in the interrupt code. So for now we'll just do the nasty
- * thing and poll for the bad scanline to pass us by.
- *
- * FIXME figure out if BXT+ DSI suffers from this as well
- */
- while (evade->need_vlv_dsi_wa && scanline == evade->vblank_start)
- scanline = intel_get_crtc_scanline(crtc);
-
return scanline;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 08/25] drm/i915: Use preempt_disable/enable_rt() where recommended
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (6 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 07/25] drm/i915/display: Handle vlv dsi workaround in scanline_in_safe_range too Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 09/25] drm/i915/display: Make get_vblank_counter use intel_de_read_fw() Maarten Lankhorst
` (17 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
From: Mike Galbraith <umgwanakikbuti@gmail.com>
Mario Kleiner suggest in commit
ad3543ede630f ("drm/intel: Push get_scanout_position() timestamping into kms driver.")
a spots where preemption should be disabled on PREEMPT_RT. The
difference is that on PREEMPT_RT the intel_uncore::lock disables neither
preemption nor interrupts and so region remains preemptible.
The area covers only register reads and writes. The part that worries me
is:
- __intel_get_crtc_scanline() the worst case is 100us if no match is
found.
- intel_crtc_scanlines_since_frame_timestamp() not sure how long this
may take in the worst case.
It was in the RT queue for a while and nobody complained.
Disable preemption on PREEPMPT_RT during timestamping.
[bigeasy: patch description.]
Cc: Mario Kleiner <mario.kleiner.de@gmail.com>
Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/i915/display/intel_vblank.c | 43 ++++++++++++++++-----
1 file changed, 33 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c
index 3eb6418723a84..8263cefaa0fb6 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
@@ -316,6 +316,20 @@ static void intel_vblank_section_exit(struct intel_display *display)
struct intel_uncore *uncore = to_intel_uncore(display->drm);
spin_unlock(&uncore->lock);
}
+
+static void intel_vblank_section_enter_irqf(struct intel_display *display, unsigned long *flags)
+ __acquires(i915->uncore.lock)
+{
+ struct intel_uncore *uncore = to_intel_uncore(display->drm);
+ spin_lock_irqsave(&uncore->lock, *flags);
+}
+
+static void intel_vblank_section_exit_irqf(struct intel_display *display, unsigned long flags)
+ __releases(i915->uncore.lock)
+{
+ struct intel_uncore *uncore = to_intel_uncore(display->drm);
+ spin_unlock_irqrestore(&uncore->lock, flags);
+}
#else
static void intel_vblank_section_enter(struct intel_display *display)
{
@@ -324,6 +338,17 @@ static void intel_vblank_section_enter(struct intel_display *display)
static void intel_vblank_section_exit(struct intel_display *display)
{
}
+
+static void intel_vblank_section_enter_irqf(struct intel_display *display, unsigned long *flags)
+{
+ *flags = 0;
+}
+
+static void intel_vblank_section_exit_irqf(struct intel_display *display, unsigned long flags)
+{
+ if (flags)
+ return;
+}
#endif
static bool i915_get_crtc_scanoutpos(struct drm_crtc *_crtc,
@@ -360,10 +385,10 @@ static bool i915_get_crtc_scanoutpos(struct drm_crtc *_crtc,
* timing critical raw register reads, potentially with
* preemption disabled, so the following code must not block.
*/
- local_irq_save(irqflags);
- intel_vblank_section_enter(display);
+ intel_vblank_section_enter_irqf(display, &irqflags);
- /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */
+ if (IS_ENABLED(CONFIG_PREEMPT_RT))
+ preempt_disable();
/* Get optional system timestamp before query. */
if (stime)
@@ -427,10 +452,10 @@ static bool i915_get_crtc_scanoutpos(struct drm_crtc *_crtc,
if (etime)
*etime = ktime_get();
- /* preempt_enable_rt() should go right here in PREEMPT_RT patchset. */
+ if (IS_ENABLED(CONFIG_PREEMPT_RT))
+ preempt_enable();
- intel_vblank_section_exit(display);
- local_irq_restore(irqflags);
+ intel_vblank_section_exit_irqf(display, irqflags);
/*
* While in vblank, position will be negative
@@ -468,13 +493,11 @@ int intel_get_crtc_scanline(struct intel_crtc *crtc)
unsigned long irqflags;
int position;
- local_irq_save(irqflags);
- intel_vblank_section_enter(display);
+ intel_vblank_section_enter_irqf(display, &irqflags);
position = __intel_get_crtc_scanline(crtc);
- intel_vblank_section_exit(display);
- local_irq_restore(irqflags);
+ intel_vblank_section_exit_irqf(display, irqflags);
return position;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 09/25] drm/i915/display: Make get_vblank_counter use intel_de_read_fw()
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (7 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 08/25] drm/i915: Use preempt_disable/enable_rt() where recommended Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 10/25] drm/i915/display: Do not take uncore lock in i915_get_vblank_counter Maarten Lankhorst
` (16 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
Fixes the following lockdep splat on PREEMPT_RT:
<3> BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
<3> in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1373, name: xe_module_load
<3> preempt_count: 1, expected: 0
<3> RCU nest depth: 0, expected: 0
<4> 11 locks held by xe_module_load/1373:
<4> #0: ffff888107b691a0 (&dev->mutex){....}-{3:3}, at: __driver_attach+0x104/0x220
<4> #1: ffff88813cd30280 (&dev->clientlist_mutex){+.+.}-{3:3}, at: drm_client_register+0x32/0xe0
<4> #2: ffffffff837f88f8 (registration_lock){+.+.}-{3:3}, at: register_framebuffer+0x1b/0x50
<4> #3: ffffffff835985e0 (console_lock){+.+.}-{0:0}, at: fbcon_fb_registered+0x6f/0x90
<4> #4: ffff88812589e6a0 (&helper->lock){+.+.}-{3:3}, at: __drm_fb_helper_restore_fbdev_mode_unlocked+0x7b/0x110
<4> #5: ffff88813cd30158 (&dev->master_mutex){+.+.}-{3:3}, at: drm_master_internal_acquire+0x20/0x50
<4> #6: ffff88812589e488 (&client->modeset_mutex){+.+.}-{3:3}, at: drm_client_modeset_commit_locked+0x2a/0x1b0
<4> #7: ffffc9000031eef0 (crtc_ww_class_acquire){+.+.}-{0:0}, at: drm_client_modeset_commit_atomic+0x4c/0x2b0
<4> #8: ffffc9000031ef18 (crtc_ww_class_mutex){+.+.}-{3:3}, at: drm_client_modeset_commit_atomic+0x4c/0x2b0
<4> #9: ffff888114f7b8b8 (&intel_dp->psr.lock){+.+.}-{3:3}, at: intel_psr_lock+0xc5/0xf0 [xe]
<4> #10: ffff88812a0cbbc0 (&wl->lock){+.+.}-{2:2}, at: intel_dmc_wl_get+0x3c/0x140 [xe]
This splat will happen otherwise on all tracepoints too, for similar reasons.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/display/intel_vblank.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c
index 8263cefaa0fb6..e204c260b9aef 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
@@ -132,7 +132,7 @@ u32 g4x_get_vblank_counter(struct drm_crtc *crtc)
if (!vblank->max_vblank_count)
return 0;
- return intel_de_read(display, PIPE_FRMCOUNT_G4X(display, pipe));
+ return intel_de_read_fw(display, PIPE_FRMCOUNT_G4X(display, pipe));
}
static u32 intel_crtc_scanlines_since_frame_timestamp(struct intel_crtc *crtc)
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 10/25] drm/i915/display: Do not take uncore lock in i915_get_vblank_counter
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (8 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 09/25] drm/i915/display: Make get_vblank_counter use intel_de_read_fw() Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 11/25] drm/i915/display: Make icl_dsi_frame_update use _fw too Maarten Lankhorst
` (15 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
This fixes a lockdep splat that occurs in the code that should be run
with interrupts disabled. The uncore lock should not be taken and
released repeatedly in a timing sensitive path.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/display/intel_de.h | 8 ++++++
drivers/gpu/drm/i915/display/intel_vblank.c | 4 +--
drivers/gpu/drm/i915/intel_uncore.h | 26 +++++++++++++------
| 7 +++++
4 files changed, 35 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_de.h b/drivers/gpu/drm/i915/display/intel_de.h
index f30f3f8ebee1d..8990c2c778efe 100644
--- a/drivers/gpu/drm/i915/display/intel_de.h
+++ b/drivers/gpu/drm/i915/display/intel_de.h
@@ -68,6 +68,14 @@ intel_de_read64_2x32(struct intel_display *display,
return val;
}
+static inline u64
+intel_de_read64_2x32_fw(struct intel_display *display,
+ i915_reg_t lower_reg, i915_reg_t upper_reg)
+{
+ return intel_uncore_read64_2x32_fw(__to_uncore(display),
+ lower_reg, upper_reg);
+}
+
static inline void
intel_de_posting_read(struct intel_display *display, i915_reg_t reg)
{
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c
index e204c260b9aef..749127ae7794c 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
@@ -109,8 +109,8 @@ u32 i915_get_vblank_counter(struct drm_crtc *crtc)
* we get a low value that's stable across two reads of the high
* register.
*/
- frame = intel_de_read64_2x32(display, PIPEFRAMEPIXEL(display, pipe),
- PIPEFRAME(display, pipe));
+ frame = intel_de_read64_2x32_fw(display, PIPEFRAMEPIXEL(display, pipe),
+ PIPEFRAME(display, pipe));
pixel = frame & PIPE_PIXEL_MASK;
frame = (frame >> PIPE_FRAME_LOW_SHIFT) & 0xffffff;
diff --git a/drivers/gpu/drm/i915/intel_uncore.h b/drivers/gpu/drm/i915/intel_uncore.h
index fafc2ca9a2376..507398a562649 100644
--- a/drivers/gpu/drm/i915/intel_uncore.h
+++ b/drivers/gpu/drm/i915/intel_uncore.h
@@ -449,13 +449,28 @@ static inline void intel_uncore_rmw_fw(struct intel_uncore *uncore,
intel_uncore_write_fw(uncore, reg, val);
}
+static inline u64
+intel_uncore_read64_2x32_fw(struct intel_uncore *uncore,
+ i915_reg_t lower_reg, i915_reg_t upper_reg)
+{
+ u32 upper, lower, old_upper, loop = 0;
+ upper = intel_uncore_read_fw(uncore, upper_reg);
+ do {
+ old_upper = upper;
+ lower = intel_uncore_read_fw(uncore, lower_reg);
+ upper = intel_uncore_read_fw(uncore, upper_reg);
+ } while (upper != old_upper && loop++ < 2);
+
+ return (u64)upper << 32 | lower;
+}
+
static inline u64
intel_uncore_read64_2x32(struct intel_uncore *uncore,
i915_reg_t lower_reg, i915_reg_t upper_reg)
{
- u32 upper, lower, old_upper, loop = 0;
enum forcewake_domains fw_domains;
unsigned long flags;
+ u64 ret;
fw_domains = intel_uncore_forcewake_for_reg(uncore, lower_reg,
FW_REG_READ);
@@ -466,17 +481,12 @@ intel_uncore_read64_2x32(struct intel_uncore *uncore,
spin_lock_irqsave(&uncore->lock, flags);
intel_uncore_forcewake_get__locked(uncore, fw_domains);
- upper = intel_uncore_read_fw(uncore, upper_reg);
- do {
- old_upper = upper;
- lower = intel_uncore_read_fw(uncore, lower_reg);
- upper = intel_uncore_read_fw(uncore, upper_reg);
- } while (upper != old_upper && loop++ < 2);
+ ret = intel_uncore_read64_2x32_fw(uncore, lower_reg, upper_reg);
intel_uncore_forcewake_put__locked(uncore, fw_domains);
spin_unlock_irqrestore(&uncore->lock, flags);
- return (u64)upper << 32 | lower;
+ return ret;
}
static inline int intel_uncore_write_and_verify(struct intel_uncore *uncore,
--git a/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h b/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
index c5e198ace7bce..620d69c097dfb 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
@@ -73,6 +73,13 @@ intel_uncore_read64_2x32(struct intel_uncore *uncore,
return (u64)upper << 32 | lower;
}
+static inline u64
+intel_uncore_read64_2x32_fw(struct intel_uncore *uncore,
+ i915_reg_t i915_lower_reg, i915_reg_t i915_upper_reg)
+{
+ return intel_uncore_read64_2x32(uncore, i915_lower_reg, i915_upper_reg);
+}
+
static inline void intel_uncore_posting_read(struct intel_uncore *uncore,
i915_reg_t i915_reg)
{
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 11/25] drm/i915/display: Make icl_dsi_frame_update use _fw too
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (9 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 10/25] drm/i915/display: Do not take uncore lock in i915_get_vblank_counter Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 12/25] drm/i915/display: Use intel_de_read/write_fw in colorops Maarten Lankhorst
` (14 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
Don't use the dmc lock inside the vblank critical section,
not even as last call.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/i915/display/icl_dsi.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c
index c043279796781..ec4f5bb19450c 100644
--- a/drivers/gpu/drm/i915/display/icl_dsi.c
+++ b/drivers/gpu/drm/i915/display/icl_dsi.c
@@ -242,8 +242,8 @@ void icl_dsi_frame_update(struct intel_crtc_state *crtc_state)
else
return;
- intel_de_rmw(display, DSI_CMD_FRMCTL(port), 0,
- DSI_FRAME_UPDATE_REQUEST);
+ intel_de_rmw_fw(display, DSI_CMD_FRMCTL(port), 0,
+ DSI_FRAME_UPDATE_REQUEST);
}
static void dsi_program_swing_and_deemphasis(struct intel_encoder *encoder)
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 12/25] drm/i915/display: Use intel_de_read/write_fw in colorops
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (10 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 11/25] drm/i915/display: Make icl_dsi_frame_update use _fw too Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 13/25] drm/i915/display: Use intel_de_write_fw in intel_pipe_fastset Maarten Lankhorst
` (13 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
Using the _fw variants fixes a module load error on PTL:
<4> [363.690050] Call Trace:
<4> [363.690052] <TASK>
<4> [363.690055] dump_stack_lvl+0x91/0xf0
<4> [363.690067] dump_stack+0x10/0x20
<4> [363.690074] __might_resched+0x174/0x260
<4> [363.690087] rt_spin_lock+0x63/0x200
<4> [363.690092] ? intel_dmc_wl_get+0x3c/0x140 [xe]
<4> [363.690470] ? __lock_acquire+0x1195/0x2860
<4> [363.690487] intel_dmc_wl_get+0x3c/0x140 [xe]
<4> [363.690842] intel_color_plane_commit_arm+0xbc/0x140 [xe]
<4> [363.691246] icl_plane_update_arm+0x23f/0x280 [xe]
<4> [363.691605] intel_plane_update_arm+0x74/0x170 [xe]
<4> [363.691970] intel_crtc_planes_update_arm+0x3cb/0x4c0 [xe]
<4> [363.692338] intel_update_crtc+0x1c3/0x840 [xe]
<4> [363.692742] ? intel_pre_update_crtc+0x2ce/0x470 [xe]
<4> [363.693125] ? intel_enable_crtc+0x123/0x150 [xe]
<4> [363.693508] skl_commit_modeset_enables+0x4c4/0x720 [xe]
<4> [363.693888] intel_atomic_commit_tail+0xd9d/0x1b30 [xe]
<4> [363.694274] intel_atomic_commit+0x2e8/0x330 [xe]
<4> [363.694621] ? intel_atomic_commit+0x2e8/0x330 [xe]
<4> [363.694956] drm_atomic_commit+0xaf/0xf0
<4> [363.694962] ? __pfx___drm_printfn_info+0x10/0x10
<4> [363.694978] drm_client_modeset_commit_atomic+0x25c/0x2b0
<4> [363.695018] drm_client_modeset_commit_locked+0x63/0x1b0
<4> [363.695029] drm_client_modeset_commit+0x26/0x50
<4> [363.695035] __drm_fb_helper_restore_fbdev_mode_unlocked+0xdc/0x110
<4> [363.695045] drm_fb_helper_set_par+0x2f/0x50
<4> [363.695052] intel_fbdev_set_par+0x39/0x90 [xe]
<4> [363.695365] fbcon_init+0x283/0x680
<4> [363.695382] visual_init+0xf2/0x190
<4> [363.695396] do_bind_con_driver.isra.0+0x1f1/0x4c0
<4> [363.695416] do_take_over_console+0x181/0x220
<4> [363.695422] ? vprintk_default+0x1d/0x30
<4> [363.695436] do_fbcon_takeover+0x85/0x160
<4> [363.695447] do_fb_registered+0x24c/0x2b0
<4> [363.695460] fbcon_fb_registered+0x3a/0x90
<4> [363.695469] do_register_framebuffer+0x216/0x320
<4> [363.695488] register_framebuffer+0x23/0x50
<4> [363.695494] __drm_fb_helper_initial_config_and_unlock+0x3ea/0x670
<4> [363.695502] ? trace_hardirqs_on+0x1e/0xd0
<4> [363.695526] drm_fb_helper_initial_config+0x3f/0x50
<4> [363.695534] drm_fbdev_client_hotplug+0x80/0xd0
<4> [363.695543] drm_client_register+0x8a/0xe0
<4> [363.695556] drm_fbdev_client_setup+0x127/0x1f0
<4> [363.695563] drm_client_setup+0xa7/0xe0
<4> [363.695569] drm_client_setup_with_color_mode+0x24/0x40
<4> [363.695575] intel_fbdev_setup+0x1c6/0x510 [xe]
<4> [363.695857] intel_display_driver_register+0xb5/0x100 [xe]
<4> [363.696188] ? __pfx___drm_printfn_dbg+0x10/0x10
<4> [363.696194] ? intel_display_driver_register+0x2e/0x100 [xe]
<4> [363.696515] xe_display_register+0x29/0x40 [xe]
<4> [363.696858] xe_device_probe+0x51a/0x9e0 [xe]
<4> [363.697102] ? __drmm_add_action+0x98/0x110
<4> [363.697108] ? __pfx___drmm_mutex_release+0x10/0x10
<4> [363.697116] ? __drmm_add_action_or_reset+0x1e/0x50
<4> [363.697130] xe_pci_probe+0x396/0x620 [xe]
<4> [363.697423] local_pci_probe+0x47/0xb0
<4> [363.697431] pci_device_probe+0xf3/0x260
<4> [363.697444] really_probe+0xf1/0x3c0
<4> [363.697451] __driver_probe_device+0x8c/0x180
<4> [363.697458] driver_probe_device+0x24/0xd0
<4> [363.697464] __driver_attach+0x10f/0x220
<4> [363.697468] ? __pfx___driver_attach+0x10/0x10
<4> [363.697472] bus_for_each_dev+0x7f/0xe0
<4> [363.697484] driver_attach+0x1e/0x30
<4> [363.697487] bus_add_driver+0x154/0x290
<4> [363.697498] driver_register+0x5e/0x130
<4> [363.697504] __pci_register_driver+0x84/0xa0
<4> [363.697509] xe_register_pci_driver+0x23/0x30 [xe]
<4> [363.697762] xe_init+0x2c/0x110 [xe]
<4> [363.698007] ? __pfx_xe_init+0x10/0x10 [xe]
<4> [363.698239] do_one_initcall+0x60/0x3f0
<4> [363.698250] ? __kmalloc_cache_noprof+0x470/0x690
<4> [363.698267] do_init_module+0x97/0x2b0
<4> [363.698275] load_module+0x2d08/0x2e30
<4> [363.698280] ? __kernel_read+0x164/0x310
<4> [363.698312] ? kernel_read_file+0x2ca/0x340
<4> [363.698328] init_module_from_file+0x96/0xe0
<4> [363.698330] ? init_module_from_file+0x96/0xe0
<4> [363.698357] idempotent_init_module+0x11d/0x340
<4> [363.698384] __x64_sys_finit_module+0x73/0xe0
<4> [363.698393] x64_sys_call+0x1e3d/0x26a0
<4> [363.698399] do_syscall_64+0x93/0xab0
<4> [363.698413] ? ext4_llseek+0xc3/0x130
<4> [363.698425] ? ksys_lseek+0x55/0xd0
<4> [363.698438] ? do_syscall_64+0x1b7/0xab0
<4> [363.698444] ? switch_fpu_return+0xea/0x150
<4> [363.698454] ? do_syscall_64+0x1b7/0xab0
<4> [363.698465] ? kernfs_fop_read_iter+0x197/0x210
<4> [363.698470] ? rw_verify_area+0x16f/0x200
<4> [363.698482] ? vfs_read+0x22a/0x360
<4> [363.698498] ? do_syscall_64+0x1b7/0xab0
<4> [363.698506] ? ksys_read+0x72/0xf0
<4> [363.698520] ? do_syscall_64+0x1b7/0xab0
<4> [363.698526] ? do_syscall_64+0x1b7/0xab0
<4> [363.698532] ? do_syscall_64+0x1b7/0xab0
<4> [363.698535] ? exc_page_fault+0xbd/0x2c0
<4> [363.698545] entry_SYSCALL_64_after_hwframe+0x76/0x7e
<4> [363.698549] RIP: 0033:0x715af255025d
And a similar backtrace in hsw_color_commit_arm().
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/i915/display/intel_color.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_color.c b/drivers/gpu/drm/i915/display/intel_color.c
index e7950655434b8..9cbc719370456 100644
--- a/drivers/gpu/drm/i915/display/intel_color.c
+++ b/drivers/gpu/drm/i915/display/intel_color.c
@@ -1050,7 +1050,7 @@ static void hsw_color_commit_arm(struct intel_dsb *dsb,
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
struct intel_display *display = to_intel_display(crtc);
- intel_de_write(display, GAMMA_MODE(crtc->pipe),
+ intel_de_write_fw(display, GAMMA_MODE(crtc->pipe),
crtc_state->gamma_mode);
intel_de_write_fw(display, PIPE_CSC_MODE(crtc->pipe),
@@ -4078,7 +4078,7 @@ static void glk_load_lut_3d(struct intel_dsb *dsb,
int i, lut_size = drm_color_lut32_size(blob);
enum pipe pipe = crtc->pipe;
- if (!dsb && intel_de_read(display, LUT_3D_CTL(pipe)) & LUT_3D_READY) {
+ if (!dsb && intel_de_read_fw(display, LUT_3D_CTL(pipe)) & LUT_3D_READY) {
drm_err(display->drm, "[CRTC:%d:%s] 3D LUT not ready, not loading LUTs\n",
crtc->base.base.id, crtc->base.name);
return;
@@ -4096,7 +4096,7 @@ static void glk_lut_3d_commit(struct intel_dsb *dsb, struct intel_crtc *crtc, bo
enum pipe pipe = crtc->pipe;
u32 val = 0;
- if (!dsb && intel_de_read(display, LUT_3D_CTL(pipe)) & LUT_3D_READY) {
+ if (!dsb && intel_de_read_fw(display, LUT_3D_CTL(pipe)) & LUT_3D_READY) {
drm_err(display->drm, "[CRTC:%d:%s] 3D LUT not ready, not committing change\n",
crtc->base.base.id, crtc->base.name);
return;
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 13/25] drm/i915/display: Use intel_de_write_fw in intel_pipe_fastset
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (11 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 12/25] drm/i915/display: Use intel_de_read/write_fw in colorops Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 14/25] drm/i915/display: Make set_pipeconf use the fw variants Maarten Lankhorst
` (12 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
intel_set_pipe_src_size(), hsw_set_linetime_wm(),
intel_cpu_transcoder_set_m1_n1() and intel_set_transcoder_timings_lrr()
are called from an atomic context on PREEMPT_RT, and should be using the
_fw functions.
This likely prevents a deadlock on i915.
Again noticed when trying to disable preemption in vblank evasion:
<3> BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
<3> in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 1505, name: kms_cursor_lega
<3> preempt_count: 1, expected: 0
<3> RCU nest depth: 0, expected: 0
<4> 4 locks held by kms_cursor_lega/1505:
<4> #0: ffffc90003c6f988 (crtc_ww_class_acquire){+.+.}-{0:0}, at: drm_mode_atomic_ioctl+0x13b/0xe90
<4> #1: ffffc90003c6f9b0 (crtc_ww_class_mutex){+.+.}-{3:3}, at: drm_mode_atomic_ioctl+0x13b/0xe90
<4> #2: ffff888135b838b8 (&intel_dp->psr.lock){+.+.}-{3:3}, at: intel_psr_lock+0xc5/0xf0 [xe]
<4> #3: ffff88812607bbc0 (&wl->lock){+.+.}-{2:2}, at: intel_dmc_wl_get+0x3c/0x140 [xe]
<4> CPU: 6 UID: 0 PID: 1505 Comm: kms_cursor_lega Tainted: G U 6.18.0-rc3-lgci-xe-xe-pw-156729v1+ #1 PREEMPT_{RT,(lazy)}
<4> Tainted: [U]=USER
<4> Hardware name: Intel Corporation Panther Lake Client Platform/PTL-UH LP5 T3 RVP1, BIOS PTLPFWI1.R00.3383.D02.2509240621 09/24/2025
<4> Call Trace:
<4> <TASK>
<4> dump_stack_lvl+0xc1/0xf0
<4> dump_stack+0x10/0x20
<4> __might_resched+0x174/0x260
<4> rt_spin_lock+0x63/0x200
<4> ? intel_dmc_wl_get+0x3c/0x140 [xe]
<4> intel_dmc_wl_get+0x3c/0x140 [xe]
<4> intel_set_pipe_src_size+0x89/0xe0 [xe]
<4> intel_update_crtc+0x3c1/0x950 [xe]
<4> ? intel_pre_update_crtc+0x258/0x400 [xe]
<4> skl_commit_modeset_enables+0x217/0x720 [xe]
<4> intel_atomic_commit_tail+0xd4e/0x1af0 [xe]
<4> ? lock_release+0xce/0x2a0
<4> intel_atomic_commit+0x2e5/0x330 [xe]
<4> ? intel_atomic_commit+0x2e5/0x330 [xe]
<4> drm_atomic_commit+0xaf/0xf0
<4> ? __pfx___drm_printfn_info+0x10/0x10
<4> drm_mode_atomic_ioctl+0xbd5/0xe90
<4> ? lock_acquire+0xc4/0x2e0
<4> ? __pfx_drm_mode_atomic_ioctl+0x10/0x10
<4> drm_ioctl_kernel+0xb6/0x120
<4> drm_ioctl+0x2d7/0x5a0
<4> ? __pfx_drm_mode_atomic_ioctl+0x10/0x10
<4> ? rt_spin_unlock+0xa0/0x140
<4> ? __pm_runtime_resume+0x53/0x90
<4> xe_drm_ioctl+0x56/0x90 [xe]
<4> __x64_sys_ioctl+0xa8/0x110
<4> ? lock_acquire+0xc4/0x2e0
<4> x64_sys_call+0x1144/0x26a0
<4> do_syscall_64+0x93/0xae0
<4> ? lock_release+0xce/0x2a0
<4> ? __task_pid_nr_ns+0xd9/0x270
<4> ? do_syscall_64+0x1b7/0xae0
<4> ? find_held_lock+0x31/0x90
<4> ? __task_pid_nr_ns+0xcf/0x270
<4> ? __lock_acquire+0x43e/0x2860
<4> ? __task_pid_nr_ns+0xd9/0x270
<4> ? lock_acquire+0xc4/0x2e0
<4> ? find_held_lock+0x31/0x90
<4> ? __task_pid_nr_ns+0xcf/0x270
<4> ? lock_release+0xce/0x2a0
<4> ? __task_pid_nr_ns+0xd9/0x270
<4> ? do_syscall_64+0x1b7/0xae0
<4> ? do_syscall_64+0x1b7/0xae0
<4> entry_SYSCALL_64_after_hwframe+0x76/0x7e
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/display/intel_display.c | 36 ++++++++++----------
drivers/gpu/drm/i915/display/intel_vrr.c | 18 +++++-----
2 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 33821cc2948b6..62ce2befb3981 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -1607,9 +1607,9 @@ static void hsw_set_linetime_wm(const struct intel_crtc_state *crtc_state)
struct intel_display *display = to_intel_display(crtc_state);
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
- intel_de_write(display, WM_LINETIME(crtc->pipe),
- HSW_LINETIME(crtc_state->linetime) |
- HSW_IPS_LINETIME(crtc_state->ips_linetime));
+ intel_de_write_fw(display, WM_LINETIME(crtc->pipe),
+ HSW_LINETIME(crtc_state->linetime) |
+ HSW_IPS_LINETIME(crtc_state->ips_linetime));
}
static void hsw_set_frame_start_delay(const struct intel_crtc_state *crtc_state)
@@ -2606,14 +2606,14 @@ void intel_set_m_n(struct intel_display *display,
i915_reg_t data_m_reg, i915_reg_t data_n_reg,
i915_reg_t link_m_reg, i915_reg_t link_n_reg)
{
- intel_de_write(display, data_m_reg, TU_SIZE(m_n->tu) | m_n->data_m);
- intel_de_write(display, data_n_reg, m_n->data_n);
- intel_de_write(display, link_m_reg, m_n->link_m);
+ intel_de_write_fw(display, data_m_reg, TU_SIZE(m_n->tu) | m_n->data_m);
+ intel_de_write_fw(display, data_n_reg, m_n->data_n);
+ intel_de_write_fw(display, link_m_reg, m_n->link_m);
/*
* On BDW+ writing LINK_N arms the double buffered update
* of all the M/N registers, so it must be written last.
*/
- intel_de_write(display, link_n_reg, m_n->link_n);
+ intel_de_write_fw(display, link_n_reg, m_n->link_n);
}
bool intel_cpu_transcoder_has_m2_n2(struct intel_display *display,
@@ -2800,9 +2800,9 @@ static void intel_set_transcoder_timings_lrr(const struct intel_crtc_state *crtc
}
if (DISPLAY_VER(display) >= 13) {
- intel_de_write(display,
- TRANS_SET_CONTEXT_LATENCY(display, cpu_transcoder),
- crtc_state->set_context_latency);
+ intel_de_write_fw(display,
+ TRANS_SET_CONTEXT_LATENCY(display, cpu_transcoder),
+ crtc_state->set_context_latency);
/*
* VBLANK_START not used by hw, just clear it
@@ -2818,9 +2818,9 @@ static void intel_set_transcoder_timings_lrr(const struct intel_crtc_state *crtc
* The hardware actually ignores TRANS_VBLANK.VBLANK_END in DP mode.
* But let's write it anyway to keep the state checker happy.
*/
- intel_de_write(display, TRANS_VBLANK(display, cpu_transcoder),
- VBLANK_START(crtc_vblank_start - 1) |
- VBLANK_END(crtc_vblank_end - 1));
+ intel_de_write_fw(display, TRANS_VBLANK(display, cpu_transcoder),
+ VBLANK_START(crtc_vblank_start - 1) |
+ VBLANK_END(crtc_vblank_end - 1));
/*
* For platforms that always use VRR Timing Generator, the VTOTAL.Vtotal
* bits are not required. Since the support for these bits is going to
@@ -2834,9 +2834,9 @@ static void intel_set_transcoder_timings_lrr(const struct intel_crtc_state *crtc
* The double buffer latch point for TRANS_VTOTAL
* is the transcoder's undelayed vblank.
*/
- intel_de_write(display, TRANS_VTOTAL(display, cpu_transcoder),
- VACTIVE(crtc_vdisplay - 1) |
- VTOTAL(crtc_vtotal - 1));
+ intel_de_write_fw(display, TRANS_VTOTAL(display, cpu_transcoder),
+ VACTIVE(crtc_vdisplay - 1) |
+ VTOTAL(crtc_vtotal - 1));
intel_vrr_set_fixed_rr_timings(crtc_state);
intel_vrr_transcoder_enable(crtc_state);
@@ -2853,8 +2853,8 @@ static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state)
/* pipesrc controls the size that is scaled from, which should
* always be the user's requested size.
*/
- intel_de_write(display, PIPESRC(display, pipe),
- PIPESRC_WIDTH(width - 1) | PIPESRC_HEIGHT(height - 1));
+ intel_de_write_fw(display, PIPESRC(display, pipe),
+ PIPESRC_WIDTH(width - 1) | PIPESRC_HEIGHT(height - 1));
}
static bool intel_pipe_is_interlaced(const struct intel_crtc_state *crtc_state)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 00ca76dbdd6ce..128e19afc6c86 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -318,12 +318,12 @@ void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state)
if (!intel_vrr_possible(crtc_state))
return;
- intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
- intel_vrr_fixed_rr_hw_vmin(crtc_state) - 1);
- intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
- intel_vrr_fixed_rr_hw_vmax(crtc_state) - 1);
- intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
- intel_vrr_fixed_rr_hw_flipline(crtc_state) - 1);
+ intel_de_write_fw(display, TRANS_VRR_VMIN(display, cpu_transcoder),
+ intel_vrr_fixed_rr_hw_vmin(crtc_state) - 1);
+ intel_de_write_fw(display, TRANS_VRR_VMAX(display, cpu_transcoder),
+ intel_vrr_fixed_rr_hw_vmax(crtc_state) - 1);
+ intel_de_write_fw(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
+ intel_vrr_fixed_rr_hw_flipline(crtc_state) - 1);
}
static
@@ -896,8 +896,8 @@ static void intel_vrr_tg_enable(const struct intel_crtc_state *crtc_state,
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
u32 vrr_ctl;
- intel_de_write(display, TRANS_PUSH(display, cpu_transcoder),
- trans_vrr_push(crtc_state, false));
+ intel_de_write_fw(display, TRANS_PUSH(display, cpu_transcoder),
+ trans_vrr_push(crtc_state, false));
vrr_ctl = VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state);
@@ -909,7 +909,7 @@ static void intel_vrr_tg_enable(const struct intel_crtc_state *crtc_state,
if (cmrr_enable)
vrr_ctl |= VRR_CTL_CMRR_ENABLE;
- intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), vrr_ctl);
+ intel_de_write_fw(display, TRANS_VRR_CTL(display, cpu_transcoder), vrr_ctl);
}
static void intel_vrr_tg_disable(const struct intel_crtc_state *old_crtc_state)
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 14/25] drm/i915/display: Make set_pipeconf use the fw variants
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (12 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 13/25] drm/i915/display: Use intel_de_write_fw in intel_pipe_fastset Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 15/25] drm/i915/display: Fix intel_lpe_audio_irq_handler for PREEMPT-RT Maarten Lankhorst
` (11 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
The calls are used inside the critical section when updating
the gamma mode, and thus should use the _fw variants to prevent
locks.
Fixes following splat:
| BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
| in_atomic(): 0, irqs_disabled(): 1, non_block: 0, pid: 2115, name: modprobe
| preempt_count: 0, expected: 0
| RCU nest depth: 0, expected: 0
| 4 locks held by modprobe/2115:
| #0: ffff99b9425161a0 (&dev->mutex){....}-{4:4}, at: __driver_attach+0xaf/0x1c0
| #1: ffffaa224810f6c0 (crtc_ww_class_acquire){+.+.}-{0:0}, at: intel_initial_commit+0x4c/0x200 [i915]
| #2: ffffaa224810f6e8 (crtc_ww_class_mutex){+.+.}-{4:4}, at: intel_initial_commit+0x4c/0x200 [i915]
| #3: ffff99b94a6c9030 (&uncore->lock){+.+.}-{3:3}, at: gen6_write32+0x50/0x290 [i915]
| irq event stamp: 513344
| hardirqs last enabled at (513343): [<ffffffff8ba8d84c>] _raw_spin_unlock_irqrestore+0x4c/0x60
| hardirqs last disabled at (513344): [<ffffffffc1543646>] intel_pipe_update_start+0x216/0x2c0 [i915]
| softirqs last enabled at (512766): [<ffffffff8af045cf>] __local_bh_enable_ip+0x10f/0x170
| softirqs last disabled at (512712): [<ffffffffc14dfb6a>] __i915_request_queue+0x3a/0x70 [i915]
| CPU: 3 UID: 0 PID: 2115 Comm: modprobe Tainted: G W 6.18.0-rc1+ #17 PREEMPT_{RT,(lazy)}
| Tainted: [W]=WARN
| Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./Z68 Pro3-M, BIOS P2.30 06/29/2012
| Call Trace:
| <TASK>
| dump_stack_lvl+0x68/0x90
| __might_resched.cold+0xf0/0x12b
| rt_spin_lock+0x5f/0x200
| gen6_write32+0x50/0x290 [i915]
| ilk_set_pipeconf+0x12d/0x230 [i915]
| ilk_color_commit_arm+0x2d/0x70 [i915]
| intel_update_crtc+0x15b/0x690 [i915]
| intel_commit_modeset_enables+0xa6/0xd0 [i915]
| intel_atomic_commit_tail+0xd55/0x19a0 [i915]
| intel_atomic_commit+0x25d/0x2a0 [i915]
| drm_atomic_commit+0xad/0xe0 [drm]
| intel_initial_commit+0x16c/0x200 [i915]
| intel_display_driver_probe+0x2e/0x80 [i915]
| i915_driver_probe+0x791/0xc10 [i915]
| i915_pci_probe+0xd7/0x190 [i915]
Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/display/intel_display.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 62ce2befb3981..8f4a918dadf39 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -3037,8 +3037,9 @@ void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state)
val |= TRANSCONF_FRAME_START_DELAY(crtc_state->framestart_delay - 1);
- intel_de_write(display, TRANSCONF(display, cpu_transcoder), val);
- intel_de_posting_read(display, TRANSCONF(display, cpu_transcoder));
+ intel_de_write_fw(display, TRANSCONF(display, cpu_transcoder), val);
+ /* posting read */
+ intel_de_read_fw(display, TRANSCONF(display, cpu_transcoder));
}
static enum intel_output_format
@@ -3233,8 +3234,9 @@ void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state)
val |= TRANSCONF_FRAME_START_DELAY(crtc_state->framestart_delay - 1);
val |= TRANSCONF_MSA_TIMING_DELAY(crtc_state->msa_timing_delay);
- intel_de_write(display, TRANSCONF(display, cpu_transcoder), val);
- intel_de_posting_read(display, TRANSCONF(display, cpu_transcoder));
+ intel_de_write_fw(display, TRANSCONF(display, cpu_transcoder), val);
+ /* posting read */
+ intel_de_read_fw(display, TRANSCONF(display, cpu_transcoder));
}
static void hsw_set_transconf(const struct intel_crtc_state *crtc_state)
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 15/25] drm/i915/display: Fix intel_lpe_audio_irq_handler for PREEMPT-RT
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (13 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 14/25] drm/i915/display: Make set_pipeconf use the fw variants Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 16/25] drm/i915/gt: Use spin_lock_irq() instead of local_irq_disable() + spin_lock() Maarten Lankhorst
` (10 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
The LPE audio interrupt comes from the i915 interrupt handler. It
should be in irq disabled context.
With PREEMPT_RT enabled, the IRQ handler is threaded.
Because intel_lpe_audio_irq_handler() may be called in threaded IRQ context,
generic_handle_irq_safe API disables the interrupts before calling LPE's
interrupt top half handler.
This fixes braswell audio issues with RT enabled.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/i915/display/intel_lpe_audio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_lpe_audio.c b/drivers/gpu/drm/i915/display/intel_lpe_audio.c
index 117b60656ca19..306b16889bc92 100644
--- a/drivers/gpu/drm/i915/display/intel_lpe_audio.c
+++ b/drivers/gpu/drm/i915/display/intel_lpe_audio.c
@@ -262,7 +262,7 @@ void intel_lpe_audio_irq_handler(struct intel_display *display)
if (!HAS_LPE_AUDIO(display))
return;
- ret = generic_handle_irq(display->audio.lpe.irq);
+ ret = generic_handle_irq_safe(display->audio.lpe.irq);
if (ret)
drm_err_ratelimited(display->drm,
"error handling LPE audio irq: %d\n", ret);
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 16/25] drm/i915/gt: Use spin_lock_irq() instead of local_irq_disable() + spin_lock()
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (14 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 15/25] drm/i915/display: Fix intel_lpe_audio_irq_handler for PREEMPT-RT Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 17/25] drm/i915: Drop the irqs_disabled() check Maarten Lankhorst
` (9 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
execlists_dequeue() is invoked from a function which uses
local_irq_disable() to disable interrupts so the spin_lock() behaves
like spin_lock_irq().
This breaks PREEMPT_RT because local_irq_disable() + spin_lock() is not
the same as spin_lock_irq().
execlists_dequeue_irq() and execlists_dequeue() has each one caller
only. If intel_engine_cs::active::lock is acquired and released with the
_irq suffix then it behaves almost as if execlists_dequeue() would be
invoked with disabled interrupts. The difference is the last part of the
function which is then invoked with enabled interrupts.
I can't tell if this makes a difference. From looking at it, it might
work to move the last unlock at the end of the function as I didn't find
anything that would acquire the lock again.
Reported-by: Clark Williams <williams@redhat.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
.../drm/i915/gt/intel_execlists_submission.c | 17 +++++------------
1 file changed, 5 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
index cafe0b8e6bdd0..55f94c5feaa3b 100644
--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
@@ -1300,7 +1300,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
* and context switches) submission.
*/
- spin_lock(&sched_engine->lock);
+ spin_lock_irq(&sched_engine->lock);
/*
* If the queue is higher priority than the last
@@ -1400,7 +1400,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
* Even if ELSP[1] is occupied and not worthy
* of timeslices, our queue might be.
*/
- spin_unlock(&sched_engine->lock);
+ spin_unlock_irq(&sched_engine->lock);
return;
}
}
@@ -1426,7 +1426,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
if (last && !can_merge_rq(last, rq)) {
spin_unlock(&ve->base.sched_engine->lock);
- spin_unlock(&engine->sched_engine->lock);
+ spin_unlock_irq(&engine->sched_engine->lock);
return; /* leave this for another sibling */
}
@@ -1588,7 +1588,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
*/
sched_engine->queue_priority_hint = queue_prio(sched_engine);
i915_sched_engine_reset_on_empty(sched_engine);
- spin_unlock(&sched_engine->lock);
+ spin_unlock_irq(&sched_engine->lock);
/*
* We can skip poking the HW if we ended up with exactly the same set
@@ -1614,13 +1614,6 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
}
}
-static void execlists_dequeue_irq(struct intel_engine_cs *engine)
-{
- local_irq_disable(); /* Suspend interrupts across request submission */
- execlists_dequeue(engine);
- local_irq_enable(); /* flush irq_work (e.g. breadcrumb enabling) */
-}
-
static void clear_ports(struct i915_request **ports, int count)
{
memset_p((void **)ports, NULL, count);
@@ -2475,7 +2468,7 @@ static void execlists_submission_tasklet(struct tasklet_struct *t)
}
if (!engine->execlists.pending[0]) {
- execlists_dequeue_irq(engine);
+ execlists_dequeue(engine);
start_timeslice(engine);
}
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 17/25] drm/i915: Drop the irqs_disabled() check
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (15 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 16/25] drm/i915/gt: Use spin_lock_irq() instead of local_irq_disable() + spin_lock() Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 18/25] drm/i915/guc: Consider also RCU depth in busy loop Maarten Lankhorst
` (8 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
The !irqs_disabled() check triggers on PREEMPT_RT even with
i915_sched_engine::lock acquired. The reason is the lock is transformed
into a sleeping lock on PREEMPT_RT and does not disable interrupts.
There is no need to check for disabled interrupts. The lockdep
annotation below already check if the lock has been acquired by the
caller and will yell if the interrupts are not disabled.
Remove the !irqs_disabled() check.
Reported-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Acked-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/i915_request.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
index d2c7b1090df08..f66f8efc70629 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -610,7 +610,6 @@ bool __i915_request_submit(struct i915_request *request)
RQ_TRACE(request, "\n");
- GEM_BUG_ON(!irqs_disabled());
lockdep_assert_held(&engine->sched_engine->lock);
/*
@@ -719,7 +718,6 @@ void __i915_request_unsubmit(struct i915_request *request)
*/
RQ_TRACE(request, "\n");
- GEM_BUG_ON(!irqs_disabled());
lockdep_assert_held(&engine->sched_engine->lock);
/*
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 18/25] drm/i915/guc: Consider also RCU depth in busy loop.
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (16 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 17/25] drm/i915: Drop the irqs_disabled() check Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 19/25] drm/i915/gt: Fix selftests on PREEMPT_RT Maarten Lankhorst
` (7 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
intel_guc_send_busy_loop() looks at in_atomic() and irqs_disabled() to
decide if it should busy-spin while waiting or if it may sleep.
Both checks will report false on PREEMPT_RT if sleeping spinlocks are
acquired leading to RCU splats while the function sleeps.
Check also if RCU has been disabled.
Reported-by: "John B. Wyatt IV" <jwyatt@redhat.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/gt/uc/intel_guc.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.h b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
index 053780f562c1a..b25fa8f4dc4bd 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
@@ -362,7 +362,7 @@ static inline int intel_guc_send_busy_loop(struct intel_guc *guc,
{
int err;
unsigned int sleep_period_ms = 1;
- bool not_atomic = !in_atomic() && !irqs_disabled();
+ bool not_atomic = !in_atomic() && !irqs_disabled() && !rcu_preempt_depth();
/*
* FIXME: Have caller pass in if we are in an atomic context to avoid
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 19/25] drm/i915/gt: Fix selftests on PREEMPT_RT
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (17 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 18/25] drm/i915/guc: Consider also RCU depth in busy loop Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 20/25] drm/i915/gt: Set stop_timeout() correctly on PREEMPT-RT Maarten Lankhorst
` (6 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/gt/selftest_engine_pm.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/selftest_engine_pm.c b/drivers/gpu/drm/i915/gt/selftest_engine_pm.c
index 10e556a7eac45..c1eff9edd8a5e 100644
--- a/drivers/gpu/drm/i915/gt/selftest_engine_pm.c
+++ b/drivers/gpu/drm/i915/gt/selftest_engine_pm.c
@@ -277,11 +277,11 @@ static int live_engine_busy_stats(void *arg)
st_engine_heartbeat_disable(engine);
ENGINE_TRACE(engine, "measuring idle time\n");
- preempt_disable();
+ migrate_disable();
de = intel_engine_get_busy_time(engine, &t[0]);
udelay(100);
de = ktime_sub(intel_engine_get_busy_time(engine, &t[1]), de);
- preempt_enable();
+ migrate_enable();
dt = ktime_sub(t[1], t[0]);
if (de < 0 || de > 10) {
pr_err("%s: reported %lldns [%d%%] busyness while sleeping [for %lldns]\n",
@@ -316,11 +316,11 @@ static int live_engine_busy_stats(void *arg)
}
ENGINE_TRACE(engine, "measuring busy time\n");
- preempt_disable();
+ migrate_disable();
de = intel_engine_get_busy_time(engine, &t[0]);
mdelay(100);
de = ktime_sub(intel_engine_get_busy_time(engine, &t[1]), de);
- preempt_enable();
+ migrate_enable();
dt = ktime_sub(t[1], t[0]);
if (100 * de < 95 * dt || 95 * de > 100 * dt) {
pr_err("%s: reported %lldns [%d%%] busyness while spinning [for %lldns]\n",
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 20/25] drm/i915/gt: Set stop_timeout() correctly on PREEMPT-RT
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (18 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 19/25] drm/i915/gt: Fix selftests on PREEMPT_RT Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 21/25] drm/i915/display: Remove uncore lock from vlv_atomic_update_fifo Maarten Lankhorst
` (5 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
Also check if RCU is disabled for PREEMPT-RT, which is the case when
local_bh_disable() is called.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/gt/intel_engine_cs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index 54c9571327e72..97bc49fcb5e05 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -1607,7 +1607,7 @@ u64 intel_engine_get_last_batch_head(const struct intel_engine_cs *engine)
static unsigned long stop_timeout(const struct intel_engine_cs *engine)
{
- if (in_atomic() || irqs_disabled()) /* inside atomic preempt-reset? */
+ if (in_atomic() || irqs_disabled() || rcu_preempt_depth()) /* inside atomic preempt-reset? */
return 0;
/*
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 21/25] drm/i915/display: Remove uncore lock from vlv_atomic_update_fifo
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (19 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 20/25] drm/i915/gt: Set stop_timeout() correctly on PREEMPT-RT Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 22/25] drm/i915: Use sleeping selftests for igt_atomic on PREEMPT_RT Maarten Lankhorst
` (4 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
TODO: Grab uncore lock during entire vblank evasion before disabling
interrupts, and check what breaks?
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/display/i9xx_wm.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/i9xx_wm.c b/drivers/gpu/drm/i915/display/i9xx_wm.c
index 24f898efa9dd7..abf9f023bdd58 100644
--- a/drivers/gpu/drm/i915/display/i9xx_wm.c
+++ b/drivers/gpu/drm/i915/display/i9xx_wm.c
@@ -1863,7 +1863,6 @@ static void vlv_atomic_update_fifo(struct intel_atomic_state *state,
struct intel_crtc *crtc)
{
struct intel_display *display = to_intel_display(crtc);
- struct intel_uncore *uncore = to_intel_uncore(display->drm);
const struct intel_crtc_state *crtc_state =
intel_atomic_get_new_crtc_state(state, crtc);
const struct vlv_fifo_state *fifo_state =
@@ -1892,7 +1891,6 @@ static void vlv_atomic_update_fifo(struct intel_atomic_state *state,
* intel_pipe_update_start() has already disabled interrupts
* for us, so a plain spin_lock() is sufficient here.
*/
- spin_lock(&uncore->lock);
switch (crtc->pipe) {
case PIPE_A:
@@ -1951,8 +1949,6 @@ static void vlv_atomic_update_fifo(struct intel_atomic_state *state,
}
intel_de_read_fw(display, DSPARB(display));
-
- spin_unlock(&uncore->lock);
}
#undef VLV_FIFO
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 22/25] drm/i915: Use sleeping selftests for igt_atomic on PREEMPT_RT
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (20 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 21/25] drm/i915/display: Remove uncore lock from vlv_atomic_update_fifo Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 23/25] Revert "drm/i915: Depend on !PREEMPT_RT." Maarten Lankhorst
` (3 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
This makes the i915 selftests slightly happier, especially
related to GPU reset.
I believe this may be a better approach than trying to convert
uncore->lock to raw_spinlock
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/selftests/igt_atomic.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/i915/selftests/igt_atomic.c b/drivers/gpu/drm/i915/selftests/igt_atomic.c
index fb506b6990956..8ae39cf570b76 100644
--- a/drivers/gpu/drm/i915/selftests/igt_atomic.c
+++ b/drivers/gpu/drm/i915/selftests/igt_atomic.c
@@ -39,7 +39,14 @@ static void __hardirq_end(void)
local_irq_enable();
}
+static void __maybe_unused __nop(void)
+{}
+
const struct igt_atomic_section igt_atomic_phases[] = {
+#if IS_ENABLED(CONFIG_PREEMPT_RT)
+ { "sleeping", __nop, __nop },
+ { },
+#endif
{ "preempt", __preempt_begin, __preempt_end },
{ "softirq", __softirq_begin, __softirq_end },
{ "hardirq", __hardirq_begin, __hardirq_end },
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 23/25] Revert "drm/i915: Depend on !PREEMPT_RT."
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (21 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 22/25] drm/i915: Use sleeping selftests for igt_atomic on PREEMPT_RT Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection Maarten Lankhorst
` (2 subsequent siblings)
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Once the known issues are addressed, it should be safe to enable the
driver.
Acked-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/Kconfig | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index 5e939004b6463..40a9234e6e5dc 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -3,7 +3,6 @@ config DRM_I915
tristate "Intel 8xx/9xx/G3x/G4x/HD Graphics"
depends on DRM
depends on X86 && PCI
- depends on !PREEMPT_RT
select INTEL_GTT if X86
select INTERVAL_TREE
# we need shmfs for the swappable backing store, and in particular
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (22 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 23/25] Revert "drm/i915: Depend on !PREEMPT_RT." Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 21:15 ` kernel test robot
` (3 more replies)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 25/25] FOR-CI: bump MAX_STACK_TRACE_ENTRIES Maarten Lankhorst
2026-02-25 16:38 ` ✗ i915.CI.BAT: failure for Test PREEMPT_RT on i915 with selftest fix Patchwork
25 siblings, 4 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/i915/Kconfig.debug | 15 ---------------
drivers/gpu/drm/xe/Kconfig.debug | 5 +++++
kernel/Kconfig.preempt | 4 ++--
3 files changed, 7 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
index 3562a02ef7adc..0ab10ff41e38d 100644
--- a/drivers/gpu/drm/i915/Kconfig.debug
+++ b/drivers/gpu/drm/i915/Kconfig.debug
@@ -233,21 +233,6 @@ config DRM_I915_LOW_LEVEL_TRACEPOINTS
If in doubt, say "N".
-config DRM_I915_DEBUG_VBLANK_EVADE
- bool "Enable extra debug warnings for vblank evasion"
- depends on DRM_I915
- default n
- help
- Choose this option to turn on extra debug warnings for the
- vblank evade mechanism. This gives a warning every time the
- the deadline allotted for the vblank evade critical section
- is exceeded, even if there isn't an actual risk of missing
- the vblank.
-
- Recommended for driver developers only.
-
- If in doubt, say "N".
-
config DRM_I915_DEBUG_RUNTIME_PM
bool "Enable extra state checking for runtime PM"
depends on DRM_I915
diff --git a/drivers/gpu/drm/xe/Kconfig.debug b/drivers/gpu/drm/xe/Kconfig.debug
index 01227c77f6d70..1d5f11c6e88f3 100644
--- a/drivers/gpu/drm/xe/Kconfig.debug
+++ b/drivers/gpu/drm/xe/Kconfig.debug
@@ -30,6 +30,11 @@ config DRM_XE_DEBUG
If in doubt, say "N".
+config DRM_I915_DEBUG_VBLANK_EVADE
+ def_bool y
+ depends on DRM_XE
+
+
config DRM_XE_DEBUG_VM
bool "Enable extra VM debugging info"
default n
diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
index 88c594c6d7fcd..11bec9be95405 100644
--- a/kernel/Kconfig.preempt
+++ b/kernel/Kconfig.preempt
@@ -90,9 +90,9 @@ config PREEMPT_LAZY
endchoice
config PREEMPT_RT
- bool "Fully Preemptible Kernel (Real-Time)"
- depends on EXPERT && ARCH_SUPPORTS_RT && !COMPILE_TEST
+ def_bool y
select PREEMPTION
+ depends on ARCH_SUPPORTS_RT
help
This option turns the kernel into a real-time kernel by replacing
various locking primitives (spinlocks, rwlocks, etc.) with
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* [i915-ci-only NO-REVIEW 25/25] FOR-CI: bump MAX_STACK_TRACE_ENTRIES
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (23 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection Maarten Lankhorst
@ 2026-02-25 13:19 ` Maarten Lankhorst
2026-02-25 16:38 ` ✗ i915.CI.BAT: failure for Test PREEMPT_RT on i915 with selftest fix Patchwork
25 siblings, 0 replies; 33+ messages in thread
From: Maarten Lankhorst @ 2026-02-25 13:19 UTC (permalink / raw)
To: intel-gfx
We're hitting a bug in CI where MAX_STACK_TRACE_ENTRIES is set too low.
My guess is the repeated loading/unloading is creating multiples of the
same entries. As a hack just reset lockdep. This might only be necessary
for CI + PREEMPT_RT.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
lib/Kconfig.debug | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index fa8449118bee6..b13f4ea509580 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1624,8 +1624,8 @@ config LOCKDEP_CHAINS_BITS
config LOCKDEP_STACK_TRACE_BITS
int "Size for MAX_STACK_TRACE_ENTRIES (as Nth power of 2)"
depends on LOCKDEP && !LOCKDEP_SMALL
- range 10 26
- default 19
+ range 22 26
+ default 22
help
Try increasing this value if you hit "BUG: MAX_STACK_TRACE_ENTRIES too low!" message.
--
2.51.0
^ permalink raw reply related [flat|nested] 33+ messages in thread
* ✗ i915.CI.BAT: failure for Test PREEMPT_RT on i915 with selftest fix.
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
` (24 preceding siblings ...)
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 25/25] FOR-CI: bump MAX_STACK_TRACE_ENTRIES Maarten Lankhorst
@ 2026-02-25 16:38 ` Patchwork
25 siblings, 0 replies; 33+ messages in thread
From: Patchwork @ 2026-02-25 16:38 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 12800 bytes --]
== Series Details ==
Series: Test PREEMPT_RT on i915 with selftest fix.
URL : https://patchwork.freedesktop.org/series/162145/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_18047 -> Patchwork_162145v1
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_162145v1 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_162145v1, 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.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/index.html
Participating hosts (43 -> 39)
------------------------------
Missing (4): bat-dg2-13 bat-atsm-1 fi-snb-2520m bat-adls-6
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_162145v1:
### IGT changes ###
#### Possible regressions ####
* igt@dmabuf@all-tests:
- fi-ilk-650: [PASS][1] -> [ABORT][2] +1 other test abort
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/fi-ilk-650/igt@dmabuf@all-tests.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/fi-ilk-650/igt@dmabuf@all-tests.html
* igt@i915_module_load@reload:
- fi-bsw-n3050: [PASS][3] -> [ABORT][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/fi-bsw-n3050/igt@i915_module_load@reload.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/fi-bsw-n3050/igt@i915_module_load@reload.html
* igt@i915_selftest@live:
- bat-jsl-1: [PASS][5] -> [ABORT][6] +1 other test abort
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/bat-jsl-1/igt@i915_selftest@live.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-jsl-1/igt@i915_selftest@live.html
- fi-pnv-d510: [PASS][7] -> [ABORT][8] +1 other test abort
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/fi-pnv-d510/igt@i915_selftest@live.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/fi-pnv-d510/igt@i915_selftest@live.html
- fi-kbl-7567u: [PASS][9] -> [DMESG-FAIL][10] +1 other test dmesg-fail
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/fi-kbl-7567u/igt@i915_selftest@live.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/fi-kbl-7567u/igt@i915_selftest@live.html
- bat-jsl-5: [PASS][11] -> [ABORT][12] +1 other test abort
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/bat-jsl-5/igt@i915_selftest@live.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-jsl-5/igt@i915_selftest@live.html
- fi-rkl-11600: [PASS][13] -> [ABORT][14] +1 other test abort
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/fi-rkl-11600/igt@i915_selftest@live.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/fi-rkl-11600/igt@i915_selftest@live.html
- fi-cfl-8109u: [PASS][15] -> [DMESG-FAIL][16] +1 other test dmesg-fail
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/fi-cfl-8109u/igt@i915_selftest@live.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/fi-cfl-8109u/igt@i915_selftest@live.html
* igt@i915_selftest@live@execlists:
- bat-kbl-2: [PASS][17] -> [ABORT][18] +1 other test abort
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/bat-kbl-2/igt@i915_selftest@live@execlists.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-kbl-2/igt@i915_selftest@live@execlists.html
* igt@i915_selftest@live@hugepages:
- fi-bsw-nick: [PASS][19] -> [ABORT][20] +1 other test abort
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/fi-bsw-nick/igt@i915_selftest@live@hugepages.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/fi-bsw-nick/igt@i915_selftest@live@hugepages.html
* igt@i915_selftest@live@migrate:
- bat-apl-1: [PASS][21] -> [DMESG-FAIL][22] +2 other tests dmesg-fail
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/bat-apl-1/igt@i915_selftest@live@migrate.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-apl-1/igt@i915_selftest@live@migrate.html
Known issues
------------
Here are the changes found in Patchwork_162145v1 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_lmem_swapping@parallel-random-engines:
- bat-dg2-9: [PASS][23] -> [ABORT][24] ([i915#15759]) +1 other test abort
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/bat-dg2-9/igt@gem_lmem_swapping@parallel-random-engines.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg2-9/igt@gem_lmem_swapping@parallel-random-engines.html
* igt@gem_mmap@basic:
- bat-dg1-6: NOTRUN -> [SKIP][25] ([i915#4083])
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@gem_mmap@basic.html
* igt@gem_mmap_gtt@basic:
- bat-dg1-6: NOTRUN -> [SKIP][26] ([i915#4077]) +2 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@gem_mmap_gtt@basic.html
* igt@gem_render_tiled_blits@basic:
- bat-dg1-6: NOTRUN -> [SKIP][27] ([i915#4079])
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@gem_render_tiled_blits@basic.html
* igt@gem_tiled_pread_basic@basic:
- bat-dg1-6: NOTRUN -> [SKIP][28] ([i915#15657])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@gem_tiled_pread_basic@basic.html
* igt@i915_pm_rps@basic-api:
- bat-dg1-6: NOTRUN -> [SKIP][29] ([i915#11681] / [i915#6621])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@i915_pm_rps@basic-api.html
* igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling:
- bat-dg1-6: NOTRUN -> [SKIP][30] ([i915#12311] / [i915#4212]) +7 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling.html
* igt@kms_addfb_basic@basic-y-tiled-legacy:
- bat-dg1-6: NOTRUN -> [SKIP][31] ([i915#12311] / [i915#4215])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_addfb_basic@basic-y-tiled-legacy.html
* igt@kms_busy@basic:
- bat-dg1-6: NOTRUN -> [SKIP][32] ([i915#11190] / [i915#12311] / [i915#4303])
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_busy@basic.html
* igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size:
- bat-dg1-6: NOTRUN -> [SKIP][33] ([i915#11190] / [i915#12311]) +15 other tests skip
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
* igt@kms_flip@basic-flip-vs-dpms:
- bat-dg1-6: NOTRUN -> [SKIP][34] ([i915#12311] / [i915#3637]) +2 other tests skip
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_flip@basic-flip-vs-dpms.html
* igt@kms_flip@basic-plain-flip:
- bat-dg1-6: NOTRUN -> [SKIP][35] ([i915#12311]) +1 other test skip
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_flip@basic-plain-flip.html
* igt@kms_frontbuffer_tracking@basic:
- bat-dg1-6: NOTRUN -> [SKIP][36] ([i915#12311] / [i915#4342])
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_frontbuffer_tracking@basic.html
* igt@kms_pm_backlight@basic-brightness:
- bat-dg1-6: NOTRUN -> [SKIP][37] ([i915#12311] / [i915#5354])
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_pm_backlight@basic-brightness.html
* igt@kms_psr@psr-primary-page-flip:
- bat-dg1-6: NOTRUN -> [SKIP][38] ([i915#1072] / [i915#12311] / [i915#9732]) +3 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_psr@psr-primary-page-flip.html
* igt@kms_setmode@basic-clone-single-crtc:
- bat-dg1-6: NOTRUN -> [SKIP][39] ([i915#12311] / [i915#3555])
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@kms_setmode@basic-clone-single-crtc.html
* igt@prime_vgem@basic-fence-mmap:
- bat-dg1-6: NOTRUN -> [SKIP][40] ([i915#3708] / [i915#4077]) +1 other test skip
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@prime_vgem@basic-fence-mmap.html
* igt@prime_vgem@basic-read:
- bat-dg1-6: NOTRUN -> [SKIP][41] ([i915#3708]) +2 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@prime_vgem@basic-read.html
* igt@prime_vgem@basic-write:
- bat-dg1-6: NOTRUN -> [SKIP][42] ([i915#11723] / [i915#3708])
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@prime_vgem@basic-write.html
#### Possible fixes ####
* igt@gem_exec_create@basic@lmem0:
- bat-dg1-6: [ABORT][43] ([i915#15759]) -> [PASS][44] +1 other test pass
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/bat-dg1-6/igt@gem_exec_create@basic@lmem0.html
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-dg1-6/igt@gem_exec_create@basic@lmem0.html
* igt@i915_selftest@live:
- bat-arlh-3: [INCOMPLETE][45] ([i915#15622]) -> [PASS][46]
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/bat-arlh-3/igt@i915_selftest@live.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-arlh-3/igt@i915_selftest@live.html
* igt@i915_selftest@live@gt_contexts:
- bat-arlh-3: [INCOMPLETE][47] -> [PASS][48]
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/bat-arlh-3/igt@i915_selftest@live@gt_contexts.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-arlh-3/igt@i915_selftest@live@gt_contexts.html
* igt@i915_selftest@live@workarounds:
- bat-mtlp-9: [DMESG-FAIL][49] ([i915#12061]) -> [PASS][50] +1 other test pass
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18047/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
[i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
[i915#11190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11190
[i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
[i915#11723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11723
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12311]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12311
[i915#15622]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15622
[i915#15657]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15657
[i915#15759]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15759
[i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
[i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
[i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
[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#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212
[i915#4215]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4215
[i915#4303]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4303
[i915#4342]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4342
[i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
[i915#6621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6621
[i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
Build changes
-------------
* Linux: CI_DRM_18047 -> Patchwork_162145v1
CI-20190529: 20190529
CI_DRM_18047: 3b1923ab37ecd72e1405c7b8d3b1d9e1f3e59f86 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8771: 8771
Patchwork_162145v1: 3b1923ab37ecd72e1405c7b8d3b1d9e1f3e59f86 @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162145v1/index.html
[-- Attachment #2: Type: text/html, Size: 15217 bytes --]
^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection Maarten Lankhorst
@ 2026-02-25 21:15 ` kernel test robot
2026-02-25 21:26 ` kernel test robot
` (2 subsequent siblings)
3 siblings, 0 replies; 33+ messages in thread
From: kernel test robot @ 2026-02-25 21:15 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx; +Cc: oe-kbuild-all
Hi Maarten,
kernel test robot noticed the following build warnings:
[auto build test WARNING on drm-i915/for-linux-next]
[also build test WARNING on next-20260225]
[cannot apply to drm-i915/for-linux-next-fixes drm-misc/drm-misc-next drm-xe/drm-xe-next linus/master v7.0-rc1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-vblank_work-Add-methods-to-schedule-vblank_work-in-2-stages/20260226-012447
base: https://gitlab.freedesktop.org/drm/i915/kernel.git for-linux-next
patch link: https://lore.kernel.org/r/20260225131931.60724-25-dev%40lankhorst.se
patch subject: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
config: i386-randconfig-014-20260226 (https://download.01.org/0day-ci/archive/20260226/202602260513.DKBDSL6e-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260226/202602260513.DKBDSL6e-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602260513.DKBDSL6e-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from arch/x86/include/asm/uprobes.h:13,
from include/linux/uprobes.h:66,
from include/linux/mm_types.h:16,
from include/linux/mmzone.h:22,
from include/linux/gfp.h:7,
from include/linux/slab.h:17,
from include/linux/resource_ext.h:11,
from include/linux/acpi.h:14,
from drivers/platform/x86/lenovo/wmi-gamezone.c:11:
>> drivers/platform/x86/lenovo/wmi-gamezone.c:34:31: warning: 'gz_chain_head' defined but not used [-Wunused-variable]
34 | static BLOCKING_NOTIFIER_HEAD(gz_chain_head);
| ^~~~~~~~~~~~~
include/linux/notifier.h:119:39: note: in definition of macro 'BLOCKING_NOTIFIER_HEAD'
119 | struct blocking_notifier_head name = \
| ^~~~
vim +/gz_chain_head +34 drivers/platform/x86/lenovo/wmi-gamezone.c
22024ac5366f06 Derek J. Clark 2025-07-01 @11 #include <linux/acpi.h>
22024ac5366f06 Derek J. Clark 2025-07-01 12 #include <linux/dmi.h>
22024ac5366f06 Derek J. Clark 2025-07-01 13 #include <linux/export.h>
22024ac5366f06 Derek J. Clark 2025-07-01 14 #include <linux/list.h>
22024ac5366f06 Derek J. Clark 2025-07-01 15 #include <linux/module.h>
22024ac5366f06 Derek J. Clark 2025-07-01 16 #include <linux/notifier.h>
22024ac5366f06 Derek J. Clark 2025-07-01 17 #include <linux/platform_profile.h>
22024ac5366f06 Derek J. Clark 2025-07-01 18 #include <linux/spinlock.h>
22024ac5366f06 Derek J. Clark 2025-07-01 19 #include <linux/spinlock_types.h>
22024ac5366f06 Derek J. Clark 2025-07-01 20 #include <linux/types.h>
22024ac5366f06 Derek J. Clark 2025-07-01 21 #include <linux/wmi.h>
22024ac5366f06 Derek J. Clark 2025-07-01 22
22024ac5366f06 Derek J. Clark 2025-07-01 23 #include "wmi-events.h"
22024ac5366f06 Derek J. Clark 2025-07-01 24 #include "wmi-gamezone.h"
22024ac5366f06 Derek J. Clark 2025-07-01 25 #include "wmi-helpers.h"
22024ac5366f06 Derek J. Clark 2025-07-01 26 #include "wmi-other.h"
22024ac5366f06 Derek J. Clark 2025-07-01 27
22024ac5366f06 Derek J. Clark 2025-07-01 28 #define LENOVO_GAMEZONE_GUID "887B54E3-DDDC-4B2C-8B88-68A26A8835D0"
22024ac5366f06 Derek J. Clark 2025-07-01 29
22024ac5366f06 Derek J. Clark 2025-07-01 30 #define LWMI_GZ_METHOD_ID_SMARTFAN_SUP 43
22024ac5366f06 Derek J. Clark 2025-07-01 31 #define LWMI_GZ_METHOD_ID_SMARTFAN_SET 44
22024ac5366f06 Derek J. Clark 2025-07-01 32 #define LWMI_GZ_METHOD_ID_SMARTFAN_GET 45
22024ac5366f06 Derek J. Clark 2025-07-01 33
22024ac5366f06 Derek J. Clark 2025-07-01 @34 static BLOCKING_NOTIFIER_HEAD(gz_chain_head);
22024ac5366f06 Derek J. Clark 2025-07-01 35
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection Maarten Lankhorst
2026-02-25 21:15 ` kernel test robot
@ 2026-02-25 21:26 ` kernel test robot
2026-02-26 7:41 ` kernel test robot
2026-02-28 1:57 ` kernel test robot
3 siblings, 0 replies; 33+ messages in thread
From: kernel test robot @ 2026-02-25 21:26 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx; +Cc: oe-kbuild-all
Hi Maarten,
kernel test robot noticed the following build warnings:
[auto build test WARNING on drm-i915/for-linux-next]
[also build test WARNING on next-20260225]
[cannot apply to drm-i915/for-linux-next-fixes drm-misc/drm-misc-next drm-xe/drm-xe-next linus/master v7.0-rc1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-vblank_work-Add-methods-to-schedule-vblank_work-in-2-stages/20260226-012447
base: https://gitlab.freedesktop.org/drm/i915/kernel.git for-linux-next
patch link: https://lore.kernel.org/r/20260225131931.60724-25-dev%40lankhorst.se
patch subject: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
config: i386-randconfig-141-20260226 (https://download.01.org/0day-ci/archive/20260226/202602260529.oLe52BkR-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
smatch version: v0.5.0-8994-gd50c5a4c
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260226/202602260529.oLe52BkR-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602260529.oLe52BkR-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/platform/x86/lenovo/wmi-gamezone.c:34:31: warning: unused variable 'gz_chain_head' [-Wunused-variable]
34 | static BLOCKING_NOTIFIER_HEAD(gz_chain_head);
| ^~~~~~~~~~~~~
include/linux/notifier.h:119:32: note: expanded from macro 'BLOCKING_NOTIFIER_HEAD'
119 | struct blocking_notifier_head name = \
| ^~~~
1 warning generated.
vim +/gz_chain_head +34 drivers/platform/x86/lenovo/wmi-gamezone.c
22024ac5366f06 Derek J. Clark 2025-07-01 33
22024ac5366f06 Derek J. Clark 2025-07-01 @34 static BLOCKING_NOTIFIER_HEAD(gz_chain_head);
22024ac5366f06 Derek J. Clark 2025-07-01 35
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
@ 2026-02-26 1:33 kernel test robot
0 siblings, 0 replies; 33+ messages in thread
From: kernel test robot @ 2026-02-26 1:33 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp
::::::
:::::: Manual check reason: "low confidence static check first_new_problem: arch/riscv/include/asm/atomic.h:74:1: sparse: sparse: constant integer operation overflow"
::::::
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20260225131931.60724-25-dev@lankhorst.se>
References: <20260225131931.60724-25-dev@lankhorst.se>
TO: Maarten Lankhorst <dev@lankhorst.se>
TO: intel-gfx@lists.freedesktop.org
Hi Maarten,
kernel test robot noticed the following build warnings:
[auto build test WARNING on drm-i915/for-linux-next]
[also build test WARNING on next-20260225]
[cannot apply to drm-i915/for-linux-next-fixes drm-misc/drm-misc-next drm-xe/drm-xe-next linus/master v7.0-rc1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-vblank_work-Add-methods-to-schedule-vblank_work-in-2-stages/20260226-012447
base: https://gitlab.freedesktop.org/drm/i915/kernel.git for-linux-next
patch link: https://lore.kernel.org/r/20260225131931.60724-25-dev%40lankhorst.se
patch subject: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
:::::: branch date: 8 hours ago
:::::: commit date: 8 hours ago
config: riscv-randconfig-r131-20260226 (https://download.01.org/0day-ci/archive/20260226/202602260953.fsEEuYsa-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 10.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260226/202602260953.fsEEuYsa-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/r/202602260953.fsEEuYsa-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
kernel/locking/rwsem.c: note: in included file (through include/linux/atomic.h, include/linux/llist.h, include/linux/smp_types.h, ...):
>> arch/riscv/include/asm/atomic.h:74:1: sparse: sparse: constant integer operation overflow
>> arch/riscv/include/asm/atomic.h:74:1: sparse: sparse: constant integer operation overflow
--
kernel/locking/spinlock_rt.c: note: in included file (through include/linux/atomic.h, include/linux/cpumask.h, include/linux/smp.h, ...):
>> arch/riscv/include/asm/atomic.h:74:1: sparse: sparse: constant integer operation overflow
>> arch/riscv/include/asm/atomic.h:74:1: sparse: sparse: constant integer operation overflow
vim +74 arch/riscv/include/asm/atomic.h
fab957c11efe2f Palmer Dabbelt 2017-07-10 72
4650d02ad2d9b2 Palmer Dabbelt 2017-11-14 73 ATOMIC_OPS(add, add, i)
4650d02ad2d9b2 Palmer Dabbelt 2017-11-14 @74 ATOMIC_OPS(sub, add, -i)
4650d02ad2d9b2 Palmer Dabbelt 2017-11-14 75 ATOMIC_OPS(and, and, i)
4650d02ad2d9b2 Palmer Dabbelt 2017-11-14 76 ATOMIC_OPS( or, or, i)
4650d02ad2d9b2 Palmer Dabbelt 2017-11-14 77 ATOMIC_OPS(xor, xor, i)
fab957c11efe2f Palmer Dabbelt 2017-07-10 78
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
@ 2026-02-26 3:26 kernel test robot
0 siblings, 0 replies; 33+ messages in thread
From: kernel test robot @ 2026-02-26 3:26 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp
::::::
:::::: Manual check reason: "low confidence static check first_new_problem: arch/loongarch/include/asm/atomic-amo.h:61:1: sparse: sparse: constant integer operation overflow"
::::::
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20260225131931.60724-25-dev@lankhorst.se>
References: <20260225131931.60724-25-dev@lankhorst.se>
TO: Maarten Lankhorst <dev@lankhorst.se>
TO: intel-gfx@lists.freedesktop.org
Hi Maarten,
kernel test robot noticed the following build warnings:
[auto build test WARNING on drm-i915/for-linux-next]
[also build test WARNING on next-20260225]
[cannot apply to drm-i915/for-linux-next-fixes drm-misc/drm-misc-next drm-xe/drm-xe-next linus/master v7.0-rc1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-vblank_work-Add-methods-to-schedule-vblank_work-in-2-stages/20260226-012447
base: https://gitlab.freedesktop.org/drm/i915/kernel.git for-linux-next
patch link: https://lore.kernel.org/r/20260225131931.60724-25-dev%40lankhorst.se
patch subject: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
:::::: branch date: 10 hours ago
:::::: commit date: 10 hours ago
config: loongarch-randconfig-r132-20260226 (https://download.01.org/0day-ci/archive/20260226/202602261133.iUrP8Wec-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 12.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260226/202602261133.iUrP8Wec-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/r/202602261133.iUrP8Wec-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
kernel/locking/rwsem.c: note: in included file (through arch/loongarch/include/asm/atomic.h, include/linux/atomic.h, include/asm-generic/bitops/atomic.h, ...):
>> arch/loongarch/include/asm/atomic-amo.h:61:1: sparse: sparse: constant integer operation overflow
>> arch/loongarch/include/asm/atomic-amo.h:61:1: sparse: sparse: constant integer operation overflow
--
kernel/locking/spinlock_rt.c: note: in included file (through arch/loongarch/include/asm/atomic.h, include/linux/atomic.h, include/asm-generic/bitops/atomic.h, ...):
>> arch/loongarch/include/asm/atomic-amo.h:61:1: sparse: sparse: constant integer operation overflow
>> arch/loongarch/include/asm/atomic-amo.h:61:1: sparse: sparse: constant integer operation overflow
vim +61 arch/loongarch/include/asm/atomic-amo.h
79974cc3ba45f3 Huacai Chen 2025-12-06 52
79974cc3ba45f3 Huacai Chen 2025-12-06 53 #define ATOMIC_OPS(op, I, asm_op, c_op) \
79974cc3ba45f3 Huacai Chen 2025-12-06 54 ATOMIC_OP(op, I, asm_op) \
79974cc3ba45f3 Huacai Chen 2025-12-06 55 ATOMIC_OP_RETURN(op, I, asm_op, c_op, _db, ) \
79974cc3ba45f3 Huacai Chen 2025-12-06 56 ATOMIC_OP_RETURN(op, I, asm_op, c_op, , _relaxed) \
79974cc3ba45f3 Huacai Chen 2025-12-06 57 ATOMIC_FETCH_OP(op, I, asm_op, _db, ) \
79974cc3ba45f3 Huacai Chen 2025-12-06 58 ATOMIC_FETCH_OP(op, I, asm_op, , _relaxed)
79974cc3ba45f3 Huacai Chen 2025-12-06 59
79974cc3ba45f3 Huacai Chen 2025-12-06 60 ATOMIC_OPS(add, i, add, +)
79974cc3ba45f3 Huacai Chen 2025-12-06 @61 ATOMIC_OPS(sub, -i, add, +)
79974cc3ba45f3 Huacai Chen 2025-12-06 62
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection Maarten Lankhorst
2026-02-25 21:15 ` kernel test robot
2026-02-25 21:26 ` kernel test robot
@ 2026-02-26 7:41 ` kernel test robot
2026-02-28 1:57 ` kernel test robot
3 siblings, 0 replies; 33+ messages in thread
From: kernel test robot @ 2026-02-26 7:41 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx; +Cc: oe-kbuild-all
Hi Maarten,
kernel test robot noticed the following build errors:
[auto build test ERROR on drm-i915/for-linux-next]
[also build test ERROR on next-20260225]
[cannot apply to drm-i915/for-linux-next-fixes drm-misc/drm-misc-next drm-xe/drm-xe-next linus/master v7.0-rc1]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-vblank_work-Add-methods-to-schedule-vblank_work-in-2-stages/20260226-012447
base: https://gitlab.freedesktop.org/drm/i915/kernel.git for-linux-next
patch link: https://lore.kernel.org/r/20260225131931.60724-25-dev%40lankhorst.se
patch subject: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
config: arm64-randconfig-r123-20260226 (https://download.01.org/0day-ci/archive/20260226/202602261547.3bM6yVAS-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 9a109fbb6e184ec9bcce10615949f598f4c974a9)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260226/202602261547.3bM6yVAS-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602261547.3bM6yVAS-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/gpu/drm/ttm/tests/ttm_bo_test.c:225:13: error: incompatible pointer types passing 'struct rt_mutex *' to parameter of type 'struct mutex *' [-Wincompatible-pointer-types]
225 | mutex_lock(&bo->base.resv->lock.base);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/mutex.h:193:44: note: expanded from macro 'mutex_lock'
193 | #define mutex_lock(lock) mutex_lock_nested(lock, 0)
| ^~~~
include/linux/mutex.h:185:45: note: passing argument to parameter 'lock' here
185 | extern void mutex_lock_nested(struct mutex *lock, unsigned int subclass) __acquires(lock);
| ^
drivers/gpu/drm/ttm/tests/ttm_bo_test.c:231:15: error: incompatible pointer types passing 'struct rt_mutex *' to parameter of type 'struct mutex *' [-Wincompatible-pointer-types]
231 | mutex_unlock(&bo->base.resv->lock.base);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/mutex.h:249:40: note: passing argument to parameter 'lock' here
249 | extern void mutex_unlock(struct mutex *lock) __releases(lock);
| ^
2 errors generated.
vim +225 drivers/gpu/drm/ttm/tests/ttm_bo_test.c
995279d280d1ef Karolina Stolarek 2023-11-29 210
995279d280d1ef Karolina Stolarek 2023-11-29 211 static void ttm_bo_reserve_interrupted(struct kunit *test)
995279d280d1ef Karolina Stolarek 2023-11-29 212 {
995279d280d1ef Karolina Stolarek 2023-11-29 213 struct ttm_buffer_object *bo;
995279d280d1ef Karolina Stolarek 2023-11-29 214 struct task_struct *task;
995279d280d1ef Karolina Stolarek 2023-11-29 215 int err;
995279d280d1ef Karolina Stolarek 2023-11-29 216
588c4c8d58c413 Karolina Stolarek 2024-06-12 217 bo = ttm_bo_kunit_init(test, test->priv, BO_SIZE, NULL);
995279d280d1ef Karolina Stolarek 2023-11-29 218
995279d280d1ef Karolina Stolarek 2023-11-29 219 task = kthread_create(threaded_ttm_bo_reserve, bo, "ttm-bo-reserve");
995279d280d1ef Karolina Stolarek 2023-11-29 220
995279d280d1ef Karolina Stolarek 2023-11-29 221 if (IS_ERR(task))
995279d280d1ef Karolina Stolarek 2023-11-29 222 KUNIT_FAIL(test, "Couldn't create ttm bo reserve task\n");
995279d280d1ef Karolina Stolarek 2023-11-29 223
995279d280d1ef Karolina Stolarek 2023-11-29 224 /* Take a lock so the threaded reserve has to wait */
995279d280d1ef Karolina Stolarek 2023-11-29 @225 mutex_lock(&bo->base.resv->lock.base);
995279d280d1ef Karolina Stolarek 2023-11-29 226
995279d280d1ef Karolina Stolarek 2023-11-29 227 wake_up_process(task);
995279d280d1ef Karolina Stolarek 2023-11-29 228 msleep(20);
995279d280d1ef Karolina Stolarek 2023-11-29 229 err = kthread_stop(task);
995279d280d1ef Karolina Stolarek 2023-11-29 230
995279d280d1ef Karolina Stolarek 2023-11-29 231 mutex_unlock(&bo->base.resv->lock.base);
995279d280d1ef Karolina Stolarek 2023-11-29 232
995279d280d1ef Karolina Stolarek 2023-11-29 233 KUNIT_ASSERT_EQ(test, err, -ERESTARTSYS);
995279d280d1ef Karolina Stolarek 2023-11-29 234 }
995279d280d1ef Karolina Stolarek 2023-11-29 235 #endif /* IS_BUILTIN(CONFIG_DRM_TTM_KUNIT_TEST) */
995279d280d1ef Karolina Stolarek 2023-11-29 236
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection Maarten Lankhorst
` (2 preceding siblings ...)
2026-02-26 7:41 ` kernel test robot
@ 2026-02-28 1:57 ` kernel test robot
3 siblings, 0 replies; 33+ messages in thread
From: kernel test robot @ 2026-02-28 1:57 UTC (permalink / raw)
To: Maarten Lankhorst
Cc: oe-lkp, lkp, intel-gfx, intel-xe, linux-kernel, oliver.sang
Hello,
since we cannot understand well the purpose of this patch set, this report is
just FYI what we observed in our tests.
by this commit, a big config diff is introduced comparing to parent [1]
then a boot test which can pass on parent now fails with a high rate.
=========================================================================================
tbox_group/testcase/rootfs/kconfig/compiler/sleep:
vm-snb/boot/quantal-x86_64-core-20190426.cgz/x86_64-rhel-9.4-rust/clang-20/1
commit:
822dafa31719f2 ("Revert "drm/i915: Depend on !PREEMPT_RT."")
7bb9eedbc87d82 ("PREEMPT_RT injection")
822dafa31719f205 7bb9eedbc87d8256eebc7edfd24
---------------- ---------------------------
fail:runs %reproduction fail:runs
| | |
:100 87% 87:100 dmesg.BUG:kernel_reboot-without-warning_in_test_stage
unfortunately, we cannot find more useful information in dmesg.
below is full report FYI.
kernel test robot noticed "BUG:kernel_reboot-without-warning_in_test_stage" on:
commit: 7bb9eedbc87d8256eebc7edfd240cb0cdf42e667 ("[i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection")
url: https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-vblank_work-Add-methods-to-schedule-vblank_work-in-2-stages/20260226-012447
base: https://gitlab.freedesktop.org/drm/i915/kernel.git for-linux-next
patch link: https://lore.kernel.org/all/20260225131931.60724-25-dev@lankhorst.se/
patch subject: [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection
in testcase: boot
config: x86_64-rhel-9.4-rust
compiler: clang-20
test machine: qemu-system-x86_64 -enable-kvm -cpu SandyBridge -smp 2 -m 32G
(please refer to attached dmesg/kmsg for entire log/backtrace)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202602280933.d4221030-lkp@intel.com
LKP: ttyS0: 101: /lkp/lkp/src/bin/run-lkp /lkp/jobs/scheduled/vm-meta-207/boot-1-quantal-x86_64-core-20190426.cgz-7bb9eedbc87d-20260227-2306906-1p6guj1-96.yaml[ 27.416092][ T127] INFO: lkp CACHE_DIR is /tmp/cache
[ 27.416099][ T127]
[ 27.490291][ T255] ata2: found unknown device (class 0)
[ 27.493888][ T255] ata2.00: ATAPI: QEMU DVD-ROM, 2.5+, max UDMA/100
[ 27.495381][ T127] LKP: stdout: 101: /lkp/lkp/src/bin/run-lkp /lkp/jobs/scheduled/vm-meta-207/boot-1-quantal-x86_64-core-20190426.cgz-7bb9eedbc87d-20260227-2306906-1p6guj1-96.yaml
[ 27.495388][ T127]
[ 27.510194][ T37] scsi 1:0:0:0: CD-ROM QEMU QEMU DVD-ROM 2.5+ PQ: 0 ANSI: 5
[ 27.591664][ T127] RESULT_ROOT=/result/boot/1/vm-snb/quantal-x86_64-core-20190426.cgz/x86_64-rhel-9.4-rust/clang-20/7bb9eedbc87d8256eebc7edfd240cb0cdf42e667/0
[ 27.591672][ T127]
[ 27.613781][ T127] job=/lkp/jobs/scheduled/vm-meta-207/boot-1-quantal-x86_64-core-20190426.cgz-7bb9eedbc87d-20260227-2306906-1p6guj1-96.yaml
[ 27.613791][ T127]
[ 27.660154][ T219] bochs-drm 0000:00:02.0: vgaarb: deactivate vga console
[ 27.667222][ T219] Console: switching to colour dummy device 80x25
[ 27.669389][ T219] [drm] Found bochs VGA, ID 0xb0c5.
[ 27.669392][ T219] [drm] Framebuffer size 16384 kB @ 0xfd000000, mmio @ 0xfebf0000.
[ 27.682301][ T127] result_service: raw_upload, RESULT_MNT: /internal-lkp-server/result, RESULT_ROOT: /internal-lkp-server/result/boot/1/vm-snb/quantal-x86_64-core-20190426.cgz/x86_64-rhel-9.4-rust/clang-20/7bb9eedbc87d8256eebc7edfd240cb0cdf42e667/0, TMP_RESULT_ROOT: /tmp/lkp/result
[ 27.682309][ T127]
[ 27.685840][ T219] [drm] Initialized bochs-drm 1.0.0 for 0000:00:02.0 on minor 0
[ 27.747112][ T301] parport_pc 00:03: reported by Plug and Play ACPI
[ 27.747359][ T301] parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE]
[ 27.749822][ T219] fbcon: bochs-drmdrmfb (fb0) is primary device
[ 27.766802][ T127] run-job /lkp/jobs/scheduled/vm-meta-207/boot-1-quantal-x86_64-core-20190426.cgz-7bb9eedbc87d-20260227-2306906-1p6guj1-96.yaml
[ 27.766807][ T127]
[ 27.853871][ T219] Console: switching to colour frame buffer device 160x50
[ 27.867424][ T127] /usr/bin/wget -q --timeout=3600 --tries=1 --local-encoding=UTF-8 http://internal-lkp-server:80/~lkp/cgi-bin/lkp-jobfile-append-var?job_file=/lkp/jobs/scheduled/vm-meta-207/boot-1-quantal-x86_64-core-20190426.cgz-7bb9eedbc87d-20260227-2306906-1p6guj1-96.yaml&job_state=running -O /dev/null
[ 27.867435][ T127]
[ 27.897905][ T219] bochs-drm 0000:00:02.0: [drm] fb0: bochs-drmdrmfb frame buffer device
[ 27.989445][ T1] init: failsafe main process (349) killed by TERM signal
[ 28.051819][ T380] ppdev: user-space parallel port driver
[ 28.093899][ T376] sr 1:0:0:0: [sr0] scsi3-mmc drive: 4x/4x cd/rw xa/form2 tray
[ 28.093909][ T376] cdrom: Uniform CD-ROM driver Revision: 3.20
[ 28.107727][ T376] sr 1:0:0:0: Attached scsi CD-ROM sr0
[ 28.357355][ T1] init: networking main process (446) terminated with status 1
[ 28.769126][ T127] target ucode:
[ 28.769138][ T127]
[ 28.804304][ T127] check_nr_cpu
[ 28.804312][ T127]
[ 28.812567][ T127] CPU(s): 2
[ 28.812573][ T127]
[ 28.814711][ T127] On-line CPU(s) list: 0,1
[ 28.814715][ T127]
[ 28.816753][ T127] Thread(s) per core: 1
[ 28.816758][ T127]
[ 28.818021][ T127] Core(s) per socket: 2
[ 28.818026][ T127]
[ 28.819871][ T127] Socket(s): 1
[ 28.819876][ T127]
[ 28.820808][ T127] NUMA node(s): 1
[ 28.820812][ T127]
[ 28.821855][ T127] NUMA node0 CPU(s): 0,1
[ 28.821859][ T127]
[ 29.964375][ T127] sleep started
[ 29.964382][ T127]
[ 31.014164][ T127] /usr/bin/wget -q --timeout=3600 --tries=1 --local-encoding=UTF-8 http://internal-lkp-server:80/~lkp/cgi-bin/lkp-jobfile-append-var?job_file=/lkp/jobs/scheduled/vm-meta-207/boot-1-quantal-x86_64-core-20190426.cgz-7bb9eedbc87d-20260227-2306906-1p6guj1-96.yaml&job_state=post_run -O /dev/null
[ 31.014174][ T127]
[ 32.999598][ T127] kill 490 vmstat -n 1
[ 32.999606][ T127]
[ 33.010867][ T127] kill 487 cat /proc/kmsg
[ 33.010876][ T127]
[ 33.029622][ T127] kill 510 /bin/sh /lkp/lkp/src/programs/watchdog/monitor
[ 33.029629][ T127]
[ 33.034143][ T127] wait for background processes: 504
[ 33.034150][ T127]
[ 33.034420][ T127] monitor
[ 33.034422][ T127]
[ 37.395968][ T127] /usr/bin/wget -q --timeout=3600 --tries=1 --local-encoding=UTF-8 http://internal-lkp-server:80/~lkp/cgi-bin/lkp-jobfile-append-var?job_file=/lkp/jobs/scheduled/vm-meta-207/boot-1-quantal-x86_64-core-20190426.cgz-7bb9eedbc87d-20260227-2306906-1p6guj1-96.yaml&loadavg=0.89%200.25%200.08%202/122%20635&start_time=1772215785&end_time=1772215786&version=/lkp/lkp/.src-20260227-121815:db3bc08cea0e:bc832e21160e-dirty& -O /dev/null
[ 37.395986][ T127]
[ 38.230850][ T127] /usr/bin/wget -q --timeout=3600 --tries=1 --local-encoding=UTF-8 http://internal-lkp-server:80/~lkp/cgi-bin/lkp-jobfile-append-var?job_file=/lkp/jobs/scheduled/vm-meta-207/boot-1-quantal-x86_64-core-20190426.cgz-7bb9eedbc87d-20260227-2306906-1p6guj1-96.yaml&job_state=finished -O /dev/null
[ 38.230880][ T127]
LKP: ttyS0: 101: LKP: tbox cant kexec and rebooting forcely
[ 39.153116][ T127] LKP: stdout: 101: LKP: tbox cant kexec and rebooting forcely
[ 39.153123][ T127]
[ 39.231552][ T127] /usr/bin/wget -q --timeout=3600 --tries=1 --local-encoding=UTF-8 http://internal-lkp-server:80/~lkp/cgi-bin/lkp-wtmp?tbox_name=vm-snb&tbox_state=rebooting_cant_kexec&job_file=/lkp/jobs/scheduled/vm-meta-207/boot-1-quantal-x86_64-core-20190426.cgz-7bb9eedbc87d-20260227-2306906-1p6guj1-96.yaml -O /dev/null
[ 39.231562][ T127]
BUG: kernel reboot-without-warning in test stage
The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20260228/202602280933.d4221030-lkp@intel.com
[1]
--- /pkg/linux/x86_64-rhel-9.4-rust/clang-20/822dafa31719f20589ae143ae18bfaa881f7785d/.config 2026-02-27 17:10:20.025441468 +0800
+++ /pkg/linux/x86_64-rhel-9.4-rust/clang-20/7bb9eedbc87d8256eebc7edfd240cb0cdf42e667/.config 2026-02-27 16:36:20.788050773 +0800
@@ -139,6 +139,8 @@ CONFIG_PREEMPT_BUILD=y
CONFIG_ARCH_HAS_PREEMPT_LAZY=y
# CONFIG_PREEMPT is not set
CONFIG_PREEMPT_LAZY=y
+CONFIG_PREEMPT_RT=y
+# CONFIG_PREEMPT_RT_NEEDS_BH_LOCK is not set
CONFIG_PREEMPT_COUNT=y
CONFIG_PREEMPTION=y
CONFIG_PREEMPT_DYNAMIC=y
@@ -177,8 +179,11 @@ CONFIG_TASKS_RUDE_RCU=y
CONFIG_TASKS_TRACE_RCU=y
CONFIG_RCU_STALL_COMMON=y
CONFIG_RCU_NEED_SEGCBLIST=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_DELAY=500
CONFIG_RCU_NOCB_CPU=y
# CONFIG_RCU_NOCB_CPU_DEFAULT_ALL is not set
+CONFIG_RCU_NOCB_CPU_CB_BOOST=y
# CONFIG_RCU_LAZY is not set
# end of RCU Subsystem
@@ -203,8 +208,6 @@ CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplic
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
CONFIG_GCC_NO_STRINGOP_OVERFLOW=y
CONFIG_ARCH_SUPPORTS_INT128=y
-CONFIG_NUMA_BALANCING=y
-CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
CONFIG_SLAB_OBJ_EXT=y
CONFIG_CGROUPS=y
CONFIG_PAGE_COUNTER=y
@@ -933,14 +936,12 @@ CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PU
CONFIG_HAVE_ARCH_HUGE_VMAP=y
CONFIG_HAVE_ARCH_HUGE_VMALLOC=y
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
-CONFIG_ARCH_WANT_PMD_MKWRITE=y
CONFIG_HAVE_ARCH_SOFT_DIRTY=y
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_ARCH_HAS_EXECMEM_ROX=y
CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y
-CONFIG_SOFTIRQ_ON_OWN_STACK=y
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
CONFIG_HAVE_EXIT_THREAD=y
@@ -1101,7 +1102,6 @@ CONFIG_LOCK_SPIN_ON_OWNER=y
CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y
CONFIG_QUEUED_SPINLOCKS=y
CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
-CONFIG_QUEUED_RWLOCKS=y
CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y
CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y
CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y
@@ -1191,12 +1191,11 @@ CONFIG_SPLIT_PMD_PTLOCKS=y
CONFIG_BALLOON=y
CONFIG_BALLOON_MIGRATION=y
CONFIG_COMPACTION=y
-CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
+CONFIG_COMPACT_UNEVICTABLE_DEFAULT=0
CONFIG_PAGE_REPORTING=y
CONFIG_MIGRATION=y
CONFIG_DEVICE_MIGRATION=y
CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
-CONFIG_ARCH_ENABLE_THP_MIGRATION=y
CONFIG_CONTIG_ALLOC=y
CONFIG_PCP_BATCH_SCALE_MAX=5
CONFIG_PHYS_ADDR_T_64BIT=y
@@ -1208,30 +1207,10 @@ CONFIG_MEMORY_FAILURE=y
CONFIG_HWPOISON_INJECT=m
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_ARCH_WANTS_THP_SWAP=y
-# CONFIG_PERSISTENT_HUGE_ZERO_FOLIO is not set
-CONFIG_MM_ID=y
-CONFIG_TRANSPARENT_HUGEPAGE=y
-CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
-# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
-# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set
-CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_NEVER=y
-# CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_ALWAYS is not set
-# CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_WITHIN_SIZE is not set
-# CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_ADVISE is not set
-CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_NEVER=y
-# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_ALWAYS is not set
-# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_WITHIN_SIZE is not set
-# CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_ADVISE is not set
-CONFIG_THP_SWAP=y
-# CONFIG_READ_ONLY_THP_FOR_FS is not set
-# CONFIG_NO_PAGE_MAPCOUNT is not set
CONFIG_PAGE_MAPCOUNT=y
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
CONFIG_HAVE_GIGANTIC_FOLIOS=y
CONFIG_ASYNC_KERNEL_PGTABLE_FREE=y
-CONFIG_ARCH_SUPPORTS_HUGE_PFNMAP=y
-CONFIG_ARCH_SUPPORTS_PMD_PFNMAP=y
-CONFIG_ARCH_SUPPORTS_PUD_PFNMAP=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
CONFIG_USE_PERCPU_NUMA_NODE_ID=y
@@ -1537,7 +1516,6 @@ CONFIG_NF_FLOW_TABLE_INET=m
CONFIG_NF_FLOW_TABLE=m
CONFIG_NF_FLOW_TABLE_PROCFS=y
CONFIG_NETFILTER_XTABLES=y
-# CONFIG_NETFILTER_XTABLES_LEGACY is not set
#
# Xtables combined modules
@@ -2859,7 +2837,6 @@ CONFIG_DM_INTEGRITY=m
# CONFIG_DM_ZONED is not set
CONFIG_DM_AUDIT=y
# CONFIG_DM_VDO is not set
-# CONFIG_DM_PCACHE is not set
CONFIG_TARGET_CORE=m
CONFIG_TCM_IBLOCK=m
CONFIG_TCM_FILEIO=m
@@ -5344,6 +5321,7 @@ CONFIG_DRM_I915_MAX_REQUEST_BUSYWAIT=800
CONFIG_DRM_I915_STOP_TIMEOUT=100
CONFIG_DRM_I915_TIMESLICE_DURATION=1
CONFIG_DRM_MGAG200=m
+# CONFIG_DRM_MGAG200_DISABLE_WRITECOMBINE is not set
CONFIG_DRM_NOUVEAU=m
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
@@ -6939,7 +6917,6 @@ CONFIG_LEDS_TRIGGER_DISK=y
# CONFIG_LEDS_TRIGGER_MTD is not set
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
-# CONFIG_LEDS_TRIGGER_CPU is not set
# CONFIG_LEDS_TRIGGER_ACTIVITY is not set
CONFIG_LEDS_TRIGGER_GPIO=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
@@ -8387,12 +8364,8 @@ CONFIG_RAMDAX=m
CONFIG_NVDIMM_KEYS=y
# CONFIG_NVDIMM_SECURITY_TEST is not set
CONFIG_DAX=y
-CONFIG_DEV_DAX=m
-CONFIG_DEV_DAX_PMEM=m
CONFIG_DEV_DAX_HMEM=m
-CONFIG_DEV_DAX_CXL=m
CONFIG_DEV_DAX_HMEM_DEVICES=y
-CONFIG_DEV_DAX_KMEM=m
CONFIG_NVMEM=y
CONFIG_NVMEM_SYSFS=y
# CONFIG_NVMEM_LAYOUTS is not set
@@ -8476,7 +8449,6 @@ CONFIG_GFS2_FS_LOCKING_DLM=y
# CONFIG_F2FS_FS is not set
# CONFIG_ZONEFS_FS is not set
CONFIG_FS_DAX=y
-CONFIG_FS_DAX_PMD=y
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
CONFIG_EXPORTFS_BLOCK_OPS=y
@@ -9490,7 +9462,6 @@ CONFIG_HAVE_ARCH_KFENCE=y
# CONFIG_KFENCE is not set
CONFIG_HAVE_ARCH_KMSAN=y
CONFIG_HAVE_KMSAN_COMPILER=y
-# CONFIG_KMSAN is not set
# end of Memory Debugging
CONFIG_DEBUG_SHIRQ=y
@@ -9516,7 +9487,6 @@ CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=480
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=0
-CONFIG_DETECT_HUNG_TASK_BLOCKER=y
CONFIG_WQ_WATCHDOG=y
CONFIG_BOOTPARAM_WQ_STALL_PANIC=0
# CONFIG_WQ_CPU_INTENSIVE_REPORT is not set
@@ -9541,9 +9511,7 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
-# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
CONFIG_DEBUG_ATOMIC_SLEEP=y
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
@@ -9882,7 +9850,6 @@ CONFIG_SIPHASH_KUNIT_TEST=m
# CONFIG_TEST_MEMCAT_P is not set
# CONFIG_TEST_OBJAGG is not set
# CONFIG_TEST_MEMINIT is not set
-CONFIG_TEST_HMM=m
# CONFIG_TEST_FREE_PAGES is not set
# CONFIG_TEST_FPU is not set
# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 33+ messages in thread
end of thread, other threads:[~2026-02-28 1:57 UTC | newest]
Thread overview: 33+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-25 13:19 [i915-ci-only NO-REVIEW 00/25] Test PREEMPT_RT on i915 with selftest fix Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 01/25] drm/vblank_work: Add methods to schedule vblank_work in 2 stages Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 02/25] drm/vblank: Add a 2-stage version of drm_crtc_arm_vblank_event Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 03/25] drm/intel/display: Make intel_crtc_arm_vblank_event static Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 04/25] drm/intel/display: Convert vblank event handling to 2-stage arming Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 05/25] drm/i915/display: Move vblank put until after critical section Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 06/25] drm/i915/display: Remove locking from intel_vblank_evade " Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 07/25] drm/i915/display: Handle vlv dsi workaround in scanline_in_safe_range too Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 08/25] drm/i915: Use preempt_disable/enable_rt() where recommended Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 09/25] drm/i915/display: Make get_vblank_counter use intel_de_read_fw() Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 10/25] drm/i915/display: Do not take uncore lock in i915_get_vblank_counter Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 11/25] drm/i915/display: Make icl_dsi_frame_update use _fw too Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 12/25] drm/i915/display: Use intel_de_read/write_fw in colorops Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 13/25] drm/i915/display: Use intel_de_write_fw in intel_pipe_fastset Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 14/25] drm/i915/display: Make set_pipeconf use the fw variants Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 15/25] drm/i915/display: Fix intel_lpe_audio_irq_handler for PREEMPT-RT Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 16/25] drm/i915/gt: Use spin_lock_irq() instead of local_irq_disable() + spin_lock() Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 17/25] drm/i915: Drop the irqs_disabled() check Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 18/25] drm/i915/guc: Consider also RCU depth in busy loop Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 19/25] drm/i915/gt: Fix selftests on PREEMPT_RT Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 20/25] drm/i915/gt: Set stop_timeout() correctly on PREEMPT-RT Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 21/25] drm/i915/display: Remove uncore lock from vlv_atomic_update_fifo Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 22/25] drm/i915: Use sleeping selftests for igt_atomic on PREEMPT_RT Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 23/25] Revert "drm/i915: Depend on !PREEMPT_RT." Maarten Lankhorst
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection Maarten Lankhorst
2026-02-25 21:15 ` kernel test robot
2026-02-25 21:26 ` kernel test robot
2026-02-26 7:41 ` kernel test robot
2026-02-28 1:57 ` kernel test robot
2026-02-25 13:19 ` [i915-ci-only NO-REVIEW 25/25] FOR-CI: bump MAX_STACK_TRACE_ENTRIES Maarten Lankhorst
2026-02-25 16:38 ` ✗ i915.CI.BAT: failure for Test PREEMPT_RT on i915 with selftest fix Patchwork
-- strict thread matches above, loose matches on Subject: below --
2026-02-26 1:33 [i915-ci-only NO-REVIEW 24/25] PREEMPT_RT injection kernel test robot
2026-02-26 3:26 kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.