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

Michael Jeanson mjeanson at efficios.com
Wed Oct 10 14:17:46 EDT 2018


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



More information about the lttng-dev mailing list