Messages in this thread | | | Date | Thu, 24 Apr 2014 08:16:00 -0700 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH RFC] sysrq,rcu: suppress RCU stall warnings while sysrq runs |
| |
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 <riel@redhat.com> > Suggested-by: Paul McKenney <paulmck@linux.vnet.ibm.com>
I guess this means you like the idea. ;-)
Reviewed-by: Paul E. McKenney <paulmck@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; >
| |