On 2021-12-14 09:36:52 [-0500], Steven Rostedt wrote:
Another way around this that I can see is if the data for the tracepoints can fit on the stack and add wrappers around the tracepoints. For example, looking at the first tracepoint in i915_trace.h:
…
Nice.
We could modify this to be:
…
static inline void do_trace_intel_pipe(struct intel_crtc *crtc) { u32 frame[3]; u32 scanline[3]; enum pipe pipe;
if (!trace_intel_pipe_enable_enabled()) return;
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); struct intel_crtc *it__; for_each_intel_crtc(&dev_priv->drm, it__) { frame[it__->pipe] = intel_crtc_get_vblank_counter(it__); scanline[it__->pipe] = intel_get_crtc_scanline(it__); }
trace_intel_pipe(frame, scanline, crtc->pipe); }
…
Then have the code call do_trace_intel_pipe() instead of trace_intel_pipe() and this should fix the issue with preempt rt.
Is this is something, that the i915 devs would accept?
-- Steve
Sebastian