diff options
Diffstat (limited to 'kernel/rcu/tree_plugin.h')
| -rw-r--r-- | kernel/rcu/tree_plugin.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h index 6e2ef4b2b920..962d1d589929 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h | |||
| @@ -14,8 +14,8 @@ | |||
| 14 | * GNU General Public License for more details. | 14 | * GNU General Public License for more details. |
| 15 | * | 15 | * |
| 16 | * You should have received a copy of the GNU General Public License | 16 | * You should have received a copy of the GNU General Public License |
| 17 | * along with this program; if not, write to the Free Software | 17 | * along with this program; if not, you can access it online at |
| 18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 18 | * http://www.gnu.org/licenses/gpl-2.0.html. |
| 19 | * | 19 | * |
| 20 | * Copyright Red Hat, 2009 | 20 | * Copyright Red Hat, 2009 |
| 21 | * Copyright IBM Corporation, 2009 | 21 | * Copyright IBM Corporation, 2009 |
| @@ -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 |
| @@ -1656,7 +1658,7 @@ extern int tick_nohz_active; | |||
| 1656 | * only if it has been awhile since the last time we did so. Afterwards, | 1658 | * only if it has been awhile since the last time we did so. Afterwards, |
| 1657 | * if there are any callbacks ready for immediate invocation, return true. | 1659 | * if there are any callbacks ready for immediate invocation, return true. |
| 1658 | */ | 1660 | */ |
| 1659 | static bool rcu_try_advance_all_cbs(void) | 1661 | static bool __maybe_unused rcu_try_advance_all_cbs(void) |
| 1660 | { | 1662 | { |
| 1661 | bool cbs_ready = false; | 1663 | bool cbs_ready = false; |
| 1662 | struct rcu_data *rdp; | 1664 | struct rcu_data *rdp; |
| @@ -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 |
| @@ -1739,6 +1743,7 @@ int rcu_needs_cpu(int cpu, unsigned long *dj) | |||
| 1739 | */ | 1743 | */ |
| 1740 | static void rcu_prepare_for_idle(int cpu) | 1744 | static void rcu_prepare_for_idle(int cpu) |
| 1741 | { | 1745 | { |
| 1746 | #ifndef CONFIG_RCU_NOCB_CPU_ALL | ||
| 1742 | struct rcu_data *rdp; | 1747 | struct rcu_data *rdp; |
| 1743 | struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu); | 1748 | struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu); |
| 1744 | struct rcu_node *rnp; | 1749 | struct rcu_node *rnp; |
| @@ -1790,6 +1795,7 @@ static void rcu_prepare_for_idle(int cpu) | |||
| 1790 | rcu_accelerate_cbs(rsp, rnp, rdp); | 1795 | rcu_accelerate_cbs(rsp, rnp, rdp); |
| 1791 | raw_spin_unlock(&rnp->lock); /* irqs remain disabled. */ | 1796 | raw_spin_unlock(&rnp->lock); /* irqs remain disabled. */ |
| 1792 | } | 1797 | } |
| 1798 | #endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */ | ||
| 1793 | } | 1799 | } |
| 1794 | 1800 | ||
| 1795 | /* | 1801 | /* |
| @@ -1799,11 +1805,12 @@ static void rcu_prepare_for_idle(int cpu) | |||
| 1799 | */ | 1805 | */ |
| 1800 | static void rcu_cleanup_after_idle(int cpu) | 1806 | static void rcu_cleanup_after_idle(int cpu) |
| 1801 | { | 1807 | { |
| 1802 | 1808 | #ifndef CONFIG_RCU_NOCB_CPU_ALL | |
| 1803 | if (rcu_is_nocb_cpu(cpu)) | 1809 | if (rcu_is_nocb_cpu(cpu)) |
| 1804 | return; | 1810 | return; |
| 1805 | if (rcu_try_advance_all_cbs()) | 1811 | if (rcu_try_advance_all_cbs()) |
| 1806 | invoke_rcu_core(); | 1812 | invoke_rcu_core(); |
| 1813 | #endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */ | ||
| 1807 | } | 1814 | } |
| 1808 | 1815 | ||
| 1809 | /* | 1816 | /* |
| @@ -2101,6 +2108,7 @@ static void rcu_init_one_nocb(struct rcu_node *rnp) | |||
| 2101 | init_waitqueue_head(&rnp->nocb_gp_wq[1]); | 2108 | init_waitqueue_head(&rnp->nocb_gp_wq[1]); |
| 2102 | } | 2109 | } |
| 2103 | 2110 | ||
| 2111 | #ifndef CONFIG_RCU_NOCB_CPU_ALL | ||
| 2104 | /* Is the specified CPU a no-CPUs CPU? */ | 2112 | /* Is the specified CPU a no-CPUs CPU? */ |
| 2105 | bool rcu_is_nocb_cpu(int cpu) | 2113 | bool rcu_is_nocb_cpu(int cpu) |
| 2106 | { | 2114 | { |
| @@ -2108,6 +2116,7 @@ bool rcu_is_nocb_cpu(int cpu) | |||
| 2108 | return cpumask_test_cpu(cpu, rcu_nocb_mask); | 2116 | return cpumask_test_cpu(cpu, rcu_nocb_mask); |
| 2109 | return false; | 2117 | return false; |
| 2110 | } | 2118 | } |
| 2119 | #endif /* #ifndef CONFIG_RCU_NOCB_CPU_ALL */ | ||
| 2111 | 2120 | ||
| 2112 | /* | 2121 | /* |
| 2113 | * Enqueue the specified string of rcu_head structures onto the specified | 2122 | * Enqueue the specified string of rcu_head structures onto the specified |
| @@ -2893,7 +2902,7 @@ static void rcu_sysidle_init_percpu_data(struct rcu_dynticks *rdtp) | |||
| 2893 | * CPU unless the grace period has extended for too long. | 2902 | * CPU unless the grace period has extended for too long. |
| 2894 | * | 2903 | * |
| 2895 | * This code relies on the fact that all NO_HZ_FULL CPUs are also | 2904 | * This code relies on the fact that all NO_HZ_FULL CPUs are also |
| 2896 | * CONFIG_RCU_NOCB_CPUs. | 2905 | * CONFIG_RCU_NOCB_CPU CPUs. |
| 2897 | */ | 2906 | */ |
| 2898 | static bool rcu_nohz_full_cpu(struct rcu_state *rsp) | 2907 | static bool rcu_nohz_full_cpu(struct rcu_state *rsp) |
| 2899 | { | 2908 | { |
