[v2] kernel/trace: fix watchdog soft lockup

Message ID 20181130145622.26334-1-anders.roxell@linaro.org
State New
Headers show
Series
  • [v2] kernel/trace: fix watchdog soft lockup
Related show

Commit Message

Anders Roxell Nov. 30, 2018, 2:56 p.m.
When building a allmodconfig kernel for arm64 and boot that in qemu,
CONFIG_FTRACE_STARTUP_TEST gets enabled and that takes time so the
watchdog expires and prints out a message like this:
'watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [swapper/0:1]'
Depending on what the what test gets called from init_trace_selftests()
it stays minutes in the loop.
Rework so that function cond_resched() gets called in the
init_trace_selftests loop.

Co-developed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Signed-off-by: Anders Roxell <anders.roxell@linaro.org>

---
 kernel/trace/trace.c | 4 ++++
 1 file changed, 4 insertions(+)

-- 
2.19.2

Comments

Steven Rostedt Nov. 30, 2018, 3:18 p.m. | #1
On Fri, 30 Nov 2018 15:56:22 +0100
Anders Roxell <anders.roxell@linaro.org> wrote:

> When building a allmodconfig kernel for arm64 and boot that in qemu,

> CONFIG_FTRACE_STARTUP_TEST gets enabled and that takes time so the

> watchdog expires and prints out a message like this:

> 'watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [swapper/0:1]'

> Depending on what the what test gets called from init_trace_selftests()

> it stays minutes in the loop.

> Rework so that function cond_resched() gets called in the

> init_trace_selftests loop.

> 


This looks fine to me. Should it be marked for stable, and pushed into
this release cycle, or wait till the next merge window?

-- Steve

> Co-developed-by: Arnd Bergmann <arnd@arndb.de>

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> Signed-off-by: Anders Roxell <anders.roxell@linaro.org>

> ---

>  kernel/trace/trace.c | 4 ++++

>  1 file changed, 4 insertions(+)

> 

> diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c

> index 5706599ed534..109becbc81ca 100644

> --- a/kernel/trace/trace.c

> +++ b/kernel/trace/trace.c

> @@ -1547,6 +1547,10 @@ static __init int init_trace_selftests(void)

>  	pr_info("Running postponed tracer tests:\n");

>  

>  	list_for_each_entry_safe(p, n, &postponed_selftests, list) {

> +		/* This loop can take minutes when sanitizers are enabled, so

> +		 * lets make sure we allow RCU processing.

> +		 */

> +		cond_resched();

>  		ret = run_tracer_selftest(p->type);

>  		/* If the test fails, then warn and remove from available_tracers */

>  		if (ret < 0) {
Anders Roxell March 20, 2019, 11:17 a.m. | #2
On Fri, 30 Nov 2018 at 16:18, Steven Rostedt <rostedt@goodmis.org> wrote:
>

> On Fri, 30 Nov 2018 15:56:22 +0100

> Anders Roxell <anders.roxell@linaro.org> wrote:

>

> > When building a allmodconfig kernel for arm64 and boot that in qemu,

> > CONFIG_FTRACE_STARTUP_TEST gets enabled and that takes time so the

> > watchdog expires and prints out a message like this:

> > 'watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [swapper/0:1]'

> > Depending on what the what test gets called from init_trace_selftests()

> > it stays minutes in the loop.

> > Rework so that function cond_resched() gets called in the

> > init_trace_selftests loop.

> >

>

> This looks fine to me. Should it be marked for stable, and pushed into

> this release cycle, or wait till the next merge window?


Steve, I'm sorry for the late reply and no its not urgent.
Maybe it can make it into v5.2 ?

Cheers,
Anders

>

> -- Steve

>

> > Co-developed-by: Arnd Bergmann <arnd@arndb.de>

> > Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> > Signed-off-by: Anders Roxell <anders.roxell@linaro.org>

> > ---

> >  kernel/trace/trace.c | 4 ++++

> >  1 file changed, 4 insertions(+)

> >

> > diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c

> > index 5706599ed534..109becbc81ca 100644

> > --- a/kernel/trace/trace.c

> > +++ b/kernel/trace/trace.c

> > @@ -1547,6 +1547,10 @@ static __init int init_trace_selftests(void)

> >       pr_info("Running postponed tracer tests:\n");

> >

> >       list_for_each_entry_safe(p, n, &postponed_selftests, list) {

> > +             /* This loop can take minutes when sanitizers are enabled, so

> > +              * lets make sure we allow RCU processing.

> > +              */

> > +             cond_resched();

> >               ret = run_tracer_selftest(p->type);

> >               /* If the test fails, then warn and remove from available_tracers */

> >               if (ret < 0) {

>

Patch

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 5706599ed534..109becbc81ca 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -1547,6 +1547,10 @@  static __init int init_trace_selftests(void)
 	pr_info("Running postponed tracer tests:\n");
 
 	list_for_each_entry_safe(p, n, &postponed_selftests, list) {
+		/* This loop can take minutes when sanitizers are enabled, so
+		 * lets make sure we allow RCU processing.
+		 */
+		cond_resched();
 		ret = run_tracer_selftest(p->type);
 		/* If the test fails, then warn and remove from available_tracers */
 		if (ret < 0) {