On Thu, 28 Aug 2025, Maarten Lankhorst <[email protected]> wrote: > Luca Abeni reported this: > | BUG: scheduling while atomic: kworker/u8:2/15203/0x00000003 > | CPU: 1 PID: 15203 Comm: kworker/u8:2 Not tainted 4.19.1-rt3 #10 > | Call Trace: > | rt_spin_lock+0x3f/0x50 > | gen6_read32+0x45/0x1d0 [i915] > | g4x_get_vblank_counter+0x36/0x40 [i915] > | trace_event_raw_event_i915_pipe_update_start+0x7d/0xf0 [i915] > > The tracing events use trace_intel_pipe_update_start() among other events > use functions acquire spinlock_t locks which are transformed into > sleeping locks on PREEMPT_RT. A few trace points use > intel_get_crtc_scanline(), others use ->get_vblank_counter() wich also > might acquire a sleeping locks on PREEMPT_RT. > At the time the arguments are evaluated within trace point, preemption > is disabled and so the locks must not be acquired on PREEMPT_RT. > > Based on this I don't see any other way than disable trace points on > PREMPT_RT. > > [mlankhorst] > The original patch was insufficient, and since the tracing > infrastructure does not allow for partial disabling of tracepoints. > > Completely disable tracing for the entire i915 driver in PREEMPT_RT, > a separate fix for display tracepoints on xe is added to make those > work. > > Cc: Tvrtko Ursulin <[email protected]> > Reported-by: Luca Abeni <[email protected]> > Cc: Steven Rostedt <[email protected]> > Co-developed-by: Sebastian Andrzej Siewior <[email protected]> > Signed-off-by: Maarten Lankhorst <[email protected]> > --- > drivers/gpu/drm/i915/Makefile | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > index 8535434430728..ba825d7f6ddf5 100644 > --- a/drivers/gpu/drm/i915/Makefile > +++ b/drivers/gpu/drm/i915/Makefile > @@ -13,6 +13,11 @@ subdir-ccflags-$(CONFIG_DRM_I915_WERROR) += -Werror > # drivers. Define I915 when building i915. > subdir-ccflags-y += -DI915 > > +# Disable tracepoints on i915 for PREEMPT_RT, unfortunately > +# it's an all or nothing flag. You cannot selectively disable > +# only some tracepoints.
Should probably be a FIXME. Acked-by: Jani Nikula <[email protected]> > +subdir-ccflags-$(CONFIG_PREEMPT_RT) += -DNOTRACE > + > subdir-ccflags-y += -I$(src) > > # Please keep these build lists sorted! -- Jani Nikula, Intel
