aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcu/update.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/rcu/update.c')
-rw-r--r--kernel/rcu/update.c59
1 files changed, 1 insertions, 58 deletions
diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
index cbaa976c5945..c3bf44ba42e5 100644
--- a/kernel/rcu/update.c
+++ b/kernel/rcu/update.c
@@ -424,68 +424,11 @@ EXPORT_SYMBOL_GPL(do_trace_rcu_torture_read);
424#endif 424#endif
425 425
426#ifdef CONFIG_RCU_STALL_COMMON 426#ifdef CONFIG_RCU_STALL_COMMON
427
428#ifdef CONFIG_PROVE_RCU
429#define RCU_STALL_DELAY_DELTA (5 * HZ)
430#else
431#define RCU_STALL_DELAY_DELTA 0
432#endif
433
434int rcu_cpu_stall_suppress __read_mostly; /* 1 = suppress stall warnings. */ 427int rcu_cpu_stall_suppress __read_mostly; /* 1 = suppress stall warnings. */
435EXPORT_SYMBOL_GPL(rcu_cpu_stall_suppress); 428EXPORT_SYMBOL_GPL(rcu_cpu_stall_suppress);
436static int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT;
437
438module_param(rcu_cpu_stall_suppress, int, 0644); 429module_param(rcu_cpu_stall_suppress, int, 0644);
430int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT;
439module_param(rcu_cpu_stall_timeout, int, 0644); 431module_param(rcu_cpu_stall_timeout, int, 0644);
440
441int rcu_jiffies_till_stall_check(void)
442{
443 int till_stall_check = READ_ONCE(rcu_cpu_stall_timeout);
444
445 /*
446 * Limit check must be consistent with the Kconfig limits
447 * for CONFIG_RCU_CPU_STALL_TIMEOUT.
448 */
449 if (till_stall_check < 3) {
450 WRITE_ONCE(rcu_cpu_stall_timeout, 3);
451 till_stall_check = 3;
452 } else if (till_stall_check > 300) {
453 WRITE_ONCE(rcu_cpu_stall_timeout, 300);
454 till_stall_check = 300;
455 }
456 return till_stall_check * HZ + RCU_STALL_DELAY_DELTA;
457}
458EXPORT_SYMBOL_GPL(rcu_jiffies_till_stall_check);
459
460void rcu_sysrq_start(void)
461{
462 if (!rcu_cpu_stall_suppress)
463 rcu_cpu_stall_suppress = 2;
464}
465
466void rcu_sysrq_end(void)
467{
468 if (rcu_cpu_stall_suppress == 2)
469 rcu_cpu_stall_suppress = 0;
470}
471
472static int rcu_panic(struct notifier_block *this, unsigned long ev, void *ptr)
473{
474 rcu_cpu_stall_suppress = 1;
475 return NOTIFY_DONE;
476}
477
478static struct notifier_block rcu_panic_block = {
479 .notifier_call = rcu_panic,
480};
481
482static int __init check_cpu_stall_init(void)
483{
484 atomic_notifier_chain_register(&panic_notifier_list, &rcu_panic_block);
485 return 0;
486}
487early_initcall(check_cpu_stall_init);
488
489#endif /* #ifdef CONFIG_RCU_STALL_COMMON */ 432#endif /* #ifdef CONFIG_RCU_STALL_COMMON */
490 433
491#ifdef CONFIG_TASKS_RCU 434#ifdef CONFIG_TASKS_RCU