|
@@ -1480,6 +1480,9 @@ static int __noreturn rcu_gp_kthread(void *arg)
|
|
|
|
|
|
/* Handle grace-period start. */
|
|
|
for (;;) {
|
|
|
+ trace_rcu_grace_period(rsp->name,
|
|
|
+ ACCESS_ONCE(rsp->gpnum),
|
|
|
+ TPS("reqwait"));
|
|
|
wait_event_interruptible(rsp->gp_wq,
|
|
|
ACCESS_ONCE(rsp->gp_flags) &
|
|
|
RCU_GP_FLAG_INIT);
|
|
@@ -1487,6 +1490,9 @@ static int __noreturn rcu_gp_kthread(void *arg)
|
|
|
break;
|
|
|
cond_resched();
|
|
|
flush_signals(current);
|
|
|
+ trace_rcu_grace_period(rsp->name,
|
|
|
+ ACCESS_ONCE(rsp->gpnum),
|
|
|
+ TPS("reqwaitsig"));
|
|
|
}
|
|
|
|
|
|
/* Handle quiescent-state forcing. */
|
|
@@ -1500,6 +1506,9 @@ static int __noreturn rcu_gp_kthread(void *arg)
|
|
|
for (;;) {
|
|
|
if (!ret)
|
|
|
rsp->jiffies_force_qs = jiffies + j;
|
|
|
+ trace_rcu_grace_period(rsp->name,
|
|
|
+ ACCESS_ONCE(rsp->gpnum),
|
|
|
+ TPS("fqswait"));
|
|
|
ret = wait_event_interruptible_timeout(rsp->gp_wq,
|
|
|
((gf = ACCESS_ONCE(rsp->gp_flags)) &
|
|
|
RCU_GP_FLAG_FQS) ||
|
|
@@ -1513,12 +1522,21 @@ static int __noreturn rcu_gp_kthread(void *arg)
|
|
|
/* If time for quiescent-state forcing, do it. */
|
|
|
if (ULONG_CMP_GE(jiffies, rsp->jiffies_force_qs) ||
|
|
|
(gf & RCU_GP_FLAG_FQS)) {
|
|
|
+ trace_rcu_grace_period(rsp->name,
|
|
|
+ ACCESS_ONCE(rsp->gpnum),
|
|
|
+ TPS("fqsstart"));
|
|
|
fqs_state = rcu_gp_fqs(rsp, fqs_state);
|
|
|
+ trace_rcu_grace_period(rsp->name,
|
|
|
+ ACCESS_ONCE(rsp->gpnum),
|
|
|
+ TPS("fqsend"));
|
|
|
cond_resched();
|
|
|
} else {
|
|
|
/* Deal with stray signal. */
|
|
|
cond_resched();
|
|
|
flush_signals(current);
|
|
|
+ trace_rcu_grace_period(rsp->name,
|
|
|
+ ACCESS_ONCE(rsp->gpnum),
|
|
|
+ TPS("fqswaitsig"));
|
|
|
}
|
|
|
j = jiffies_till_next_fqs;
|
|
|
if (j > HZ) {
|