[lttng-dev] [PATCH lttng-modules 2/2] Fix: tracing: Centralize preemptirq tracepoints (4.19)

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Mon Oct 1 14:03:45 EDT 2018


Merged into master and 2.11 only, thanks!

Mathieu

----- On Sep 7, 2018, at 12:21 PM, Michael Jeanson mjeanson at efficios.com wrote:

> See upstream commit:
> 
>  commit c3bc8fd637a9623f5c507bd18f9677effbddf584
>  Author: Joel Fernandes (Google) <joel at joelfernandes.org>
>  Date:   Mon Jul 30 15:24:23 2018 -0700
> 
>    tracing: Centralize preemptirq tracepoints and unify their usage
> 
>    This patch detaches the preemptirq tracepoints from the tracers and
>    keeps it separate.
> 
>    Advantages:
>    * Lockdep and irqsoff event can now run in parallel since they no longer
>    have their own calls.
> 
>    * This unifies the usecase of adding hooks to an irqsoff and irqson
>    event, and a preemptoff and preempton event.
>      3 users of the events exist:
>      - Lockdep
>      - irqsoff and preemptoff tracers
>      - irqs and preempt trace events
> 
>    The unification cleans up several ifdefs and makes the code in preempt
>    tracer and irqsoff tracers simpler. It gets rid of all the horrific
>    ifdeferry around PROVE_LOCKING and makes configuration of the different
>    users of the tracepoints more easy and understandable. It also gets rid
>    of the time_* function calls from the lockdep hooks used to call into
>    the preemptirq tracer which is not needed anymore. The negative delta in
>    lines of code in this patch is quite large too.
> 
>    In the patch we introduce a new CONFIG option PREEMPTIRQ_TRACEPOINTS
>    as a single point for registering probes onto the tracepoints. With
>    this,
>    the web of config options for preempt/irq toggle tracepoints and its
>    users becomes:
> 
>     PREEMPT_TRACER   PREEMPTIRQ_EVENTS  IRQSOFF_TRACER PROVE_LOCKING
>           |                 |     \         |           |
>           \    (selects)    /      \        \ (selects) /
>          TRACE_PREEMPT_TOGGLE       ----> TRACE_IRQFLAGS
>                          \                  /
>                           \ (depends on)   /
>                         PREEMPTIRQ_TRACEPOINTS
> 
> Signed-off-by: Michael Jeanson <mjeanson at efficios.com>
> ---
> .../events/lttng-module/preemptirq.h          | 37 ++++++++++++++++---
> 1 file changed, 32 insertions(+), 5 deletions(-)
> 
> diff --git a/instrumentation/events/lttng-module/preemptirq.h
> b/instrumentation/events/lttng-module/preemptirq.h
> index 4f9be85..2fc8117 100644
> --- a/instrumentation/events/lttng-module/preemptirq.h
> +++ b/instrumentation/events/lttng-module/preemptirq.h
> @@ -12,6 +12,9 @@
> #include <asm/sections.h>
> #include <probes/lttng-tracepoint-event.h>
> 
> +/*
> + * The preemptirq probe is built when CONFIG_PREEMPTIRQ_EVENTS is defined.
> + */
> 
> LTTNG_TRACEPOINT_EVENT_CLASS(preemptirq_template,
> 
> @@ -25,7 +28,19 @@ LTTNG_TRACEPOINT_EVENT_CLASS(preemptirq_template,
> 	)
> )
> 
> -#ifndef CONFIG_PROVE_LOCKING
> +/*
> + * Tracing of irq enable / disable events is enabled
> + *   on >= 4.19 when CONFIG_TRACE_IRQFLAGS is defined.
> + *   on previous kernels when CONFIG_PROVE_LOCKING is NOT defined.
> + */
> +#if defined(CONFIG_TRACE_IRQFLAGS)
> +#define LTTNG_TRACE_IRQ
> +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0) && \
> +	!defined(CONFIG_PROVE_LOCKING))
> +#define LTTNG_TRACE_IRQ
> +#endif
> +
> +#ifdef LTTNG_TRACE_IRQ
> LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template, irq_disable,
> 
> 	preemptirq_irq_disable,
> @@ -43,9 +58,21 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template,
> irq_enable,
> 
> 	TP_ARGS(ip, parent_ip)
> )
> -#endif /* !CONFIG_PROVE_LOCKING */
> -
> -#ifdef CONFIG_DEBUG_PREEMPT
> +#endif /* LTTNG_TRACE_IRQ */
> +
> +/*
> + * Tracing of preempt enable / disable events is enabled
> + *   on >= 4.19 when CONFIG_TRACE_PREEMPT_TOGGLE is defined.
> + *   on previous kernels when CONFIG_DEBUG_PREEMPT is defined.
> + */
> +#if defined(CONFIG_TRACE_PREEMPT_TOGGLE)
> +#define LTTNG_TRACE_PREEMPT
> +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(4,19,0) && \
> +	defined(CONFIG_DEBUG_PREEMPT))
> +#define LTTNG_TRACE_PREEMPT
> +#endif
> +
> +#ifdef LTTNG_TRACE_PREEMPT
> LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template, preempt_disable,
> 
> 	preemptirq_preempt_disable,
> @@ -63,7 +90,7 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template,
> preempt_enable,
> 
> 	TP_ARGS(ip, parent_ip)
> )
> -#endif /* CONFIG_DEBUG_PREEMPT */
> +#endif /* LTTNG_TRACE_PREEMPT */
> 
> #endif /* LTTNG_TRACE_PREEMPTIRQ_H */
> 
> --
> 2.17.1

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com


More information about the lttng-dev mailing list