diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2013-11-17 22:27:16 -0500 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2014-02-17 19:03:09 -0500 |
commit | ffa83fb565fbc397cbafb4b71fd1cce276d4c3b6 (patch) | |
tree | c849b1ea3517d6853b7b4cd386a682187e314f09 /kernel | |
parent | 2f33b512a5460578f6cf11d7b7867bed53157c7c (diff) |
rcu: Optimize rcu_needs_cpu() for RCU_NOCB_CPU_ALL
If CONFIG_RCU_NOCB_CPU_ALL=y, then rcu_needs_cpu() will always
return false, however, the current version nevertheless checks
for RCU callbacks. This commit therefore creates a static inline
implementation of rcu_needs_cpu() that unconditionally returns false
when CONFIG_RCU_NOCB_CPU_ALL=y.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/rcu/tree.c | 2 | ||||
-rw-r--r-- | kernel/rcu/tree_plugin.h | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index b3d116cd072d..c2c8234a0291 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c | |||
@@ -2880,7 +2880,7 @@ static int rcu_pending(int cpu) | |||
2880 | * non-NULL, store an indication of whether all callbacks are lazy. | 2880 | * non-NULL, store an indication of whether all callbacks are lazy. |
2881 | * (If there are no callbacks, all of them are deemed to be lazy.) | 2881 | * (If there are no callbacks, all of them are deemed to be lazy.) |
2882 | */ | 2882 | */ |
2883 | static int rcu_cpu_has_callbacks(int cpu, bool *all_lazy) | 2883 | static int __maybe_unused rcu_cpu_has_callbacks(int cpu, bool *all_lazy) |
2884 | { | 2884 | { |
2885 | bool al = true; | 2885 | bool al = true; |
2886 | bool hc = false; | 2886 | bool hc = false; |
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h index 39a50b918bff..820b06aefbee 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h | |||
@@ -1586,11 +1586,13 @@ static void rcu_prepare_kthreads(int cpu) | |||
1586 | * Because we not have RCU_FAST_NO_HZ, just check whether this CPU needs | 1586 | * Because we not have RCU_FAST_NO_HZ, just check whether this CPU needs |
1587 | * any flavor of RCU. | 1587 | * any flavor of RCU. |
1588 | */ | 1588 | */ |
1589 | #ifndef CONFIG_RCU_NOCB_CPU_ALL | ||
1589 | int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies) | 1590 | int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies) |
1590 | { | 1591 | { |
1591 | *delta_jiffies = ULONG_MAX; | 1592 | *delta_jiffies = ULONG_MAX; |
1592 | return rcu_cpu_has_callbacks(cpu, NULL); | 1593 | return rcu_cpu_has_callbacks(cpu, NULL); |
1593 | } | 1594 | } |
1595 | #endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */ | ||
1594 | 1596 | ||
1595 | /* | 1597 | /* |
1596 | * Because we do not have RCU_FAST_NO_HZ, don't bother cleaning up | 1598 | * Because we do not have RCU_FAST_NO_HZ, don't bother cleaning up |
@@ -1696,6 +1698,7 @@ static bool rcu_try_advance_all_cbs(void) | |||
1696 | * | 1698 | * |
1697 | * The caller must have disabled interrupts. | 1699 | * The caller must have disabled interrupts. |
1698 | */ | 1700 | */ |
1701 | #ifndef CONFIG_RCU_NOCB_CPU_ALL | ||
1699 | int rcu_needs_cpu(int cpu, unsigned long *dj) | 1702 | int rcu_needs_cpu(int cpu, unsigned long *dj) |
1700 | { | 1703 | { |
1701 | struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu); | 1704 | struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu); |
@@ -1726,6 +1729,7 @@ int rcu_needs_cpu(int cpu, unsigned long *dj) | |||
1726 | } | 1729 | } |
1727 | return 0; | 1730 | return 0; |
1728 | } | 1731 | } |
1732 | #endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */ | ||
1729 | 1733 | ||
1730 | /* | 1734 | /* |
1731 | * Prepare a CPU for idle from an RCU perspective. The first major task | 1735 | * Prepare a CPU for idle from an RCU perspective. The first major task |