X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=instrumentation%2Fevents%2Flttng-module%2Frcu.h;h=d2dbedfa85322c625a6d379e4be6dd785a01d415;hb=b78104db53f97c10add30016e365855a26f6e01e;hp=58a2306f7a59f9e010f4ee56f90b13415e104938;hpb=7621c2671ae06e51103a3ddd70e8b7e1d8fefa8c;p=lttng-modules.git diff --git a/instrumentation/events/lttng-module/rcu.h b/instrumentation/events/lttng-module/rcu.h index 58a2306f..d2dbedfa 100644 --- a/instrumentation/events/lttng-module/rcu.h +++ b/instrumentation/events/lttng-module/rcu.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */ #undef TRACE_SYSTEM #define TRACE_SYSTEM rcu @@ -5,7 +6,7 @@ #define LTTNG_TRACE_RCU_H #include -#include +#include /* * Tracepoint for start/end markers used for utilization calculations. @@ -20,11 +21,11 @@ */ LTTNG_TRACEPOINT_EVENT(rcu_utilization, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) TP_PROTO(const char *s), -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_PROTO(char *s), -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_ARGS(s), @@ -36,7 +37,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_utilization, #ifdef CONFIG_RCU_TRACE #if defined(CONFIG_TREE_RCU) \ - || (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) \ + || (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,19,0) \ && defined(CONFIG_PREEMPT_RCU)) \ || defined(CONFIG_TREE_PREEMPT_RCU) @@ -49,13 +50,37 @@ LTTNG_TRACEPOINT_EVENT(rcu_utilization, * and "cpuofl", respectively), and a CPU being kicked for being too * long in dyntick-idle mode ("kick"). */ +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_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), @@ -65,6 +90,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_grace_period, ctf_string(gpevent, gpevent) ) ) +#endif /* * Tracepoint for grace-period-initialization events. These are @@ -73,15 +99,46 @@ 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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_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), @@ -94,6 +151,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_grace_period_init, ctf_integer(unsigned long, qsmask, qsmask) ) ) +#endif /* * Tracepoint for tasks blocking within preemptible-RCU read-side @@ -101,13 +159,37 @@ 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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_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), @@ -117,19 +199,44 @@ 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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_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), @@ -139,6 +246,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_unlock_preempted_task, ctf_integer(int, pid, pid) ) ) +#endif /* * Tracepoint for quiescent-state-reporting events. These are @@ -148,17 +256,53 @@ 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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_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), @@ -173,6 +317,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(). @@ -182,13 +327,39 @@ LTTNG_TRACEPOINT_EVENT(rcu_quiescent_state_report, * or "kick" when kicking a CPU that has been in dyntick-idle mode for * too long. */ +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,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 (LTTNG_LINUX_VERSION_CODE >= LTTNG_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), @@ -199,10 +370,11 @@ LTTNG_TRACEPOINT_EVENT(rcu_fqs, ctf_string(qsevent, qsevent) ) ) +#endif #endif /* * #if defined(CONFIG_TREE_RCU) - * || (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) + * || (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,19,0) * && defined(CONFIG_PREEMPT_RCU)) * || defined(CONFIG_TREE_PREEMPT_RCU) */ @@ -220,7 +392,25 @@ LTTNG_TRACEPOINT_EVENT(rcu_fqs, * events use the upper bits of each number, while interrupt-related * events use the lower bits. */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,16,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) \ + || LTTNG_KERNEL_RANGE(5,5,6, 5,6,0) \ + || LTTNG_KERNEL_RANGE(5,4,22, 5,5,0) \ + || LTTNG_UBUNTU_KERNEL_RANGE(5,0,21,46, 5,1,0,0) +LTTNG_TRACEPOINT_EVENT(rcu_dyntick, + + TP_PROTO(const char *polarity, long oldnesting, long newnesting, int dynticks), + + TP_ARGS(polarity, oldnesting, newnesting, dynticks), + + TP_FIELDS( + ctf_string(polarity, polarity) + ctf_integer(long, oldnesting, oldnesting) + ctf_integer(long, newnesting, newnesting) + ctf_integer(int, dynticks, dynticks) + ) +) + +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,16,0)) LTTNG_TRACEPOINT_EVENT(rcu_dyntick, TP_PROTO(const char *polarity, long oldnesting, long newnesting, atomic_t dynticks), @@ -235,7 +425,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_dyntick, ) ) -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) LTTNG_TRACEPOINT_EVENT(rcu_dyntick, TP_PROTO(const char *polarity, long long oldnesting, long long newnesting), @@ -248,7 +438,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_dyntick, ctf_integer(long long, newnesting, newnesting) ) ) -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0)) LTTNG_TRACEPOINT_EVENT(rcu_dyntick, TP_PROTO(char *polarity, long long oldnesting, long long newnesting), @@ -275,7 +465,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_dyntick, #endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0)) /* * Tracepoint for RCU preparation for idle, the goal being to get RCU * processing done so that the current CPU can shut off its scheduling @@ -300,11 +490,11 @@ LTTNG_TRACEPOINT_EVENT(rcu_dyntick, */ LTTNG_TRACEPOINT_EVENT(rcu_prep_idle, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) TP_PROTO(const char *reason), -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_PROTO(char *reason), -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_ARGS(reason), @@ -321,34 +511,68 @@ LTTNG_TRACEPOINT_EVENT(rcu_prep_idle, * number of lazy callbacks queued, and the fourth element is the * total number of callbacks queued. */ +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) +LTTNG_TRACEPOINT_EVENT(rcu_callback, + + TP_PROTO(const char *rcuname, struct rcu_head *rhp, long qlen), + + TP_ARGS(rcuname, rhp, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(void *, func, rhp->func) + ctf_integer(long, qlen, qlen) + ) +) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) LTTNG_TRACEPOINT_EVENT(rcu_callback, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) TP_PROTO(const char *rcuname, struct rcu_head *rhp, long qlen_lazy, long qlen), TP_ARGS(rcuname, rhp, qlen_lazy, qlen), -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(void *, func, rhp->func) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ) +) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT(rcu_callback, + TP_PROTO(char *rcuname, struct rcu_head *rhp, long qlen_lazy, long qlen), TP_ARGS(rcuname, rhp, qlen_lazy, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(void *, func, rhp->func) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ) +) #else +LTTNG_TRACEPOINT_EVENT(rcu_callback, + TP_PROTO(char *rcuname, struct rcu_head *rhp, long qlen), TP_ARGS(rcuname, rhp, qlen), -#endif TP_FIELDS( ctf_string(rcuname, rcuname) ctf_integer_hex(void *, rhp, rhp) ctf_integer_hex(void *, func, rhp->func) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) - ctf_integer(long, qlen_lazy, qlen_lazy) -#endif ctf_integer(long, qlen, qlen) ) ) +#endif + /* * Tracepoint for the registration of a single RCU callback of the special @@ -358,36 +582,69 @@ LTTNG_TRACEPOINT_EVENT(rcu_callback, * the fourth argument is the number of lazy callbacks queued, and the * fifth argument is the total number of callbacks queued. */ +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) LTTNG_TRACEPOINT_EVENT(rcu_kfree_callback, + TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset, + long qlen), + + TP_ARGS(rcuname, rhp, offset, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(unsigned long, offset, offset) + ctf_integer(long, qlen, qlen) + ) +) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) +LTTNG_TRACEPOINT_EVENT(rcu_kfree_callback, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset, long qlen_lazy, long qlen), TP_ARGS(rcuname, rhp, offset, qlen_lazy, qlen), -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(unsigned long, offset, offset) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ) +) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT(rcu_kfree_callback, + TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset, long qlen_lazy, long qlen), TP_ARGS(rcuname, rhp, offset, qlen_lazy, qlen), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer_hex(void *, rhp, rhp) + ctf_integer_hex(unsigned long, offset, offset) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ) +) #else +LTTNG_TRACEPOINT_EVENT(rcu_kfree_callback, + TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset, long qlen), TP_ARGS(rcuname, rhp, offset, qlen), -#endif TP_FIELDS( ctf_string(rcuname, rcuname) ctf_integer_hex(void *, rhp, rhp) ctf_integer_hex(unsigned long, offset, offset) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) - ctf_integer(long, qlen_lazy, qlen_lazy) -#endif ctf_integer(long, qlen, qlen) ) ) +#endif /* * Tracepoint for marking the beginning rcu_do_batch, performed to start @@ -396,39 +653,75 @@ LTTNG_TRACEPOINT_EVENT(rcu_kfree_callback, * the total number of callbacks queued, and the fourth argument is * the current RCU-callback batch limit. */ +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) +LTTNG_TRACEPOINT_EVENT(rcu_batch_start, + + TP_PROTO(const char *rcuname, long qlen, long blimit), + + TP_ARGS(rcuname, qlen, blimit), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(long, qlen, qlen) + ctf_integer(long, blimit, blimit) + ) +) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) LTTNG_TRACEPOINT_EVENT(rcu_batch_start, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) TP_PROTO(const char *rcuname, long qlen_lazy, long qlen, long blimit), TP_ARGS(rcuname, qlen_lazy, qlen, blimit), -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ctf_integer(long, blimit, blimit) + ) +) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,9,0)) +LTTNG_TRACEPOINT_EVENT(rcu_batch_start, + TP_PROTO(char *rcuname, long qlen_lazy, long qlen, long blimit), TP_ARGS(rcuname, qlen_lazy, qlen, blimit), -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ctf_integer(long, blimit, blimit) + ) +) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) +LTTNG_TRACEPOINT_EVENT(rcu_batch_start, + TP_PROTO(char *rcuname, long qlen_lazy, long qlen, int blimit), TP_ARGS(rcuname, qlen_lazy, qlen, blimit), + + TP_FIELDS( + ctf_string(rcuname, rcuname) + ctf_integer(long, qlen_lazy, qlen_lazy) + ctf_integer(long, qlen, qlen) + ctf_integer(int, blimit, blimit) + ) +) #else +LTTNG_TRACEPOINT_EVENT(rcu_batch_start, + TP_PROTO(char *rcuname, long qlen, int blimit), TP_ARGS(rcuname, qlen, blimit), -#endif TP_FIELDS( ctf_string(rcuname, rcuname) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) - ctf_integer(long, qlen_lazy, qlen_lazy) -#endif ctf_integer(long, qlen, qlen) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) - ctf_integer(long, blimit, blimit) -#else ctf_integer(int, blimit, blimit) -#endif ) ) +#endif /* * Tracepoint for the invocation of a single RCU callback function. @@ -437,11 +730,11 @@ LTTNG_TRACEPOINT_EVENT(rcu_batch_start, */ LTTNG_TRACEPOINT_EVENT(rcu_invoke_callback, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) TP_PROTO(const char *rcuname, struct rcu_head *rhp), -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_PROTO(char *rcuname, struct rcu_head *rhp), -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_ARGS(rcuname, rhp), @@ -461,11 +754,11 @@ LTTNG_TRACEPOINT_EVENT(rcu_invoke_callback, */ LTTNG_TRACEPOINT_EVENT(rcu_invoke_kfree_callback, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) TP_PROTO(const char *rcuname, struct rcu_head *rhp, unsigned long offset), -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_PROTO(char *rcuname, struct rcu_head *rhp, unsigned long offset), -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_ARGS(rcuname, rhp, offset), @@ -489,17 +782,17 @@ LTTNG_TRACEPOINT_EVENT(rcu_invoke_kfree_callback, */ LTTNG_TRACEPOINT_EVENT(rcu_batch_end, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,13,0)) TP_PROTO(const char *rcuname, int callbacks_invoked, char cb, char nr, char iit, char risk), TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk), -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) TP_PROTO(const char *rcuname, int callbacks_invoked, bool cb, bool nr, bool iit, bool risk), TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk), -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0)) TP_PROTO(char *rcuname, int callbacks_invoked, bool cb, bool nr, bool iit, bool risk), @@ -513,12 +806,12 @@ LTTNG_TRACEPOINT_EVENT(rcu_batch_end, TP_FIELDS( ctf_string(rcuname, rcuname) ctf_integer(int, callbacks_invoked, callbacks_invoked) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,13,0)) ctf_integer(char, cb, cb) ctf_integer(char, nr, nr) ctf_integer(char, iit, iit) ctf_integer(char, risk, risk) -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0)) ctf_integer(bool, cb, cb) ctf_integer(bool, nr, nr) ctf_integer(bool, iit, iit) @@ -527,7 +820,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_batch_end, ) ) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0)) /* * Tracepoint for rcutorture readers. The first argument is the name * of the RCU flavor from rcutorture's viewpoint and the second argument @@ -535,12 +828,12 @@ LTTNG_TRACEPOINT_EVENT(rcu_batch_end, */ LTTNG_TRACEPOINT_EVENT(rcu_torture_read, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) TP_PROTO(const char *rcutorturename, struct rcu_head *rhp, unsigned long secs, unsigned long c_old, unsigned long c), TP_ARGS(rcutorturename, rhp, secs, c_old, c), -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,9,0)) TP_PROTO(char *rcutorturename, struct rcu_head *rhp, unsigned long secs, unsigned long c_old, unsigned long c), @@ -554,7 +847,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_torture_read, TP_FIELDS( ctf_string(rcutorturename, rcutorturename) ctf_integer_hex(struct rcu_head *, rhp, rhp) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,9,0)) ctf_integer(unsigned long, secs, secs) ctf_integer(unsigned long, c_old, c_old) ctf_integer(unsigned long, c, c) @@ -563,7 +856,7 @@ LTTNG_TRACEPOINT_EVENT(rcu_torture_read, ) #endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,6,0)) /* * Tracepoint for _rcu_barrier() execution. The string "s" describes * the _rcu_barrier phase: @@ -583,11 +876,11 @@ LTTNG_TRACEPOINT_EVENT(rcu_torture_read, */ LTTNG_TRACEPOINT_EVENT(rcu_barrier, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) TP_PROTO(const char *rcuname, const char *s, int cpu, int cnt, unsigned long done), -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_PROTO(char *rcuname, char *s, int cpu, int cnt, unsigned long done), -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) */ +#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,12,0)) */ TP_ARGS(rcuname, s, cpu, cnt, done), @@ -603,6 +896,18 @@ LTTNG_TRACEPOINT_EVENT(rcu_barrier, #else /* #ifdef CONFIG_RCU_TRACE */ +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,19,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,80,0,0, 4,19,0,0,0,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) @@ -612,17 +917,19 @@ LTTNG_TRACEPOINT_EVENT(rcu_barrier, grplo, grphi, gp_tasks) do { } \ while (0) #define trace_rcu_fqs(rcuname, gpnum, cpu, qsevent) do { } while (0) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,16,0)) +#endif + +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_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)) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0)) #define trace_rcu_dyntick(polarity, oldnesting, newnesting) do { } while (0) #else #define trace_rcu_dyntick(polarity) do { } while (0) #endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0)) #define trace_rcu_prep_idle(reason) do { } while (0) #endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,4,0)) #define trace_rcu_callback(rcuname, rhp, qlen_lazy, qlen) do { } while (0) #define trace_rcu_kfree_callback(rcuname, rhp, offset, qlen_lazy, qlen) \ do { } while (0) @@ -635,19 +942,19 @@ LTTNG_TRACEPOINT_EVENT(rcu_barrier, #endif #define trace_rcu_invoke_callback(rcuname, rhp) do { } while (0) #define trace_rcu_invoke_kfree_callback(rcuname, rhp, offset) do { } while (0) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0)) #define trace_rcu_batch_end(rcuname, callbacks_invoked, cb, nr, iit, risk) \ do { } while (0) #else #define trace_rcu_batch_end(rcuname, callbacks_invoked) do { } while (0) #endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,9,0)) #define trace_rcu_torture_read(rcutorturename, rhp, secs, c_old, c) \ do { } while (0) -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0)) #define trace_rcu_torture_read(rcutorturename, rhp) do { } while (0) #endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,6,0)) #define trace_rcu_barrier(name, s, cpu, cnt, done) do { } while (0) #endif #endif /* #else #ifdef CONFIG_RCU_TRACE */