diff options
author | Paul E. McKenney <paul.mckenney@linaro.org> | 2013-02-08 18:55:02 -0500 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2013-03-26 11:04:46 -0400 |
commit | 09c7b890622d72b5e004cc249bbe610e8b928ddf (patch) | |
tree | 4326a3d6baaebaeb3417f0593bb017c2477b973b /kernel/rcutree_plugin.h | |
parent | 21e7a6087480451804124cee27c0a7d0a7de1564 (diff) |
rcu: Add event tracing for no-CBs CPUs' grace periods
Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree_plugin.h')
-rw-r--r-- | kernel/rcutree_plugin.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h index 7225a5a14cef..e32236e83dda 100644 --- a/kernel/rcutree_plugin.h +++ b/kernel/rcutree_plugin.h | |||
@@ -2201,6 +2201,9 @@ static int rcu_nocb_gp_cleanup(struct rcu_state *rsp, struct rcu_node *rnp) | |||
2201 | wake_up_all(&rnp->nocb_gp_wq[c & 0x1]); | 2201 | wake_up_all(&rnp->nocb_gp_wq[c & 0x1]); |
2202 | rnp->n_nocb_gp_requests[c & 0x1] = 0; | 2202 | rnp->n_nocb_gp_requests[c & 0x1] = 0; |
2203 | needmore = rnp->n_nocb_gp_requests[(c + 1) & 0x1]; | 2203 | needmore = rnp->n_nocb_gp_requests[(c + 1) & 0x1]; |
2204 | trace_rcu_nocb_grace_period(rsp->name, rnp->gpnum, rnp->completed, | ||
2205 | c, rnp->level, rnp->grplo, rnp->grphi, | ||
2206 | needmore ? "CleanupMore" : "Cleanup"); | ||
2204 | return needmore; | 2207 | return needmore; |
2205 | } | 2208 | } |
2206 | 2209 | ||
@@ -2347,6 +2350,9 @@ static void rcu_nocb_wait_gp(struct rcu_data *rdp) | |||
2347 | 2350 | ||
2348 | /* Count our request for a grace period. */ | 2351 | /* Count our request for a grace period. */ |
2349 | rnp->n_nocb_gp_requests[c & 0x1]++; | 2352 | rnp->n_nocb_gp_requests[c & 0x1]++; |
2353 | trace_rcu_nocb_grace_period(rdp->rsp->name, rnp->gpnum, rnp->completed, | ||
2354 | c, rnp->level, rnp->grplo, rnp->grphi, | ||
2355 | "Startleaf"); | ||
2350 | 2356 | ||
2351 | if (rnp->gpnum != rnp->completed) { | 2357 | if (rnp->gpnum != rnp->completed) { |
2352 | 2358 | ||
@@ -2355,6 +2361,10 @@ static void rcu_nocb_wait_gp(struct rcu_data *rdp) | |||
2355 | * is in progress, so we are done. When this grace | 2361 | * is in progress, so we are done. When this grace |
2356 | * period ends, our request will be acted upon. | 2362 | * period ends, our request will be acted upon. |
2357 | */ | 2363 | */ |
2364 | trace_rcu_nocb_grace_period(rdp->rsp->name, | ||
2365 | rnp->gpnum, rnp->completed, c, | ||
2366 | rnp->level, rnp->grplo, rnp->grphi, | ||
2367 | "Startedleaf"); | ||
2358 | raw_spin_unlock_irqrestore(&rnp->lock, flags); | 2368 | raw_spin_unlock_irqrestore(&rnp->lock, flags); |
2359 | 2369 | ||
2360 | } else { | 2370 | } else { |
@@ -2366,6 +2376,11 @@ static void rcu_nocb_wait_gp(struct rcu_data *rdp) | |||
2366 | if (rnp != rnp_root) | 2376 | if (rnp != rnp_root) |
2367 | raw_spin_lock(&rnp_root->lock); /* irqs disabled. */ | 2377 | raw_spin_lock(&rnp_root->lock); /* irqs disabled. */ |
2368 | if (rnp_root->gpnum != rnp_root->completed) { | 2378 | if (rnp_root->gpnum != rnp_root->completed) { |
2379 | trace_rcu_nocb_grace_period(rdp->rsp->name, | ||
2380 | rnp->gpnum, rnp->completed, | ||
2381 | c, rnp->level, | ||
2382 | rnp->grplo, rnp->grphi, | ||
2383 | "Startedleafroot"); | ||
2369 | raw_spin_unlock(&rnp_root->lock); /* irqs disabled. */ | 2384 | raw_spin_unlock(&rnp_root->lock); /* irqs disabled. */ |
2370 | } else { | 2385 | } else { |
2371 | 2386 | ||
@@ -2381,6 +2396,11 @@ static void rcu_nocb_wait_gp(struct rcu_data *rdp) | |||
2381 | c = rnp_root->completed + 1; | 2396 | c = rnp_root->completed + 1; |
2382 | rnp->n_nocb_gp_requests[c & 0x1]++; | 2397 | rnp->n_nocb_gp_requests[c & 0x1]++; |
2383 | rnp_root->n_nocb_gp_requests[c & 0x1]++; | 2398 | rnp_root->n_nocb_gp_requests[c & 0x1]++; |
2399 | trace_rcu_nocb_grace_period(rdp->rsp->name, | ||
2400 | rnp->gpnum, rnp->completed, | ||
2401 | c, rnp->level, | ||
2402 | rnp->grplo, rnp->grphi, | ||
2403 | "Startedroot"); | ||
2384 | local_save_flags(flags1); | 2404 | local_save_flags(flags1); |
2385 | rcu_start_gp(rdp->rsp, flags1); /* Rlses ->lock. */ | 2405 | rcu_start_gp(rdp->rsp, flags1); /* Rlses ->lock. */ |
2386 | } | 2406 | } |
@@ -2396,6 +2416,9 @@ static void rcu_nocb_wait_gp(struct rcu_data *rdp) | |||
2396 | * Wait for the grace period. Do so interruptibly to avoid messing | 2416 | * Wait for the grace period. Do so interruptibly to avoid messing |
2397 | * up the load average. | 2417 | * up the load average. |
2398 | */ | 2418 | */ |
2419 | trace_rcu_nocb_grace_period(rdp->rsp->name, rnp->gpnum, rnp->completed, | ||
2420 | c, rnp->level, rnp->grplo, rnp->grphi, | ||
2421 | "StartWait"); | ||
2399 | for (;;) { | 2422 | for (;;) { |
2400 | wait_event_interruptible( | 2423 | wait_event_interruptible( |
2401 | rnp->nocb_gp_wq[c & 0x1], | 2424 | rnp->nocb_gp_wq[c & 0x1], |
@@ -2403,7 +2426,14 @@ static void rcu_nocb_wait_gp(struct rcu_data *rdp) | |||
2403 | if (likely(d)) | 2426 | if (likely(d)) |
2404 | break; | 2427 | break; |
2405 | flush_signals(current); | 2428 | flush_signals(current); |
2429 | trace_rcu_nocb_grace_period(rdp->rsp->name, | ||
2430 | rnp->gpnum, rnp->completed, c, | ||
2431 | rnp->level, rnp->grplo, rnp->grphi, | ||
2432 | "ResumeWait"); | ||
2406 | } | 2433 | } |
2434 | trace_rcu_nocb_grace_period(rdp->rsp->name, rnp->gpnum, rnp->completed, | ||
2435 | c, rnp->level, rnp->grplo, rnp->grphi, | ||
2436 | "EndWait"); | ||
2407 | smp_mb(); /* Ensure that CB invocation happens after GP end. */ | 2437 | smp_mb(); /* Ensure that CB invocation happens after GP end. */ |
2408 | } | 2438 | } |
2409 | 2439 | ||