On 2025-08-29 14:14:10 [+0300], Jani Nikula wrote:
> > --- a/drivers/gpu/drm/i915/display/intel_display_trace.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_trace.h
> > @@ -10,6 +10,8 @@
> > #define TRACE_SYSTEM xe
> > #endif
> >
> > +#define UPDATE_VBLANK (!IS_ENABLED(CONFIG_PREEMPT_RT))
>
> So I'm thinking leave intel_crtc_get_vblank_counter() alone completely,
> and hide all the ugly parts inside the trace file:
>
> #if IS_ENABLED(CONFIG_PREEMPT_RT)
> /* Avoid irq lock in tracepoints with PREEMPT_RT=y */
> static inline u32 __trace_intel_crtc_get_vblank_counter(struct intel_crtc
> *crtc)
> {
> struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc->base);
>
> if (!crtc->active)
> return 0;
>
> if (!vblank->max_vblank_count)
> return (u32)drm_crtc_accurate_vblank_count(&crtc->base);
> return (u32)drm_crtc_vblank_count(&crtc->base);
>
> return crtc->base.funcs->get_vblank_counter(&crtc->base);
> }
> #else
> #define __trace_intel_crtc_get_vblank_counter intel_crtc_get_vblank_counter
> #endif
>
> And then
> s/intel_crtc_get_vblank_counter/__trace_intel_crtc_get_vblank_counter/
> below.
If I may: There is also the possibility to use the _enabled() function of
a trace point. So instead trace_intel_pipe_enable() you would so
something like
| void do_trace_intel_pipe_enable(struct intel_crtc *crtc)
| {
| if (!trace_intel_pipe_enable_enabled())
| return;
| trace_intel_pipe(crtc,
| intel_crtc_get_vblank_counter(crtc));
| }
The _enabled() macro uses the static branches as the actual TP. The
intel_crtc_get_vblank_counter() would only be evaluated if the TP is
enabled and passed early.
> BR,
> Jani.
Sebastian