diff options
| author | Ingo Molnar <mingo@kernel.org> | 2013-10-18 06:46:14 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2013-10-18 06:46:14 -0400 |
| commit | 0e95c69bde1a5bf22acd53b356fe10d7bec6e2be (patch) | |
| tree | 28c27057fc02a87b5e058b8cb17b2186f86fc95c /include/trace | |
| parent | 04919afb85c8f007b7326c4da5eb61c52e91b9c7 (diff) | |
| parent | 4102adab9189c8ea2f0cdd2f88345fd25d2790f1 (diff) | |
Merge branch 'rcu/next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into core/rcu
Pull RCU updates from Paul E. McKenney.
Major changes:
" 1. Update RCU documentation. These were posted to LKML at
http://article.gmane.org/gmane.linux.kernel/1566994.
2. Miscellaneous fixes. These were posted to LKML at
http://article.gmane.org/gmane.linux.kernel/1567027.
3. Grace-period-related changes, primarily to aid in debugging,
inspired by a -rt debugging session. These were posted to
LKML at http://article.gmane.org/gmane.linux.kernel/1567076.
4. Idle entry/exit changes, primarily to address issues located
by Tibor Billes. These were posted to LKML at
http://article.gmane.org/gmane.linux.kernel/1567096.
5. Code reorganization moving RCU's source files from kernel
to kernel/rcu. This was posted to LKML at
http://article.gmane.org/gmane.linux.kernel/1577344."
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include/trace')
| -rw-r--r-- | include/trace/events/rcu.h | 80 |
1 files changed, 66 insertions, 14 deletions
diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h index ee2376cfaab3..aca382266411 100644 --- a/include/trace/events/rcu.h +++ b/include/trace/events/rcu.h | |||
| @@ -39,15 +39,26 @@ TRACE_EVENT(rcu_utilization, | |||
| 39 | #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) | 39 | #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) |
| 40 | 40 | ||
| 41 | /* | 41 | /* |
| 42 | * Tracepoint for grace-period events: starting and ending a grace | 42 | * Tracepoint for grace-period events. Takes a string identifying the |
| 43 | * period ("start" and "end", respectively), a CPU noting the start | 43 | * RCU flavor, the grace-period number, and a string identifying the |
| 44 | * of a new grace period or the end of an old grace period ("cpustart" | 44 | * grace-period-related event as follows: |
| 45 | * and "cpuend", respectively), a CPU passing through a quiescent | 45 | * |
| 46 | * state ("cpuqs"), a CPU coming online or going offline ("cpuonl" | 46 | * "AccReadyCB": CPU acclerates new callbacks to RCU_NEXT_READY_TAIL. |
| 47 | * and "cpuofl", respectively), a CPU being kicked for being too | 47 | * "AccWaitCB": CPU accelerates new callbacks to RCU_WAIT_TAIL. |
| 48 | * long in dyntick-idle mode ("kick"), a CPU accelerating its new | 48 | * "newreq": Request a new grace period. |
| 49 | * callbacks to RCU_NEXT_READY_TAIL ("AccReadyCB"), and a CPU | 49 | * "start": Start a grace period. |
| 50 | * accelerating its new callbacks to RCU_WAIT_TAIL ("AccWaitCB"). | 50 | * "cpustart": CPU first notices a grace-period start. |
| 51 | * "cpuqs": CPU passes through a quiescent state. | ||
| 52 | * "cpuonl": CPU comes online. | ||
| 53 | * "cpuofl": CPU goes offline. | ||
| 54 | * "reqwait": GP kthread sleeps waiting for grace-period request. | ||
| 55 | * "reqwaitsig": GP kthread awakened by signal from reqwait state. | ||
| 56 | * "fqswait": GP kthread waiting until time to force quiescent states. | ||
| 57 | * "fqsstart": GP kthread starts forcing quiescent states. | ||
| 58 | * "fqsend": GP kthread done forcing quiescent states. | ||
| 59 | * "fqswaitsig": GP kthread awakened by signal from fqswait state. | ||
| 60 | * "end": End a grace period. | ||
| 61 | * "cpuend": CPU first notices a grace-period end. | ||
| 51 | */ | 62 | */ |
| 52 | TRACE_EVENT(rcu_grace_period, | 63 | TRACE_EVENT(rcu_grace_period, |
| 53 | 64 | ||
| @@ -161,6 +172,46 @@ TRACE_EVENT(rcu_grace_period_init, | |||
| 161 | ); | 172 | ); |
| 162 | 173 | ||
| 163 | /* | 174 | /* |
| 175 | * Tracepoint for RCU no-CBs CPU callback handoffs. This event is intended | ||
| 176 | * to assist debugging of these handoffs. | ||
| 177 | * | ||
| 178 | * The first argument is the name of the RCU flavor, and the second is | ||
| 179 | * the number of the offloaded CPU are extracted. The third and final | ||
| 180 | * argument is a string as follows: | ||
| 181 | * | ||
| 182 | * "WakeEmpty": Wake rcuo kthread, first CB to empty list. | ||
| 183 | * "WakeOvf": Wake rcuo kthread, CB list is huge. | ||
| 184 | * "WakeNot": Don't wake rcuo kthread. | ||
| 185 | * "WakeNotPoll": Don't wake rcuo kthread because it is polling. | ||
| 186 | * "Poll": Start of new polling cycle for rcu_nocb_poll. | ||
| 187 | * "Sleep": Sleep waiting for CBs for !rcu_nocb_poll. | ||
| 188 | * "WokeEmpty": rcuo kthread woke to find empty list. | ||
| 189 | * "WokeNonEmpty": rcuo kthread woke to find non-empty list. | ||
| 190 | * "WaitQueue": Enqueue partially done, timed wait for it to complete. | ||
| 191 | * "WokeQueue": Partial enqueue now complete. | ||
| 192 | */ | ||
| 193 | TRACE_EVENT(rcu_nocb_wake, | ||
| 194 | |||
| 195 | TP_PROTO(const char *rcuname, int cpu, const char *reason), | ||
| 196 | |||
| 197 | TP_ARGS(rcuname, cpu, reason), | ||
| 198 | |||
| 199 | TP_STRUCT__entry( | ||
| 200 | __field(const char *, rcuname) | ||
| 201 | __field(int, cpu) | ||
| 202 | __field(const char *, reason) | ||
| 203 | ), | ||
| 204 | |||
| 205 | TP_fast_assign( | ||
| 206 | __entry->rcuname = rcuname; | ||
| 207 | __entry->cpu = cpu; | ||
| 208 | __entry->reason = reason; | ||
| 209 | ), | ||
| 210 | |||
| 211 | TP_printk("%s %d %s", __entry->rcuname, __entry->cpu, __entry->reason) | ||
| 212 | ); | ||
| 213 | |||
| 214 | /* | ||
| 164 | * Tracepoint for tasks blocking within preemptible-RCU read-side | 215 | * Tracepoint for tasks blocking within preemptible-RCU read-side |
| 165 | * critical sections. Track the type of RCU (which one day might | 216 | * critical sections. Track the type of RCU (which one day might |
| 166 | * include SRCU), the grace-period number that the task is blocking | 217 | * include SRCU), the grace-period number that the task is blocking |
| @@ -540,17 +591,17 @@ TRACE_EVENT(rcu_invoke_kfree_callback, | |||
| 540 | TRACE_EVENT(rcu_batch_end, | 591 | TRACE_EVENT(rcu_batch_end, |
| 541 | 592 | ||
| 542 | TP_PROTO(const char *rcuname, int callbacks_invoked, | 593 | TP_PROTO(const char *rcuname, int callbacks_invoked, |
| 543 | bool cb, bool nr, bool iit, bool risk), | 594 | char cb, char nr, char iit, char risk), |
| 544 | 595 | ||
| 545 | TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk), | 596 | TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk), |
| 546 | 597 | ||
| 547 | TP_STRUCT__entry( | 598 | TP_STRUCT__entry( |
| 548 | __field(const char *, rcuname) | 599 | __field(const char *, rcuname) |
| 549 | __field(int, callbacks_invoked) | 600 | __field(int, callbacks_invoked) |
| 550 | __field(bool, cb) | 601 | __field(char, cb) |
| 551 | __field(bool, nr) | 602 | __field(char, nr) |
| 552 | __field(bool, iit) | 603 | __field(char, iit) |
| 553 | __field(bool, risk) | 604 | __field(char, risk) |
| 554 | ), | 605 | ), |
| 555 | 606 | ||
| 556 | TP_fast_assign( | 607 | TP_fast_assign( |
| @@ -656,6 +707,7 @@ TRACE_EVENT(rcu_barrier, | |||
| 656 | #define trace_rcu_future_grace_period(rcuname, gpnum, completed, c, \ | 707 | #define trace_rcu_future_grace_period(rcuname, gpnum, completed, c, \ |
| 657 | level, grplo, grphi, event) \ | 708 | level, grplo, grphi, event) \ |
| 658 | do { } while (0) | 709 | do { } while (0) |
| 710 | #define trace_rcu_nocb_wake(rcuname, cpu, reason) do { } while (0) | ||
| 659 | #define trace_rcu_preempt_task(rcuname, pid, gpnum) do { } while (0) | 711 | #define trace_rcu_preempt_task(rcuname, pid, gpnum) do { } while (0) |
| 660 | #define trace_rcu_unlock_preempted_task(rcuname, gpnum, pid) do { } while (0) | 712 | #define trace_rcu_unlock_preempted_task(rcuname, gpnum, pid) do { } while (0) |
| 661 | #define trace_rcu_quiescent_state_report(rcuname, gpnum, mask, qsmask, level, \ | 713 | #define trace_rcu_quiescent_state_report(rcuname, gpnum, mask, qsmask, level, \ |
