rcu.h 3.0 KB
Newer Older
1 2 3 4 5 6 7 8 9
#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>

/*
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
 * 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
36 37 38 39
 * 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.
40 41 42
 */
TRACE_EVENT(rcu_batch_start,

43
	TP_PROTO(char *rcuname, long qlen, int blimit),
44

45
	TP_ARGS(rcuname, qlen, blimit),
46 47

	TP_STRUCT__entry(
48
		__field(char *, rcuname)
49 50
		__field(long, qlen)
		__field(int, blimit)
51 52 53
	),

	TP_fast_assign(
54
		__entry->rcuname = rcuname;
55 56
		__entry->qlen = qlen;
		__entry->blimit = blimit;
57 58
	),

59 60
	TP_printk("%s CBs=%ld bl=%d",
		  __entry->rcuname, __entry->qlen, __entry->blimit)
61 62 63
);

/*
64 65
 * Tracepoint for the invocation of a single RCU callback function.
 * The argument is a pointer to the RCU callback itself.
66 67 68 69 70 71 72 73
 */
TRACE_EVENT(rcu_invoke_callback,

	TP_PROTO(struct rcu_head *rhp),

	TP_ARGS(rhp),

	TP_STRUCT__entry(
74 75
		__field(void *,	rhp)
		__field(void *,	func)
76 77 78
	),

	TP_fast_assign(
79 80
		__entry->rhp = rhp;
		__entry->func = rhp->func;
81 82 83 84 85 86
	),

	TP_printk("rhp=%p func=%pf", __entry->rhp, __entry->func)
);

/*
87 88 89 90
 * 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.
91 92 93 94 95 96 97 98
 */
TRACE_EVENT(rcu_invoke_kfree_callback,

	TP_PROTO(struct rcu_head *rhp, unsigned long offset),

	TP_ARGS(rhp, offset),

	TP_STRUCT__entry(
99 100
		__field(void *,	rhp)
		__field(unsigned long, offset)
101 102 103
	),

	TP_fast_assign(
104
		__entry->rhp = rhp;
105 106 107 108 109 110 111
		__entry->offset	= offset;
	),

	TP_printk("rhp=%p func=%ld", __entry->rhp, __entry->offset)
);

/*
112
 * Tracepoint for exiting rcu_do_batch after RCU callbacks have been
113 114
 * invoked.  The first argument is the name of the RCU flavor and
 * the second argument is number of callbacks actually invoked.
115 116 117
 */
TRACE_EVENT(rcu_batch_end,

118
	TP_PROTO(char *rcuname, int callbacks_invoked),
119

120
	TP_ARGS(rcuname, callbacks_invoked),
121 122

	TP_STRUCT__entry(
123
		__field(char *, rcuname)
124
		__field(int, callbacks_invoked)
125 126 127
	),

	TP_fast_assign(
128
		__entry->rcuname = rcuname;
129
		__entry->callbacks_invoked = callbacks_invoked;
130 131
	),

132 133
	TP_printk("%s CBs-invoked=%d",
		  __entry->rcuname, __entry->callbacks_invoked)
134 135 136 137 138 139
);

#endif /* _TRACE_RCU_H */

/* This part must be outside protection */
#include <trace/define_trace.h>