72fe701b70
Add a string to the rcu_batch_start() and rcu_batch_end() trace messages that indicates the RCU type ("rcu_sched", "rcu_bh", or "rcu_preempt"). The trace messages for the actual invocations themselves are not marked, as it should be clear from the rcu_batch_start() and rcu_batch_end() events before and after. Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
140 lines
3.0 KiB
C
140 lines
3.0 KiB
C
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM rcu
|
|
|
|
#if !defined(_TRACE_RCU_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_RCU_H
|
|
|
|
#include <linux/tracepoint.h>
|
|
|
|
/*
|
|
* Tracepoint for start/end markers used for utilization calculations.
|
|
* By convention, the string is of the following forms:
|
|
*
|
|
* "Start <activity>" -- Mark the start of the specified activity,
|
|
* such as "context switch". Nesting is permitted.
|
|
* "End <activity>" -- Mark the end of the specified activity.
|
|
*/
|
|
TRACE_EVENT(rcu_utilization,
|
|
|
|
TP_PROTO(char *s),
|
|
|
|
TP_ARGS(s),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(char *, s)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->s = s;
|
|
),
|
|
|
|
TP_printk("%s", __entry->s)
|
|
);
|
|
|
|
/*
|
|
* Tracepoint for marking the beginning rcu_do_batch, performed to start
|
|
* RCU callback invocation. The first argument is the RCU flavor,
|
|
* the second is the total number of callbacks (including those that
|
|
* are not yet ready to be invoked), and the third argument is the
|
|
* current RCU-callback batch limit.
|
|
*/
|
|
TRACE_EVENT(rcu_batch_start,
|
|
|
|
TP_PROTO(char *rcuname, long qlen, int blimit),
|
|
|
|
TP_ARGS(rcuname, qlen, blimit),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(char *, rcuname)
|
|
__field(long, qlen)
|
|
__field(int, blimit)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->rcuname = rcuname;
|
|
__entry->qlen = qlen;
|
|
__entry->blimit = blimit;
|
|
),
|
|
|
|
TP_printk("%s CBs=%ld bl=%d",
|
|
__entry->rcuname, __entry->qlen, __entry->blimit)
|
|
);
|
|
|
|
/*
|
|
* Tracepoint for the invocation of a single RCU callback function.
|
|
* The argument is a pointer to the RCU callback itself.
|
|
*/
|
|
TRACE_EVENT(rcu_invoke_callback,
|
|
|
|
TP_PROTO(struct rcu_head *rhp),
|
|
|
|
TP_ARGS(rhp),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(void *, rhp)
|
|
__field(void *, func)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->rhp = rhp;
|
|
__entry->func = rhp->func;
|
|
),
|
|
|
|
TP_printk("rhp=%p func=%pf", __entry->rhp, __entry->func)
|
|
);
|
|
|
|
/*
|
|
* Tracepoint for the invocation of a single RCU callback of the special
|
|
* kfree() form. The first argument is a pointer to the RCU callback
|
|
* and the second argument is the offset of the callback within the
|
|
* enclosing RCU-protected data structure.
|
|
*/
|
|
TRACE_EVENT(rcu_invoke_kfree_callback,
|
|
|
|
TP_PROTO(struct rcu_head *rhp, unsigned long offset),
|
|
|
|
TP_ARGS(rhp, offset),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(void *, rhp)
|
|
__field(unsigned long, offset)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->rhp = rhp;
|
|
__entry->offset = offset;
|
|
),
|
|
|
|
TP_printk("rhp=%p func=%ld", __entry->rhp, __entry->offset)
|
|
);
|
|
|
|
/*
|
|
* Tracepoint for exiting rcu_do_batch after RCU callbacks have been
|
|
* invoked. The first argument is the name of the RCU flavor and
|
|
* the second argument is number of callbacks actually invoked.
|
|
*/
|
|
TRACE_EVENT(rcu_batch_end,
|
|
|
|
TP_PROTO(char *rcuname, int callbacks_invoked),
|
|
|
|
TP_ARGS(rcuname, callbacks_invoked),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(char *, rcuname)
|
|
__field(int, callbacks_invoked)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->rcuname = rcuname;
|
|
__entry->callbacks_invoked = callbacks_invoked;
|
|
),
|
|
|
|
TP_printk("%s CBs-invoked=%d",
|
|
__entry->rcuname, __entry->callbacks_invoked)
|
|
);
|
|
|
|
#endif /* _TRACE_RCU_H */
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|