diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2014-07-11 14:30:24 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2014-09-16 13:08:02 -0400 |
commit | 35ce7f29a44a888c45c0a9f202f69e10613c5306 (patch) | |
tree | 71d72916c0582574a4317aaabd4f24291547326b /kernel/rcu/tree.c | |
parent | 9386c0b75dda05f535a10ea1abf1817fe292c81c (diff) |
rcu: Create rcuo kthreads only for onlined CPUs
RCU currently uses for_each_possible_cpu() to spawn rcuo kthreads,
which can result in more rcuo kthreads than one would expect, for
example, derRichard reported 64 CPUs worth of rcuo kthreads on an
8-CPU image. This commit therefore creates rcuo kthreads only for
those CPUs that actually come online.
This was reported by derRichard on the OFTC IRC network.
Reported-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Tested-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Diffstat (limited to 'kernel/rcu/tree.c')
-rw-r--r-- | kernel/rcu/tree.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 9be47f43903b..b49c8433f834 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c | |||
@@ -3442,6 +3442,7 @@ static int rcu_cpu_notify(struct notifier_block *self, | |||
3442 | case CPU_UP_PREPARE_FROZEN: | 3442 | case CPU_UP_PREPARE_FROZEN: |
3443 | rcu_prepare_cpu(cpu); | 3443 | rcu_prepare_cpu(cpu); |
3444 | rcu_prepare_kthreads(cpu); | 3444 | rcu_prepare_kthreads(cpu); |
3445 | rcu_spawn_all_nocb_kthreads(cpu); | ||
3445 | break; | 3446 | break; |
3446 | case CPU_ONLINE: | 3447 | case CPU_ONLINE: |
3447 | case CPU_DOWN_FAILED: | 3448 | case CPU_DOWN_FAILED: |
@@ -3506,8 +3507,8 @@ static int __init rcu_spawn_gp_kthread(void) | |||
3506 | raw_spin_lock_irqsave(&rnp->lock, flags); | 3507 | raw_spin_lock_irqsave(&rnp->lock, flags); |
3507 | rsp->gp_kthread = t; | 3508 | rsp->gp_kthread = t; |
3508 | raw_spin_unlock_irqrestore(&rnp->lock, flags); | 3509 | raw_spin_unlock_irqrestore(&rnp->lock, flags); |
3509 | rcu_spawn_nocb_kthreads(rsp); | ||
3510 | } | 3510 | } |
3511 | rcu_spawn_nocb_kthreads(); | ||
3511 | rcu_spawn_boost_kthreads(); | 3512 | rcu_spawn_boost_kthreads(); |
3512 | return 0; | 3513 | return 0; |
3513 | } | 3514 | } |