diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/ksysfs.c | 2 | ||||
| -rw-r--r-- | kernel/notifier.c | 2 | ||||
| -rw-r--r-- | kernel/rcu/rcu.h | 7 | ||||
| -rw-r--r-- | kernel/rcu/srcu.c | 11 | ||||
| -rw-r--r-- | kernel/rcu/tiny.c | 8 | ||||
| -rw-r--r-- | kernel/rcu/tiny_plugin.h | 4 | ||||
| -rw-r--r-- | kernel/rcu/torture.c | 8 | ||||
| -rw-r--r-- | kernel/rcu/tree.c | 18 | ||||
| -rw-r--r-- | kernel/rcu/tree.h | 4 | ||||
| -rw-r--r-- | kernel/rcu/tree_plugin.h | 19 | ||||
| -rw-r--r-- | kernel/rcu/tree_trace.c | 6 | ||||
| -rw-r--r-- | kernel/rcu/update.c | 5 |
12 files changed, 48 insertions, 46 deletions
diff --git a/kernel/ksysfs.c b/kernel/ksysfs.c index d945a949760f..e660964086e2 100644 --- a/kernel/ksysfs.c +++ b/kernel/ksysfs.c | |||
| @@ -19,6 +19,8 @@ | |||
| 19 | #include <linux/sched.h> | 19 | #include <linux/sched.h> |
| 20 | #include <linux/capability.h> | 20 | #include <linux/capability.h> |
| 21 | 21 | ||
| 22 | #include <linux/rcupdate.h> /* rcu_expedited */ | ||
| 23 | |||
| 22 | #define KERNEL_ATTR_RO(_name) \ | 24 | #define KERNEL_ATTR_RO(_name) \ |
| 23 | static struct kobj_attribute _name##_attr = __ATTR_RO(_name) | 25 | static struct kobj_attribute _name##_attr = __ATTR_RO(_name) |
| 24 | 26 | ||
diff --git a/kernel/notifier.c b/kernel/notifier.c index 2d5cc4ccff7f..db4c8b08a50c 100644 --- a/kernel/notifier.c +++ b/kernel/notifier.c | |||
| @@ -309,7 +309,7 @@ int __blocking_notifier_call_chain(struct blocking_notifier_head *nh, | |||
| 309 | * racy then it does not matter what the result of the test | 309 | * racy then it does not matter what the result of the test |
| 310 | * is, we re-check the list after having taken the lock anyway: | 310 | * is, we re-check the list after having taken the lock anyway: |
| 311 | */ | 311 | */ |
| 312 | if (rcu_dereference_raw(nh->head)) { | 312 | if (rcu_access_pointer(nh->head)) { |
| 313 | down_read(&nh->rwsem); | 313 | down_read(&nh->rwsem); |
| 314 | ret = notifier_call_chain(&nh->head, val, v, nr_to_call, | 314 | ret = notifier_call_chain(&nh->head, val, v, nr_to_call, |
| 315 | nr_calls); | 315 | nr_calls); |
diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h index 79c3877e9c5b..bfda2726ca45 100644 --- a/kernel/rcu/rcu.h +++ b/kernel/rcu/rcu.h | |||
| @@ -12,8 +12,8 @@ | |||
| 12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. |
| 13 | * | 13 | * |
| 14 | * You should have received a copy of the GNU General Public License | 14 | * You should have received a copy of the GNU General Public License |
| 15 | * along with this program; if not, write to the Free Software | 15 | * along with this program; if not, you can access it online at |
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 16 | * http://www.gnu.org/licenses/gpl-2.0.html. |
| 17 | * | 17 | * |
| 18 | * Copyright IBM Corporation, 2011 | 18 | * Copyright IBM Corporation, 2011 |
| 19 | * | 19 | * |
| @@ -23,6 +23,7 @@ | |||
| 23 | #ifndef __LINUX_RCU_H | 23 | #ifndef __LINUX_RCU_H |
| 24 | #define __LINUX_RCU_H | 24 | #define __LINUX_RCU_H |
| 25 | 25 | ||
| 26 | #include <trace/events/rcu.h> | ||
| 26 | #ifdef CONFIG_RCU_TRACE | 27 | #ifdef CONFIG_RCU_TRACE |
| 27 | #define RCU_TRACE(stmt) stmt | 28 | #define RCU_TRACE(stmt) stmt |
| 28 | #else /* #ifdef CONFIG_RCU_TRACE */ | 29 | #else /* #ifdef CONFIG_RCU_TRACE */ |
| @@ -116,8 +117,6 @@ static inline bool __rcu_reclaim(const char *rn, struct rcu_head *head) | |||
| 116 | } | 117 | } |
| 117 | } | 118 | } |
| 118 | 119 | ||
| 119 | extern int rcu_expedited; | ||
| 120 | |||
| 121 | #ifdef CONFIG_RCU_STALL_COMMON | 120 | #ifdef CONFIG_RCU_STALL_COMMON |
| 122 | 121 | ||
| 123 | extern int rcu_cpu_stall_suppress; | 122 | extern int rcu_cpu_stall_suppress; |
diff --git a/kernel/rcu/srcu.c b/kernel/rcu/srcu.c index 3318d8284384..c639556f3fa0 100644 --- a/kernel/rcu/srcu.c +++ b/kernel/rcu/srcu.c | |||
| @@ -12,8 +12,8 @@ | |||
| 12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. |
| 13 | * | 13 | * |
| 14 | * You should have received a copy of the GNU General Public License | 14 | * You should have received a copy of the GNU General Public License |
| 15 | * along with this program; if not, write to the Free Software | 15 | * along with this program; if not, you can access it online at |
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 16 | * http://www.gnu.org/licenses/gpl-2.0.html. |
| 17 | * | 17 | * |
| 18 | * Copyright (C) IBM Corporation, 2006 | 18 | * Copyright (C) IBM Corporation, 2006 |
| 19 | * Copyright (C) Fujitsu, 2012 | 19 | * Copyright (C) Fujitsu, 2012 |
| @@ -36,8 +36,6 @@ | |||
| 36 | #include <linux/delay.h> | 36 | #include <linux/delay.h> |
| 37 | #include <linux/srcu.h> | 37 | #include <linux/srcu.h> |
| 38 | 38 | ||
| 39 | #include <trace/events/rcu.h> | ||
| 40 | |||
| 41 | #include "rcu.h" | 39 | #include "rcu.h" |
| 42 | 40 | ||
| 43 | /* | 41 | /* |
| @@ -398,7 +396,7 @@ void call_srcu(struct srcu_struct *sp, struct rcu_head *head, | |||
| 398 | rcu_batch_queue(&sp->batch_queue, head); | 396 | rcu_batch_queue(&sp->batch_queue, head); |
| 399 | if (!sp->running) { | 397 | if (!sp->running) { |
| 400 | sp->running = true; | 398 | sp->running = true; |
| 401 | schedule_delayed_work(&sp->work, 0); | 399 | queue_delayed_work(system_power_efficient_wq, &sp->work, 0); |
| 402 | } | 400 | } |
| 403 | spin_unlock_irqrestore(&sp->queue_lock, flags); | 401 | spin_unlock_irqrestore(&sp->queue_lock, flags); |
| 404 | } | 402 | } |
| @@ -674,7 +672,8 @@ static void srcu_reschedule(struct srcu_struct *sp) | |||
| 674 | } | 672 | } |
| 675 | 673 | ||
| 676 | if (pending) | 674 | if (pending) |
| 677 | schedule_delayed_work(&sp->work, SRCU_INTERVAL); | 675 | queue_delayed_work(system_power_efficient_wq, |
| 676 | &sp->work, SRCU_INTERVAL); | ||
| 678 | } | 677 | } |
| 679 | 678 | ||
| 680 | /* | 679 | /* |
diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c index 1254f312d024..d9efcc13008c 100644 --- a/kernel/rcu/tiny.c +++ b/kernel/rcu/tiny.c | |||
| @@ -12,8 +12,8 @@ | |||
| 12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. |
| 13 | * | 13 | * |
| 14 | * You should have received a copy of the GNU General Public License | 14 | * You should have received a copy of the GNU General Public License |
| 15 | * along with this program; if not, write to the Free Software | 15 | * along with this program; if not, you can access it online at |
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 16 | * http://www.gnu.org/licenses/gpl-2.0.html. |
| 17 | * | 17 | * |
| 18 | * Copyright IBM Corporation, 2008 | 18 | * Copyright IBM Corporation, 2008 |
| 19 | * | 19 | * |
| @@ -37,10 +37,6 @@ | |||
| 37 | #include <linux/prefetch.h> | 37 | #include <linux/prefetch.h> |
| 38 | #include <linux/ftrace_event.h> | 38 | #include <linux/ftrace_event.h> |
| 39 | 39 | ||
| 40 | #ifdef CONFIG_RCU_TRACE | ||
| 41 | #include <trace/events/rcu.h> | ||
| 42 | #endif /* #else #ifdef CONFIG_RCU_TRACE */ | ||
| 43 | |||
| 44 | #include "rcu.h" | 40 | #include "rcu.h" |
| 45 | 41 | ||
| 46 | /* Forward declarations for tiny_plugin.h. */ | 42 | /* Forward declarations for tiny_plugin.h. */ |
diff --git a/kernel/rcu/tiny_plugin.h b/kernel/rcu/tiny_plugin.h index 280d06cae352..431528520562 100644 --- a/kernel/rcu/tiny_plugin.h +++ b/kernel/rcu/tiny_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 (c) 2010 Linaro | 20 | * Copyright (c) 2010 Linaro |
| 21 | * | 21 | * |
diff --git a/kernel/rcu/torture.c b/kernel/rcu/torture.c index 732f8ae3086a..022c5312b725 100644 --- a/kernel/rcu/torture.c +++ b/kernel/rcu/torture.c | |||
| @@ -12,8 +12,8 @@ | |||
| 12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. |
| 13 | * | 13 | * |
| 14 | * You should have received a copy of the GNU General Public License | 14 | * You should have received a copy of the GNU General Public License |
| 15 | * along with this program; if not, write to the Free Software | 15 | * along with this program; if not, you can access it online at |
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 16 | * http://www.gnu.org/licenses/gpl-2.0.html. |
| 17 | * | 17 | * |
| 18 | * Copyright (C) IBM Corporation, 2005, 2006 | 18 | * Copyright (C) IBM Corporation, 2005, 2006 |
| 19 | * | 19 | * |
| @@ -1352,7 +1352,7 @@ rcu_torture_shutdown(void *arg) | |||
| 1352 | unsigned long jiffies_snap; | 1352 | unsigned long jiffies_snap; |
| 1353 | 1353 | ||
| 1354 | VERBOSE_PRINTK_STRING("rcu_torture_shutdown task started"); | 1354 | VERBOSE_PRINTK_STRING("rcu_torture_shutdown task started"); |
| 1355 | jiffies_snap = ACCESS_ONCE(jiffies); | 1355 | jiffies_snap = jiffies; |
| 1356 | while (ULONG_CMP_LT(jiffies_snap, shutdown_time) && | 1356 | while (ULONG_CMP_LT(jiffies_snap, shutdown_time) && |
| 1357 | !kthread_should_stop()) { | 1357 | !kthread_should_stop()) { |
| 1358 | delta = shutdown_time - jiffies_snap; | 1358 | delta = shutdown_time - jiffies_snap; |
| @@ -1361,7 +1361,7 @@ rcu_torture_shutdown(void *arg) | |||
| 1361 | "rcu_torture_shutdown task: %lu jiffies remaining\n", | 1361 | "rcu_torture_shutdown task: %lu jiffies remaining\n", |
| 1362 | torture_type, delta); | 1362 | torture_type, delta); |
| 1363 | schedule_timeout_interruptible(delta); | 1363 | schedule_timeout_interruptible(delta); |
| 1364 | jiffies_snap = ACCESS_ONCE(jiffies); | 1364 | jiffies_snap = jiffies; |
| 1365 | } | 1365 | } |
| 1366 | if (kthread_should_stop()) { | 1366 | if (kthread_should_stop()) { |
| 1367 | VERBOSE_PRINTK_STRING("rcu_torture_shutdown task stopping"); | 1367 | VERBOSE_PRINTK_STRING("rcu_torture_shutdown task stopping"); |
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index b3d116cd072d..351faba48b91 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c | |||
| @@ -12,8 +12,8 @@ | |||
| 12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. |
| 13 | * | 13 | * |
| 14 | * You should have received a copy of the GNU General Public License | 14 | * You should have received a copy of the GNU General Public License |
| 15 | * along with this program; if not, write to the Free Software | 15 | * along with this program; if not, you can access it online at |
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 16 | * http://www.gnu.org/licenses/gpl-2.0.html. |
| 17 | * | 17 | * |
| 18 | * Copyright IBM Corporation, 2008 | 18 | * Copyright IBM Corporation, 2008 |
| 19 | * | 19 | * |
| @@ -58,8 +58,6 @@ | |||
| 58 | #include <linux/suspend.h> | 58 | #include <linux/suspend.h> |
| 59 | 59 | ||
| 60 | #include "tree.h" | 60 | #include "tree.h" |
| 61 | #include <trace/events/rcu.h> | ||
| 62 | |||
| 63 | #include "rcu.h" | 61 | #include "rcu.h" |
| 64 | 62 | ||
| 65 | MODULE_ALIAS("rcutree"); | 63 | MODULE_ALIAS("rcutree"); |
| @@ -837,7 +835,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, | |||
| 837 | * to the next. Only do this for the primary flavor of RCU. | 835 | * to the next. Only do this for the primary flavor of RCU. |
| 838 | */ | 836 | */ |
| 839 | if (rdp->rsp == rcu_state && | 837 | if (rdp->rsp == rcu_state && |
| 840 | ULONG_CMP_GE(ACCESS_ONCE(jiffies), rdp->rsp->jiffies_resched)) { | 838 | ULONG_CMP_GE(jiffies, rdp->rsp->jiffies_resched)) { |
| 841 | rdp->rsp->jiffies_resched += 5; | 839 | rdp->rsp->jiffies_resched += 5; |
| 842 | resched_cpu(rdp->cpu); | 840 | resched_cpu(rdp->cpu); |
| 843 | } | 841 | } |
| @@ -847,7 +845,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, | |||
| 847 | 845 | ||
| 848 | static void record_gp_stall_check_time(struct rcu_state *rsp) | 846 | static void record_gp_stall_check_time(struct rcu_state *rsp) |
| 849 | { | 847 | { |
| 850 | unsigned long j = ACCESS_ONCE(jiffies); | 848 | unsigned long j = jiffies; |
| 851 | unsigned long j1; | 849 | unsigned long j1; |
| 852 | 850 | ||
| 853 | rsp->gp_start = j; | 851 | rsp->gp_start = j; |
| @@ -1005,7 +1003,7 @@ static void check_cpu_stall(struct rcu_state *rsp, struct rcu_data *rdp) | |||
| 1005 | 1003 | ||
| 1006 | if (rcu_cpu_stall_suppress || !rcu_gp_in_progress(rsp)) | 1004 | if (rcu_cpu_stall_suppress || !rcu_gp_in_progress(rsp)) |
| 1007 | return; | 1005 | return; |
| 1008 | j = ACCESS_ONCE(jiffies); | 1006 | j = jiffies; |
| 1009 | 1007 | ||
| 1010 | /* | 1008 | /* |
| 1011 | * Lots of memory barriers to reject false positives. | 1009 | * Lots of memory barriers to reject false positives. |
| @@ -2304,7 +2302,7 @@ static void force_quiescent_state(struct rcu_state *rsp) | |||
| 2304 | if (rnp_old != NULL) | 2302 | if (rnp_old != NULL) |
| 2305 | raw_spin_unlock(&rnp_old->fqslock); | 2303 | raw_spin_unlock(&rnp_old->fqslock); |
| 2306 | if (ret) { | 2304 | if (ret) { |
| 2307 | rsp->n_force_qs_lh++; | 2305 | ACCESS_ONCE(rsp->n_force_qs_lh)++; |
| 2308 | return; | 2306 | return; |
| 2309 | } | 2307 | } |
| 2310 | rnp_old = rnp; | 2308 | rnp_old = rnp; |
| @@ -2316,7 +2314,7 @@ static void force_quiescent_state(struct rcu_state *rsp) | |||
| 2316 | smp_mb__after_unlock_lock(); | 2314 | smp_mb__after_unlock_lock(); |
| 2317 | raw_spin_unlock(&rnp_old->fqslock); | 2315 | raw_spin_unlock(&rnp_old->fqslock); |
| 2318 | if (ACCESS_ONCE(rsp->gp_flags) & RCU_GP_FLAG_FQS) { | 2316 | if (ACCESS_ONCE(rsp->gp_flags) & RCU_GP_FLAG_FQS) { |
| 2319 | rsp->n_force_qs_lh++; | 2317 | ACCESS_ONCE(rsp->n_force_qs_lh)++; |
| 2320 | raw_spin_unlock_irqrestore(&rnp_old->lock, flags); | 2318 | raw_spin_unlock_irqrestore(&rnp_old->lock, flags); |
| 2321 | return; /* Someone beat us to it. */ | 2319 | return; /* Someone beat us to it. */ |
| 2322 | } | 2320 | } |
| @@ -2880,7 +2878,7 @@ static int rcu_pending(int cpu) | |||
| 2880 | * non-NULL, store an indication of whether all callbacks are lazy. | 2878 | * 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.) | 2879 | * (If there are no callbacks, all of them are deemed to be lazy.) |
| 2882 | */ | 2880 | */ |
| 2883 | static int rcu_cpu_has_callbacks(int cpu, bool *all_lazy) | 2881 | static int __maybe_unused rcu_cpu_has_callbacks(int cpu, bool *all_lazy) |
| 2884 | { | 2882 | { |
| 2885 | bool al = true; | 2883 | bool al = true; |
| 2886 | bool hc = false; | 2884 | bool hc = false; |
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index 8c19873f1ac9..75dc3c39a02a 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h | |||
| @@ -13,8 +13,8 @@ | |||
| 13 | * GNU General Public License for more details. | 13 | * GNU General Public License for more details. |
| 14 | * | 14 | * |
| 15 | * You should have received a copy of the GNU General Public License | 15 | * You should have received a copy of the GNU General Public License |
| 16 | * along with this program; if not, write to the Free Software | 16 | * along with this program; if not, you can access it online at |
| 17 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | * http://www.gnu.org/licenses/gpl-2.0.html. |
| 18 | * | 18 | * |
| 19 | * Copyright IBM Corporation, 2008 | 19 | * Copyright IBM Corporation, 2008 |
| 20 | * | 20 | * |
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 | { |
diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c index 4def475336d4..5cdc62e1beeb 100644 --- a/kernel/rcu/tree_trace.c +++ b/kernel/rcu/tree_trace.c | |||
| @@ -12,8 +12,8 @@ | |||
| 12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. |
| 13 | * | 13 | * |
| 14 | * You should have received a copy of the GNU General Public License | 14 | * You should have received a copy of the GNU General Public License |
| 15 | * along with this program; if not, write to the Free Software | 15 | * along with this program; if not, you can access it online at |
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 16 | * http://www.gnu.org/licenses/gpl-2.0.html. |
| 17 | * | 17 | * |
| 18 | * Copyright IBM Corporation, 2008 | 18 | * Copyright IBM Corporation, 2008 |
| 19 | * | 19 | * |
| @@ -273,7 +273,7 @@ static void print_one_rcu_state(struct seq_file *m, struct rcu_state *rsp) | |||
| 273 | seq_printf(m, "nfqs=%lu/nfqsng=%lu(%lu) fqlh=%lu oqlen=%ld/%ld\n", | 273 | seq_printf(m, "nfqs=%lu/nfqsng=%lu(%lu) fqlh=%lu oqlen=%ld/%ld\n", |
| 274 | rsp->n_force_qs, rsp->n_force_qs_ngp, | 274 | rsp->n_force_qs, rsp->n_force_qs_ngp, |
| 275 | rsp->n_force_qs - rsp->n_force_qs_ngp, | 275 | rsp->n_force_qs - rsp->n_force_qs_ngp, |
| 276 | rsp->n_force_qs_lh, rsp->qlen_lazy, rsp->qlen); | 276 | ACCESS_ONCE(rsp->n_force_qs_lh), rsp->qlen_lazy, rsp->qlen); |
| 277 | for (rnp = &rsp->node[0]; rnp - &rsp->node[0] < rcu_num_nodes; rnp++) { | 277 | for (rnp = &rsp->node[0]; rnp - &rsp->node[0] < rcu_num_nodes; rnp++) { |
| 278 | if (rnp->level != level) { | 278 | if (rnp->level != level) { |
| 279 | seq_puts(m, "\n"); | 279 | seq_puts(m, "\n"); |
diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c index c54609faf233..4c0a9b0af469 100644 --- a/kernel/rcu/update.c +++ b/kernel/rcu/update.c | |||
| @@ -12,8 +12,8 @@ | |||
| 12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. |
| 13 | * | 13 | * |
| 14 | * You should have received a copy of the GNU General Public License | 14 | * You should have received a copy of the GNU General Public License |
| 15 | * along with this program; if not, write to the Free Software | 15 | * along with this program; if not, you can access it online at |
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 16 | * http://www.gnu.org/licenses/gpl-2.0.html. |
| 17 | * | 17 | * |
| 18 | * Copyright IBM Corporation, 2001 | 18 | * Copyright IBM Corporation, 2001 |
| 19 | * | 19 | * |
| @@ -49,7 +49,6 @@ | |||
| 49 | #include <linux/module.h> | 49 | #include <linux/module.h> |
| 50 | 50 | ||
| 51 | #define CREATE_TRACE_POINTS | 51 | #define CREATE_TRACE_POINTS |
| 52 | #include <trace/events/rcu.h> | ||
| 53 | 52 | ||
| 54 | #include "rcu.h" | 53 | #include "rcu.h" |
| 55 | 54 | ||
