+1
-1
kernel/rcu/tree.h
+1
-1
kernel/rcu/tree.h
···
358
358
struct rcu_head **nocb_gp_tail;
359
359
long nocb_gp_count;
360
360
long nocb_gp_count_lazy;
361
-
bool nocb_leader_wake; /* Is the nocb leader thread awake? */
361
+
bool nocb_leader_sleep; /* Is the nocb leader thread asleep? */
362
362
struct rcu_data *nocb_next_follower;
363
363
/* Next follower in wakeup chain. */
364
364
+11
-11
kernel/rcu/tree_plugin.h
+11
-11
kernel/rcu/tree_plugin.h
···
2074
2074
2075
2075
if (!ACCESS_ONCE(rdp_leader->nocb_kthread))
2076
2076
return;
2077
-
if (!ACCESS_ONCE(rdp_leader->nocb_leader_wake) || force) {
2077
+
if (ACCESS_ONCE(rdp_leader->nocb_leader_sleep) || force) {
2078
2078
/* Prior xchg orders against prior callback enqueue. */
2079
-
ACCESS_ONCE(rdp_leader->nocb_leader_wake) = true;
2079
+
ACCESS_ONCE(rdp_leader->nocb_leader_sleep) = false;
2080
2080
wake_up(&rdp_leader->nocb_wq);
2081
2081
}
2082
2082
}
···
2253
2253
if (!rcu_nocb_poll) {
2254
2254
trace_rcu_nocb_wake(my_rdp->rsp->name, my_rdp->cpu, "Sleep");
2255
2255
wait_event_interruptible(my_rdp->nocb_wq,
2256
-
ACCESS_ONCE(my_rdp->nocb_leader_wake));
2256
+
!ACCESS_ONCE(my_rdp->nocb_leader_sleep));
2257
2257
/* Memory barrier handled by smp_mb() calls below and repoll. */
2258
2258
} else if (firsttime) {
2259
2259
firsttime = false; /* Don't drown trace log with "Poll"! */
···
2292
2292
schedule_timeout_interruptible(1);
2293
2293
2294
2294
/* Rescan in case we were a victim of memory ordering. */
2295
-
my_rdp->nocb_leader_wake = false;
2296
-
smp_mb(); /* Ensure _wake false before scan. */
2295
+
my_rdp->nocb_leader_sleep = true;
2296
+
smp_mb(); /* Ensure _sleep true before scan. */
2297
2297
for (rdp = my_rdp; rdp; rdp = rdp->nocb_next_follower)
2298
2298
if (ACCESS_ONCE(rdp->nocb_head)) {
2299
2299
/* Found CB, so short-circuit next wait. */
2300
-
my_rdp->nocb_leader_wake = true;
2300
+
my_rdp->nocb_leader_sleep = false;
2301
2301
break;
2302
2302
}
2303
2303
goto wait_again;
···
2307
2307
rcu_nocb_wait_gp(my_rdp);
2308
2308
2309
2309
/*
2310
-
* We left ->nocb_leader_wake set to reduce cache thrashing.
2311
-
* We clear it now, but recheck for new callbacks while
2310
+
* We left ->nocb_leader_sleep unset to reduce cache thrashing.
2311
+
* We set it now, but recheck for new callbacks while
2312
2312
* traversing our follower list.
2313
2313
*/
2314
-
my_rdp->nocb_leader_wake = false;
2315
-
smp_mb(); /* Ensure _wake false before scan of ->nocb_head. */
2314
+
my_rdp->nocb_leader_sleep = true;
2315
+
smp_mb(); /* Ensure _sleep true before scan of ->nocb_head. */
2316
2316
2317
2317
/* Each pass through the following loop wakes a follower, if needed. */
2318
2318
for (rdp = my_rdp; rdp; rdp = rdp->nocb_next_follower) {
2319
2319
if (ACCESS_ONCE(rdp->nocb_head))
2320
-
my_rdp->nocb_leader_wake = true; /* No need to wait. */
2320
+
my_rdp->nocb_leader_sleep = false;/* No need to sleep.*/
2321
2321
if (!rdp->nocb_gp_head)
2322
2322
continue; /* No CBs, so no need to wake follower. */
2323
2323