[lttng-dev] [PATCH lttng-modules] Fix: Convert rcu tracepointis to gp_seq (v4.19)

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Wed Oct 10 14:52:47 EDT 2018


Merged into master, 2.11, 2.10, 2.9, thanks!

Mathieu

----- On Oct 10, 2018, at 2:17 PM, Michael Jeanson mjeanson at efficios.com wrote:

> See upstream commits :
> 
>  commit 477351f7829d2268769c5d545511081555066529
>  Author: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
>  Date:   Tue May 1 12:54:11 2018 -0700
> 
>    rcu: Convert rcu_grace_period tracepoint to gp_seq
> 
>    This commit makes the rcu_grace_period tracepoint use gp_seq instead
>    of ->gpnum or ->completed.  It also introduces a "cpuofl-bgp" string to
>    less obscurely indicate when a CPU has gone offline while a grace period
>    is waiting on it.
> 
>  commit 63d86a7e85f84b8ac3b2f394570965aedbb03787
>  Author: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
>  Date:   Tue May 1 13:08:46 2018 -0700
> 
>    rcu: Convert rcu_grace_period_init tracepoint to gp_seq
> 
>    This commit makes the rcu_grace_period_init tracepoint use gp_seq instead
>    of ->gpnum.
> 
>  commit 598ce09480efb6b48799df60c66bac70bea5ef54
>  Author: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
>  Date:   Tue May 1 13:35:20 2018 -0700
> 
>    rcu: Convert rcu_preempt_task tracepoint to ->gp_seq
> 
>    This commit makes the rcu_preempt_task tracepoint use ->gp_seq instead
>    of ->gpnum.
> 
>  commit 865aa1e08d8aefdfd1f5d30ecfce1b8ef8cd520a
>  Author: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
>  Date:   Tue May 1 13:35:20 2018 -0700
> 
>    rcu: Convert rcu_unlock_preempted_task tracepoint to ->gp_seq
> 
>    This commit makes the rcu_unlock_preempted_task tracepoint use ->gp_seq
>    instead of ->gpnum.
> 
>  commit db023296f0115d2fe01fdabad54678f2b806da23
>  Author: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
>  Date:   Tue May 1 13:35:20 2018 -0700
> 
>    rcu: Convert rcu_quiescent_state_report tracepoint to ->gp_seq
> 
>    This commit makes the rcu_quiescent_state_report tracepoint use ->gp_seq
>    instead of ->gpnum.
> 
>  commit fee5997c17562e95fb1fecc142efb2da0934baa4
>  Author: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
>  Date:   Tue May 1 13:35:20 2018 -0700
> 
>    rcu: Convert rcu_fqs tracepoint to ->gp_seq
> 
>    This commit makes the rcu_fqs tracepoint use ->gp_seq instead of ->gpnum.
> 
> Signed-off-by: Michael Jeanson <mjeanson at efficios.com>
> ---
> instrumentation/events/lttng-module/rcu.h | 214 ++++++++++++++++++++--
> 1 file changed, 196 insertions(+), 18 deletions(-)
> 
> diff --git a/instrumentation/events/lttng-module/rcu.h
> b/instrumentation/events/lttng-module/rcu.h
> index aa97079..cebfa90 100644
> --- a/instrumentation/events/lttng-module/rcu.h
> +++ b/instrumentation/events/lttng-module/rcu.h
> @@ -50,13 +50,36 @@ LTTNG_TRACEPOINT_EVENT(rcu_utilization,
>  * and "cpuofl", respectively), and a CPU being kicked for being too
>  * long in dyntick-idle mode ("kick").
>  */
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +LTTNG_TRACEPOINT_EVENT(rcu_grace_period,
> +
> +	TP_PROTO(const char *rcuname, unsigned long gp_seq, const char *gpevent),
> +
> +	TP_ARGS(rcuname, gp_seq, gpevent),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gp_seq, gp_seq)
> +		ctf_string(gpevent, gpevent)
> +	)
> +)
> +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> LTTNG_TRACEPOINT_EVENT(rcu_grace_period,
> 
> -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> 	TP_PROTO(const char *rcuname, unsigned long gpnum, const char *gpevent),
> -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> +
> +	TP_ARGS(rcuname, gpnum, gpevent),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gpnum, gpnum)
> +		ctf_string(gpevent, gpevent)
> +	)
> +)
> +#else
> +LTTNG_TRACEPOINT_EVENT(rcu_grace_period,
> +
> 	TP_PROTO(char *rcuname, unsigned long gpnum, char *gpevent),
> -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> 
> 	TP_ARGS(rcuname, gpnum, gpevent),
> 
> @@ -66,6 +89,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_grace_period,
> 		ctf_string(gpevent, gpevent)
> 	)
> )
> +#endif
> 
> /*
>  * Tracepoint for grace-period-initialization events.  These are
> @@ -74,15 +98,45 @@ LTTNG_TRACEPOINT_EVENT(rcu_grace_period,
>  * rcu_node structure, and the mask of CPUs that will be waited for.
>  * All but the type of RCU are extracted from the rcu_node structure.
>  */
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +LTTNG_TRACEPOINT_EVENT(rcu_grace_period_init,
> +
> +	TP_PROTO(const char *rcuname, unsigned long gp_seq, u8 level,
> +		 int grplo, int grphi, unsigned long qsmask),
> +
> +	TP_ARGS(rcuname, gp_seq, level, grplo, grphi, qsmask),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gp_seq, gp_seq)
> +		ctf_integer(u8, level, level)
> +		ctf_integer(int, grplo, grplo)
> +		ctf_integer(int, grphi, grphi)
> +		ctf_integer(unsigned long, qsmask, qsmask)
> +	)
> +)
> +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> LTTNG_TRACEPOINT_EVENT(rcu_grace_period_init,
> 
> -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> 	TP_PROTO(const char *rcuname, unsigned long gpnum, u8 level,
> 		 int grplo, int grphi, unsigned long qsmask),
> -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> +
> +	TP_ARGS(rcuname, gpnum, level, grplo, grphi, qsmask),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gpnum, gpnum)
> +		ctf_integer(u8, level, level)
> +		ctf_integer(int, grplo, grplo)
> +		ctf_integer(int, grphi, grphi)
> +		ctf_integer(unsigned long, qsmask, qsmask)
> +	)
> +)
> +#else
> +LTTNG_TRACEPOINT_EVENT(rcu_grace_period_init,
> +
> 	TP_PROTO(char *rcuname, unsigned long gpnum, u8 level,
> 		 int grplo, int grphi, unsigned long qsmask),
> -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> 
> 	TP_ARGS(rcuname, gpnum, level, grplo, grphi, qsmask),
> 
> @@ -95,6 +149,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_grace_period_init,
> 		ctf_integer(unsigned long, qsmask, qsmask)
> 	)
> )
> +#endif
> 
> /*
>  * Tracepoint for tasks blocking within preemptible-RCU read-side
> @@ -102,13 +157,36 @@ LTTNG_TRACEPOINT_EVENT(rcu_grace_period_init,
>  * include SRCU), the grace-period number that the task is blocking
>  * (the current or the next), and the task's PID.
>  */
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +LTTNG_TRACEPOINT_EVENT(rcu_preempt_task,
> +
> +	TP_PROTO(const char *rcuname, int pid, unsigned long gp_seq),
> +
> +	TP_ARGS(rcuname, pid, gp_seq),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gp_seq, gp_seq)
> +		ctf_integer(int, pid, pid)
> +	)
> +)
> +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> LTTNG_TRACEPOINT_EVENT(rcu_preempt_task,
> 
> -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> 	TP_PROTO(const char *rcuname, int pid, unsigned long gpnum),
> -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> +
> +	TP_ARGS(rcuname, pid, gpnum),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gpnum, gpnum)
> +		ctf_integer(int, pid, pid)
> +	)
> +)
> +#else
> +LTTNG_TRACEPOINT_EVENT(rcu_preempt_task,
> +
> 	TP_PROTO(char *rcuname, int pid, unsigned long gpnum),
> -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> 
> 	TP_ARGS(rcuname, pid, gpnum),
> 
> @@ -118,19 +196,43 @@ LTTNG_TRACEPOINT_EVENT(rcu_preempt_task,
> 		ctf_integer(int, pid, pid)
> 	)
> )
> +#endif
> 
> /*
>  * Tracepoint for tasks that blocked within a given preemptible-RCU
>  * read-side critical section exiting that critical section.  Track the
>  * type of RCU (which one day might include SRCU) and the task's PID.
>  */
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +LTTNG_TRACEPOINT_EVENT(rcu_unlock_preempted_task,
> +
> +	TP_PROTO(const char *rcuname, unsigned long gp_seq, int pid),
> +
> +	TP_ARGS(rcuname, gp_seq, pid),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gp_seq, gp_seq)
> +		ctf_integer(int, pid, pid)
> +	)
> +)
> +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> LTTNG_TRACEPOINT_EVENT(rcu_unlock_preempted_task,
> 
> -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> 	TP_PROTO(const char *rcuname, unsigned long gpnum, int pid),
> -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> +
> +	TP_ARGS(rcuname, gpnum, pid),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gpnum, gpnum)
> +		ctf_integer(int, pid, pid)
> +	)
> +)
> +#else
> +LTTNG_TRACEPOINT_EVENT(rcu_unlock_preempted_task,
> +
> 	TP_PROTO(char *rcuname, unsigned long gpnum, int pid),
> -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> 
> 	TP_ARGS(rcuname, gpnum, pid),
> 
> @@ -140,6 +242,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_unlock_preempted_task,
> 		ctf_integer(int, pid, pid)
> 	)
> )
> +#endif
> 
> /*
>  * Tracepoint for quiescent-state-reporting events.  These are
> @@ -149,17 +252,52 @@ LTTNG_TRACEPOINT_EVENT(rcu_unlock_preempted_task,
>  * whether there are any blocked tasks blocking the current grace period.
>  * All but the type of RCU are extracted from the rcu_node structure.
>  */
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +LTTNG_TRACEPOINT_EVENT(rcu_quiescent_state_report,
> +
> +	TP_PROTO(const char *rcuname, unsigned long gp_seq,
> +		 unsigned long mask, unsigned long qsmask,
> +		 u8 level, int grplo, int grphi, int gp_tasks),
> +
> +	TP_ARGS(rcuname, gp_seq, mask, qsmask, level, grplo, grphi, gp_tasks),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gp_seq, gp_seq)
> +		ctf_integer(unsigned long, mask, mask)
> +		ctf_integer(unsigned long, qsmask, qsmask)
> +		ctf_integer(u8, level, level)
> +		ctf_integer(int, grplo, grplo)
> +		ctf_integer(int, grphi, grphi)
> +		ctf_integer(u8, gp_tasks, gp_tasks)
> +	)
> +)
> +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> LTTNG_TRACEPOINT_EVENT(rcu_quiescent_state_report,
> 
> -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> 	TP_PROTO(const char *rcuname, unsigned long gpnum,
> 		 unsigned long mask, unsigned long qsmask,
> 		 u8 level, int grplo, int grphi, int gp_tasks),
> -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> +
> +	TP_ARGS(rcuname, gpnum, mask, qsmask, level, grplo, grphi, gp_tasks),
> +
> +	TP_FIELDS(
> +		ctf_string(rcuname, rcuname)
> +		ctf_integer(unsigned long, gpnum, gpnum)
> +		ctf_integer(unsigned long, mask, mask)
> +		ctf_integer(unsigned long, qsmask, qsmask)
> +		ctf_integer(u8, level, level)
> +		ctf_integer(int, grplo, grplo)
> +		ctf_integer(int, grphi, grphi)
> +		ctf_integer(u8, gp_tasks, gp_tasks)
> +	)
> +)
> +#else
> +LTTNG_TRACEPOINT_EVENT(rcu_quiescent_state_report,
> +
> 	TP_PROTO(char *rcuname, unsigned long gpnum,
> 		 unsigned long mask, unsigned long qsmask,
> 		 u8 level, int grplo, int grphi, int gp_tasks),
> -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> 
> 	TP_ARGS(rcuname, gpnum, mask, qsmask, level, grplo, grphi, gp_tasks),
> 
> @@ -174,6 +312,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_quiescent_state_report,
> 		ctf_integer(u8, gp_tasks, gp_tasks)
> 	)
> )
> +#endif
> 
> /*
>  * Tracepoint for quiescent states detected by force_quiescent_state().
> @@ -183,13 +322,38 @@ LTTNG_TRACEPOINT_EVENT(rcu_quiescent_state_report,
>  * or "kick" when kicking a CPU that has been in dyntick-idle mode for
>  * too long.
>  */
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +LTTNG_TRACEPOINT_EVENT(rcu_fqs,
> +
> +	TP_PROTO(const char *rcuname, unsigned long gp_seq, int cpu, const char
> *qsevent),
> +
> +	TP_ARGS(rcuname, gp_seq, cpu, qsevent),
> +
> +	TP_FIELDS(
> +		ctf_integer(unsigned long, gp_seq, gp_seq)
> +		ctf_integer(int, cpu, cpu)
> +		ctf_string(rcuname, rcuname)
> +		ctf_string(qsevent, qsevent)
> +	)
> +)
> +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> LTTNG_TRACEPOINT_EVENT(rcu_fqs,
> 
> -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
> 	TP_PROTO(const char *rcuname, unsigned long gpnum, int cpu, const char
> 	*qsevent),
> -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> +
> +	TP_ARGS(rcuname, gpnum, cpu, qsevent),
> +
> +	TP_FIELDS(
> +		ctf_integer(unsigned long, gpnum, gpnum)
> +		ctf_integer(int, cpu, cpu)
> +		ctf_string(rcuname, rcuname)
> +		ctf_string(qsevent, qsevent)
> +	)
> +)
> +#else
> +LTTNG_TRACEPOINT_EVENT(rcu_fqs,
> +
> 	TP_PROTO(char *rcuname, unsigned long gpnum, int cpu, char *qsevent),
> -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */
> 
> 	TP_ARGS(rcuname, gpnum, cpu, qsevent),
> 
> @@ -200,6 +364,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_fqs,
> 		ctf_string(qsevent, qsevent)
> 	)
> )
> +#endif
> 
> #endif	/*
> 	 * #if defined(CONFIG_TREE_RCU)
> @@ -604,6 +769,17 @@ LTTNG_TRACEPOINT_EVENT(rcu_barrier,
> 
> #else /* #ifdef CONFIG_RCU_TRACE */
> 
> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,19,0))
> +#define trace_rcu_grace_period(rcuname, gp_seq, gpevent) do { } while (0)
> +#define trace_rcu_grace_period_init(rcuname, gp_seq, level, grplo, grphi, \
> +				    qsmask) do { } while (0)
> +#define trace_rcu_preempt_task(rcuname, pid, gp_seq) do { } while (0)
> +#define trace_rcu_unlock_preempted_task(rcuname, gp_seq, pid) do { } while (0)
> +#define trace_rcu_quiescent_state_report(rcuname, gp_seq, mask, qsmask, level,
> \
> +					 grplo, grphi, gp_tasks) do { } \
> +	while (0)
> +#define trace_rcu_fqs(rcuname, gp_seq, cpu, qsevent) do { } while (0)
> +#else
> #define trace_rcu_grace_period(rcuname, gpnum, gpevent) do { } while (0)
> #define trace_rcu_grace_period_init(rcuname, gpnum, level, grplo, grphi, \
> 				    qsmask) do { } while (0)
> @@ -613,6 +789,8 @@ LTTNG_TRACEPOINT_EVENT(rcu_barrier,
> 					 grplo, grphi, gp_tasks) do { } \
> 	while (0)
> #define trace_rcu_fqs(rcuname, gpnum, cpu, qsevent) do { } while (0)
> +#endif
> +
> #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,16,0))
> #define trace_rcu_dyntick(polarity, oldnesting, newnesting, dyntick) do { }
> while (0)
> #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
> --
> 2.17.1

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


More information about the lttng-dev mailing list