diff options
Diffstat (limited to 'kernel/rcu/update.c')
-rw-r--r-- | kernel/rcu/update.c | 59 |
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 | |||
434 | int rcu_cpu_stall_suppress __read_mostly; /* 1 = suppress stall warnings. */ | 427 | int rcu_cpu_stall_suppress __read_mostly; /* 1 = suppress stall warnings. */ |
435 | EXPORT_SYMBOL_GPL(rcu_cpu_stall_suppress); | 428 | EXPORT_SYMBOL_GPL(rcu_cpu_stall_suppress); |
436 | static int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT; | ||
437 | |||
438 | module_param(rcu_cpu_stall_suppress, int, 0644); | 429 | module_param(rcu_cpu_stall_suppress, int, 0644); |
430 | int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT; | ||
439 | module_param(rcu_cpu_stall_timeout, int, 0644); | 431 | module_param(rcu_cpu_stall_timeout, int, 0644); |
440 | |||
441 | int 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 | } | ||
458 | EXPORT_SYMBOL_GPL(rcu_jiffies_till_stall_check); | ||
459 | |||
460 | void rcu_sysrq_start(void) | ||
461 | { | ||
462 | if (!rcu_cpu_stall_suppress) | ||
463 | rcu_cpu_stall_suppress = 2; | ||
464 | } | ||
465 | |||
466 | void rcu_sysrq_end(void) | ||
467 | { | ||
468 | if (rcu_cpu_stall_suppress == 2) | ||
469 | rcu_cpu_stall_suppress = 0; | ||
470 | } | ||
471 | |||
472 | static 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 | |||
478 | static struct notifier_block rcu_panic_block = { | ||
479 | .notifier_call = rcu_panic, | ||
480 | }; | ||
481 | |||
482 | static int __init check_cpu_stall_init(void) | ||
483 | { | ||
484 | atomic_notifier_chain_register(&panic_notifier_list, &rcu_panic_block); | ||
485 | return 0; | ||
486 | } | ||
487 | early_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 |