#undef TRACE_SYSTEM #define TRACE_SYSTEM rcu #if !defined(_TRACE_RCU_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_RCU_H #include /* * Tracepoint for start/end markers used for utilization calculations. * By convention, the string is of the following forms: * * "Start " -- Mark the start of the specified activity, * such as "context switch". Nesting is permitted. * "End " -- 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