aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2010-08-10 17:28:53 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2010-08-20 12:00:12 -0400
commit53d84e004d5e8c018be395c4330dc72fd60bd13e (patch)
tree6d5b265442ac42c7cc73147b0de0d029644e312b /kernel
parent8cdd32a918350430483751feaae1c19cef816f69 (diff)
rcu: permit suppressing current grace period's CPU stall warnings
When using a kernel debugger, a long sojourn in the debugger can get you lots of RCU CPU stall warnings once you resume. This might not be helpful, especially if you are using the system console. This patch therefore allows RCU CPU stall warnings to be suppressed, but only for the duration of the current set of grace periods. This differs from Jason's original patch in that it adds support for tiny RCU and preemptible RCU, and uses a slightly different method for suppressing the RCU CPU stall warning messages. Signed-off-by: Jason Wessel <jason.wessel@windriver.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Tested-by: Jason Wessel <jason.wessel@windriver.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/rcutree.c20
-rw-r--r--kernel/rcutree.h1
-rw-r--r--kernel/rcutree_plugin.h18
3 files changed, 39 insertions, 0 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index ff214118e4b8..42140a860bb9 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -565,6 +565,22 @@ static int rcu_panic(struct notifier_block *this, unsigned long ev, void *ptr)
565 return NOTIFY_DONE; 565 return NOTIFY_DONE;
566} 566}
567 567
568/**
569 * rcu_cpu_stall_reset - prevent further stall warnings in current grace period
570 *
571 * Set the stall-warning timeout way off into the future, thus preventing
572 * any RCU CPU stall-warning messages from appearing in the current set of
573 * RCU grace periods.
574 *
575 * The caller must disable hard irqs.
576 */
577void rcu_cpu_stall_reset(void)
578{
579 rcu_sched_state.jiffies_stall = jiffies + ULONG_MAX / 2;
580 rcu_bh_state.jiffies_stall = jiffies + ULONG_MAX / 2;
581 rcu_preempt_stall_reset();
582}
583
568static struct notifier_block rcu_panic_block = { 584static struct notifier_block rcu_panic_block = {
569 .notifier_call = rcu_panic, 585 .notifier_call = rcu_panic,
570}; 586};
@@ -584,6 +600,10 @@ static void check_cpu_stall(struct rcu_state *rsp, struct rcu_data *rdp)
584{ 600{
585} 601}
586 602
603void rcu_cpu_stall_reset(void)
604{
605}
606
587static void __init check_cpu_stall_init(void) 607static void __init check_cpu_stall_init(void)
588{ 608{
589} 609}
diff --git a/kernel/rcutree.h b/kernel/rcutree.h
index bb4d08695c45..7abd439a7573 100644
--- a/kernel/rcutree.h
+++ b/kernel/rcutree.h
@@ -372,6 +372,7 @@ static void rcu_report_unblock_qs_rnp(struct rcu_node *rnp,
372#ifdef CONFIG_RCU_CPU_STALL_DETECTOR 372#ifdef CONFIG_RCU_CPU_STALL_DETECTOR
373static void rcu_print_detail_task_stall(struct rcu_state *rsp); 373static void rcu_print_detail_task_stall(struct rcu_state *rsp);
374static void rcu_print_task_stall(struct rcu_node *rnp); 374static void rcu_print_task_stall(struct rcu_node *rnp);
375static void rcu_preempt_stall_reset(void);
375#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ 376#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
376static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp); 377static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp);
377#ifdef CONFIG_HOTPLUG_CPU 378#ifdef CONFIG_HOTPLUG_CPU
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index 63bb7714fdeb..561410f70d4a 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -417,6 +417,16 @@ static void rcu_print_task_stall(struct rcu_node *rnp)
417 } 417 }
418} 418}
419 419
420/*
421 * Suppress preemptible RCU's CPU stall warnings by pushing the
422 * time of the next stall-warning message comfortably far into the
423 * future.
424 */
425static void rcu_preempt_stall_reset(void)
426{
427 rcu_preempt_state.jiffies_stall = jiffies + ULONG_MAX / 2;
428}
429
420#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ 430#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
421 431
422/* 432/*
@@ -867,6 +877,14 @@ static void rcu_print_task_stall(struct rcu_node *rnp)
867{ 877{
868} 878}
869 879
880/*
881 * Because preemptible RCU does not exist, there is no need to suppress
882 * its CPU stall warnings.
883 */
884static void rcu_preempt_stall_reset(void)
885{
886}
887
870#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ 888#endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
871 889
872/* 890/*