On Thu, Apr 24, 2014 at 09:04:52AM -0400, Rik van Riel wrote: > As suggested by Paul McKenney... > > This seems small and simple enough that it should not introduce any > extra maintenance work in the future. > > ---8<--- > > Some sysrq handlers can run for a long time, because they dump a lot > of data onto a serial console. Having RCU stall warnings pop up in > the middle of them only makes the problem worse. > > This patch temporarily disables RCU stall warnings while a sysrq > request is handled. > > Signed-off-by: Rik van Riel <r...@redhat.com> > Suggested-by: Paul McKenney <paul...@linux.vnet.ibm.com>
I guess this means you like the idea. ;-) Reviewed-by: Paul E. McKenney <paul...@linux.vnet.ibm.com> > --- > drivers/tty/sysrq.c | 2 ++ > include/linux/rcupdate.h | 2 ++ > kernel/rcu/update.c | 11 +++++++++++ > 3 files changed, 15 insertions(+) > > diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c > index 3c61e9b..dd53af9 100644 > --- a/drivers/tty/sysrq.c > +++ b/drivers/tty/sysrq.c > @@ -511,6 +511,7 @@ void __handle_sysrq(int key, bool check_mask) > int orig_log_level; > int i; > > + rcu_sysrq_start(); > rcu_read_lock(); > /* > * Raise the apparent loglevel to maximum so that the sysrq header > @@ -554,6 +555,7 @@ void __handle_sysrq(int key, bool check_mask) > console_loglevel = orig_log_level; > } > rcu_read_unlock(); > + rcu_sysrq_end(); > } > > void handle_sysrq(int key) > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h > index 00a7fd6..b9a95f8 100644 > --- a/include/linux/rcupdate.h > +++ b/include/linux/rcupdate.h > @@ -227,6 +227,8 @@ void rcu_idle_enter(void); > void rcu_idle_exit(void); > void rcu_irq_enter(void); > void rcu_irq_exit(void); > +void rcu_sysrq_start(void); > +void rcu_sysrq_end(void); > > #ifdef CONFIG_RCU_USER_QS > void rcu_user_enter(void); > diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c > index 4c0a9b0..2ac3289 100644 > --- a/kernel/rcu/update.c > +++ b/kernel/rcu/update.c > @@ -320,6 +320,17 @@ int rcu_jiffies_till_stall_check(void) > return till_stall_check * HZ + RCU_STALL_DELAY_DELTA; > } > > +void rcu_sysrq_start(void) > +{ > + rcu_cpu_stall_suppress = 2; > +} > + > +void rcu_sysrq_end(void) > +{ > + if (rcu_cpu_stall_suppress == 2) > + rcu_cpu_stall_suppress = 0; > +} > + > static int rcu_panic(struct notifier_block *this, unsigned long ev, void > *ptr) > { > rcu_cpu_stall_suppress = 1; > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/