linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] tracing: arm64: Make ftrace_replace_code() schedulable for arm64
@ 2018-12-05 17:48 Steven Rostedt
  2018-12-05 17:48 ` [PATCH 1/2] ftrace: Allow ftrace_replace_code() to be schedulable Steven Rostedt
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Steven Rostedt @ 2018-12-05 17:48 UTC (permalink / raw)
  To: linux-kernel
  Cc: catalin.marinas, will.deacon, keescook, arnd, linux-arm-kernel,
	Anders Roxell, Ingo Molnar


This is a little more involved, and I would like to push this through my
tree. Can I get a reviewed-by/ack for the second (arm64) patch?

Anders, can you also test this to make sure that it fixes the issue you
see?

Thanks!

-- Steve


Steven Rostedt (VMware) (2):
      ftrace: Allow ftrace_replace_code() to be schedulable
      arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code()

----
 arch/arm64/kernel/ftrace.c |  1 +
 include/linux/ftrace.h     |  1 +
 kernel/trace/ftrace.c      | 19 ++++++++++++++++---
 3 files changed, 18 insertions(+), 3 deletions(-)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/2] ftrace: Allow ftrace_replace_code() to be schedulable
  2018-12-05 17:48 [PATCH 0/2] tracing: arm64: Make ftrace_replace_code() schedulable for arm64 Steven Rostedt
@ 2018-12-05 17:48 ` Steven Rostedt
  2018-12-06 14:32   ` Anders Roxell
  2018-12-05 17:48 ` [PATCH 2/2] arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code() Steven Rostedt
  2018-12-05 18:47 ` [PATCH 0/2] tracing: arm64: Make ftrace_replace_code() schedulable for arm64 Anders Roxell
  2 siblings, 1 reply; 9+ messages in thread
From: Steven Rostedt @ 2018-12-05 17:48 UTC (permalink / raw)
  To: linux-kernel
  Cc: catalin.marinas, will.deacon, keescook, arnd, linux-arm-kernel,
	Anders Roxell, Ingo Molnar

From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

The function ftrace_replace_code() is the ftrace engine that does the
work to modify all the nops into the calls to the function callback in
all the functions being traced.

The generic version which is normally called from stop machine, but an
architecture can implement a non stop machine version and still use the
generic ftrace_replace_code(). When an architecture does this,
ftrace_replace_code() may be called from a schedulable context, where
it can allow the code to be preemptible, and schedule out.

In order to allow an architecture to make ftrace_replace_code()
schedulable, a new command flag is added called:

 FTRACE_SCHEDULABLE

Which can be or'd to the command that is passed to
ftrace_modify_all_code() that calls ftrace_replace_code() and will have
it call cond_resched() in the loop that modifies the nops into the
calls to the ftrace trampolines.

Link: http://lkml.kernel.org/r/20181204192903.8193-1-anders.roxell@linaro.org

Reported-by: Anders Roxell <anders.roxell@linaro.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
---
 include/linux/ftrace.h |  1 +
 kernel/trace/ftrace.c  | 19 ++++++++++++++++---
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index dd16e8218db3..c281b16baef9 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -389,6 +389,7 @@ enum {
 	FTRACE_UPDATE_TRACE_FUNC	= (1 << 2),
 	FTRACE_START_FUNC_RET		= (1 << 3),
 	FTRACE_STOP_FUNC_RET		= (1 << 4),
+	FTRACE_SCHEDULABLE		= (1 << 5),
 };
 
 /*
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 77734451cb05..74fdcacba514 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -77,6 +77,11 @@
 #define ASSIGN_OPS_HASH(opsname, val)
 #endif
 
+enum {
+	FTRACE_MODIFY_ENABLE_FL		= (1 << 0),
+	FTRACE_MODIFY_SCHEDULABLE_FL	= (1 << 1),
+};
+
 static struct ftrace_ops ftrace_list_end __read_mostly = {
 	.func		= ftrace_stub,
 	.flags		= FTRACE_OPS_FL_RECURSION_SAFE | FTRACE_OPS_FL_STUB,
@@ -2415,10 +2420,12 @@ __ftrace_replace_code(struct dyn_ftrace *rec, int enable)
 	return -1; /* unknow ftrace bug */
 }
 
-void __weak ftrace_replace_code(int enable)
+void __weak ftrace_replace_code(int mod_flags)
 {
 	struct dyn_ftrace *rec;
 	struct ftrace_page *pg;
+	int enable = mod_flags & FTRACE_MODIFY_ENABLE_FL;
+	int schedulable = mod_flags & FTRACE_MODIFY_SCHEDULABLE_FL;
 	int failed;
 
 	if (unlikely(ftrace_disabled))
@@ -2435,6 +2442,8 @@ void __weak ftrace_replace_code(int enable)
 			/* Stop processing */
 			return;
 		}
+		if (schedulable)
+			cond_resched();
 	} while_for_each_ftrace_rec();
 }
 
@@ -2548,8 +2557,12 @@ int __weak ftrace_arch_code_modify_post_process(void)
 void ftrace_modify_all_code(int command)
 {
 	int update = command & FTRACE_UPDATE_TRACE_FUNC;
+	int mod_flags = 0;
 	int err = 0;
 
+	if (command & FTRACE_SCHEDULABLE)
+		mod_flags = FTRACE_MODIFY_SCHEDULABLE_FL;
+
 	/*
 	 * If the ftrace_caller calls a ftrace_ops func directly,
 	 * we need to make sure that it only traces functions it
@@ -2567,9 +2580,9 @@ void ftrace_modify_all_code(int command)
 	}
 
 	if (command & FTRACE_UPDATE_CALLS)
-		ftrace_replace_code(1);
+		ftrace_replace_code(mod_flags | FTRACE_MODIFY_ENABLE_FL);
 	else if (command & FTRACE_DISABLE_CALLS)
-		ftrace_replace_code(0);
+		ftrace_replace_code(mod_flags);
 
 	if (update && ftrace_trace_function != ftrace_ops_list_func) {
 		function_trace_op = set_function_trace_op;
-- 
2.19.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code()
  2018-12-05 17:48 [PATCH 0/2] tracing: arm64: Make ftrace_replace_code() schedulable for arm64 Steven Rostedt
  2018-12-05 17:48 ` [PATCH 1/2] ftrace: Allow ftrace_replace_code() to be schedulable Steven Rostedt
@ 2018-12-05 17:48 ` Steven Rostedt
  2018-12-06 13:20   ` Will Deacon
  2018-12-05 18:47 ` [PATCH 0/2] tracing: arm64: Make ftrace_replace_code() schedulable for arm64 Anders Roxell
  2 siblings, 1 reply; 9+ messages in thread
From: Steven Rostedt @ 2018-12-05 17:48 UTC (permalink / raw)
  To: linux-kernel
  Cc: catalin.marinas, will.deacon, keescook, arnd, linux-arm-kernel,
	Anders Roxell, Ingo Molnar

From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

It has been reported that ftrace_replace_code() which is called by
ftrace_modify_all_code() can cause a soft lockup warning for an
allmodconfig kernel. This is because all the debug options enabled
causes the loop in ftrace_replace_code() (which loops over all the
functions being enabled where there can be 10s of thousands), is too
slow, and never schedules out.

To solve this, setting FTRACE_SCHEDULABLE to the command passed into
ftrace_replace_code() will make it call cond_resched() in the loop,
which prevents the soft lockup warning from triggering.

Link: http://lkml.kernel.org/r/20181204192903.8193-1-anders.roxell@linaro.org

Reported-by: Anders Roxell <anders.roxell@linaro.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
---
 arch/arm64/kernel/ftrace.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c
index 57e962290df3..9a8de0a79f97 100644
--- a/arch/arm64/kernel/ftrace.c
+++ b/arch/arm64/kernel/ftrace.c
@@ -193,6 +193,7 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,
 
 void arch_ftrace_update_code(int command)
 {
+	command |= FTRACE_SCHEDULABLE;
 	ftrace_modify_all_code(command);
 }
 
-- 
2.19.1



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/2] tracing: arm64: Make ftrace_replace_code() schedulable for arm64
  2018-12-05 17:48 [PATCH 0/2] tracing: arm64: Make ftrace_replace_code() schedulable for arm64 Steven Rostedt
  2018-12-05 17:48 ` [PATCH 1/2] ftrace: Allow ftrace_replace_code() to be schedulable Steven Rostedt
  2018-12-05 17:48 ` [PATCH 2/2] arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code() Steven Rostedt
@ 2018-12-05 18:47 ` Anders Roxell
  2 siblings, 0 replies; 9+ messages in thread
From: Anders Roxell @ 2018-12-05 18:47 UTC (permalink / raw)
  To: rostedt
  Cc: Linux Kernel Mailing List, Catalin Marinas, Will Deacon,
	Kees Cook, Arnd Bergmann, Linux ARM, mingo

On Wed, 5 Dec 2018 at 19:33, Steven Rostedt <rostedt@goodmis.org> wrote:
>
>
> This is a little more involved, and I would like to push this through my
> tree. Can I get a reviewed-by/ack for the second (arm64) patch?
>
> Anders, can you also test this to make sure that it fixes the issue you
> see?

Yes of course, I'll try them.

Cheers,
Anders

>
> Thanks!
>
> -- Steve
>
>
> Steven Rostedt (VMware) (2):
>       ftrace: Allow ftrace_replace_code() to be schedulable
>       arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code()
>
> ----
>  arch/arm64/kernel/ftrace.c |  1 +
>  include/linux/ftrace.h     |  1 +
>  kernel/trace/ftrace.c      | 19 ++++++++++++++++---
>  3 files changed, 18 insertions(+), 3 deletions(-)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code()
  2018-12-05 17:48 ` [PATCH 2/2] arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code() Steven Rostedt
@ 2018-12-06 13:20   ` Will Deacon
  2018-12-06 14:31     ` Anders Roxell
  2018-12-06 15:59     ` Steven Rostedt
  0 siblings, 2 replies; 9+ messages in thread
From: Will Deacon @ 2018-12-06 13:20 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: linux-kernel, catalin.marinas, keescook, arnd, linux-arm-kernel,
	Anders Roxell, Ingo Molnar

On Wed, Dec 05, 2018 at 12:48:54PM -0500, Steven Rostedt wrote:
> From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
> 
> It has been reported that ftrace_replace_code() which is called by
> ftrace_modify_all_code() can cause a soft lockup warning for an
> allmodconfig kernel. This is because all the debug options enabled
> causes the loop in ftrace_replace_code() (which loops over all the
> functions being enabled where there can be 10s of thousands), is too
> slow, and never schedules out.
> 
> To solve this, setting FTRACE_SCHEDULABLE to the command passed into
> ftrace_replace_code() will make it call cond_resched() in the loop,
> which prevents the soft lockup warning from triggering.
> 
> Link: http://lkml.kernel.org/r/20181204192903.8193-1-anders.roxell@linaro.org
> 
> Reported-by: Anders Roxell <anders.roxell@linaro.org>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> ---
>  arch/arm64/kernel/ftrace.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c
> index 57e962290df3..9a8de0a79f97 100644
> --- a/arch/arm64/kernel/ftrace.c
> +++ b/arch/arm64/kernel/ftrace.c
> @@ -193,6 +193,7 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,
>  
>  void arch_ftrace_update_code(int command)
>  {
> +	command |= FTRACE_SCHEDULABLE;
>  	ftrace_modify_all_code(command);
>  }

Bikeshed: I'd probably go for FTRACE_MAY_SLEEP, but I'm not going to die
on that hill so...

Acked-by: Will Deacon <will.deacon@arm.com>

Thanks, Steve!

Will

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code()
  2018-12-06 13:20   ` Will Deacon
@ 2018-12-06 14:31     ` Anders Roxell
  2018-12-06 15:59     ` Steven Rostedt
  1 sibling, 0 replies; 9+ messages in thread
From: Anders Roxell @ 2018-12-06 14:31 UTC (permalink / raw)
  To: Will Deacon
  Cc: rostedt, Linux Kernel Mailing List, Catalin Marinas, Kees Cook,
	Arnd Bergmann, Linux ARM, mingo

On Thu, 6 Dec 2018 at 14:19, Will Deacon <will.deacon@arm.com> wrote:
>
> On Wed, Dec 05, 2018 at 12:48:54PM -0500, Steven Rostedt wrote:
> > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
> >
> > It has been reported that ftrace_replace_code() which is called by
> > ftrace_modify_all_code() can cause a soft lockup warning for an
> > allmodconfig kernel. This is because all the debug options enabled
> > causes the loop in ftrace_replace_code() (which loops over all the
> > functions being enabled where there can be 10s of thousands), is too
> > slow, and never schedules out.
> >
> > To solve this, setting FTRACE_SCHEDULABLE to the command passed into
> > ftrace_replace_code() will make it call cond_resched() in the loop,
> > which prevents the soft lockup warning from triggering.
> >
> > Link: http://lkml.kernel.org/r/20181204192903.8193-1-anders.roxell@linaro.org
> >
> > Reported-by: Anders Roxell <anders.roxell@linaro.org>
> > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> > ---
> >  arch/arm64/kernel/ftrace.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c
> > index 57e962290df3..9a8de0a79f97 100644
> > --- a/arch/arm64/kernel/ftrace.c
> > +++ b/arch/arm64/kernel/ftrace.c
> > @@ -193,6 +193,7 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,
> >
> >  void arch_ftrace_update_code(int command)
> >  {
> > +     command |= FTRACE_SCHEDULABLE;
> >       ftrace_modify_all_code(command);
> >  }
>
> Bikeshed: I'd probably go for FTRACE_MAY_SLEEP, but I'm not going to die
> on that hill so...
>
> Acked-by: Will Deacon <will.deacon@arm.com>

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

Cheers,
Anders

>
> Thanks, Steve!
>
> Will

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] ftrace: Allow ftrace_replace_code() to be schedulable
  2018-12-05 17:48 ` [PATCH 1/2] ftrace: Allow ftrace_replace_code() to be schedulable Steven Rostedt
@ 2018-12-06 14:32   ` Anders Roxell
  0 siblings, 0 replies; 9+ messages in thread
From: Anders Roxell @ 2018-12-06 14:32 UTC (permalink / raw)
  To: rostedt
  Cc: Linux Kernel Mailing List, Catalin Marinas, Will Deacon,
	Kees Cook, Arnd Bergmann, Linux ARM, mingo

On Wed, 5 Dec 2018 at 19:33, Steven Rostedt <rostedt@goodmis.org> wrote:
>
> From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
>
> The function ftrace_replace_code() is the ftrace engine that does the
> work to modify all the nops into the calls to the function callback in
> all the functions being traced.
>
> The generic version which is normally called from stop machine, but an
> architecture can implement a non stop machine version and still use the
> generic ftrace_replace_code(). When an architecture does this,
> ftrace_replace_code() may be called from a schedulable context, where
> it can allow the code to be preemptible, and schedule out.
>
> In order to allow an architecture to make ftrace_replace_code()
> schedulable, a new command flag is added called:
>
>  FTRACE_SCHEDULABLE
>
> Which can be or'd to the command that is passed to
> ftrace_modify_all_code() that calls ftrace_replace_code() and will have
> it call cond_resched() in the loop that modifies the nops into the
> calls to the ftrace trampolines.
>
> Link: http://lkml.kernel.org/r/20181204192903.8193-1-anders.roxell@linaro.org
>
> Reported-by: Anders Roxell <anders.roxell@linaro.org>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

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

Cheers,
Anders

> ---
>  include/linux/ftrace.h |  1 +
>  kernel/trace/ftrace.c  | 19 ++++++++++++++++---
>  2 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
> index dd16e8218db3..c281b16baef9 100644
> --- a/include/linux/ftrace.h
> +++ b/include/linux/ftrace.h
> @@ -389,6 +389,7 @@ enum {
>         FTRACE_UPDATE_TRACE_FUNC        = (1 << 2),
>         FTRACE_START_FUNC_RET           = (1 << 3),
>         FTRACE_STOP_FUNC_RET            = (1 << 4),
> +       FTRACE_SCHEDULABLE              = (1 << 5),
>  };
>
>  /*
> diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
> index 77734451cb05..74fdcacba514 100644
> --- a/kernel/trace/ftrace.c
> +++ b/kernel/trace/ftrace.c
> @@ -77,6 +77,11 @@
>  #define ASSIGN_OPS_HASH(opsname, val)
>  #endif
>
> +enum {
> +       FTRACE_MODIFY_ENABLE_FL         = (1 << 0),
> +       FTRACE_MODIFY_SCHEDULABLE_FL    = (1 << 1),
> +};
> +
>  static struct ftrace_ops ftrace_list_end __read_mostly = {
>         .func           = ftrace_stub,
>         .flags          = FTRACE_OPS_FL_RECURSION_SAFE | FTRACE_OPS_FL_STUB,
> @@ -2415,10 +2420,12 @@ __ftrace_replace_code(struct dyn_ftrace *rec, int enable)
>         return -1; /* unknow ftrace bug */
>  }
>
> -void __weak ftrace_replace_code(int enable)
> +void __weak ftrace_replace_code(int mod_flags)
>  {
>         struct dyn_ftrace *rec;
>         struct ftrace_page *pg;
> +       int enable = mod_flags & FTRACE_MODIFY_ENABLE_FL;
> +       int schedulable = mod_flags & FTRACE_MODIFY_SCHEDULABLE_FL;
>         int failed;
>
>         if (unlikely(ftrace_disabled))
> @@ -2435,6 +2442,8 @@ void __weak ftrace_replace_code(int enable)
>                         /* Stop processing */
>                         return;
>                 }
> +               if (schedulable)
> +                       cond_resched();
>         } while_for_each_ftrace_rec();
>  }
>
> @@ -2548,8 +2557,12 @@ int __weak ftrace_arch_code_modify_post_process(void)
>  void ftrace_modify_all_code(int command)
>  {
>         int update = command & FTRACE_UPDATE_TRACE_FUNC;
> +       int mod_flags = 0;
>         int err = 0;
>
> +       if (command & FTRACE_SCHEDULABLE)
> +               mod_flags = FTRACE_MODIFY_SCHEDULABLE_FL;
> +
>         /*
>          * If the ftrace_caller calls a ftrace_ops func directly,
>          * we need to make sure that it only traces functions it
> @@ -2567,9 +2580,9 @@ void ftrace_modify_all_code(int command)
>         }
>
>         if (command & FTRACE_UPDATE_CALLS)
> -               ftrace_replace_code(1);
> +               ftrace_replace_code(mod_flags | FTRACE_MODIFY_ENABLE_FL);
>         else if (command & FTRACE_DISABLE_CALLS)
> -               ftrace_replace_code(0);
> +               ftrace_replace_code(mod_flags);
>
>         if (update && ftrace_trace_function != ftrace_ops_list_func) {
>                 function_trace_op = set_function_trace_op;
> --
> 2.19.1
>
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code()
  2018-12-06 13:20   ` Will Deacon
  2018-12-06 14:31     ` Anders Roxell
@ 2018-12-06 15:59     ` Steven Rostedt
  2018-12-06 16:06       ` Will Deacon
  1 sibling, 1 reply; 9+ messages in thread
From: Steven Rostedt @ 2018-12-06 15:59 UTC (permalink / raw)
  To: Will Deacon
  Cc: linux-kernel, catalin.marinas, keescook, arnd, linux-arm-kernel,
	Anders Roxell, Ingo Molnar

On Thu, 6 Dec 2018 13:20:07 +0000
Will Deacon <will.deacon@arm.com> wrote:

> On Wed, Dec 05, 2018 at 12:48:54PM -0500, Steven Rostedt wrote:
> > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
> > 
> > It has been reported that ftrace_replace_code() which is called by
> > ftrace_modify_all_code() can cause a soft lockup warning for an
> > allmodconfig kernel. This is because all the debug options enabled
> > causes the loop in ftrace_replace_code() (which loops over all the
> > functions being enabled where there can be 10s of thousands), is too
> > slow, and never schedules out.
> > 
> > To solve this, setting FTRACE_SCHEDULABLE to the command passed into
> > ftrace_replace_code() will make it call cond_resched() in the loop,
> > which prevents the soft lockup warning from triggering.
> > 
> > Link: http://lkml.kernel.org/r/20181204192903.8193-1-anders.roxell@linaro.org
> > 
> > Reported-by: Anders Roxell <anders.roxell@linaro.org>
> > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> > ---
> >  arch/arm64/kernel/ftrace.c | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c
> > index 57e962290df3..9a8de0a79f97 100644
> > --- a/arch/arm64/kernel/ftrace.c
> > +++ b/arch/arm64/kernel/ftrace.c
> > @@ -193,6 +193,7 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,
> >  
> >  void arch_ftrace_update_code(int command)
> >  {
> > +	command |= FTRACE_SCHEDULABLE;
> >  	ftrace_modify_all_code(command);
> >  }  
> 
> Bikeshed: I'd probably go for FTRACE_MAY_SLEEP, but I'm not going to die
> on that hill so...

I like bike sheds. Hmm, it's not too late to change this. Perhaps I
will.

> 
> Acked-by: Will Deacon <will.deacon@arm.com>

Thanks!

If I decide to change the name to MAY_SLEEP, I assume I can still keep
your Acked-by.

-- Steve


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code()
  2018-12-06 15:59     ` Steven Rostedt
@ 2018-12-06 16:06       ` Will Deacon
  0 siblings, 0 replies; 9+ messages in thread
From: Will Deacon @ 2018-12-06 16:06 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: linux-kernel, catalin.marinas, keescook, arnd, linux-arm-kernel,
	Anders Roxell, Ingo Molnar

On Thu, Dec 06, 2018 at 10:59:14AM -0500, Steven Rostedt wrote:
> On Thu, 6 Dec 2018 13:20:07 +0000
> Will Deacon <will.deacon@arm.com> wrote:
> 
> > On Wed, Dec 05, 2018 at 12:48:54PM -0500, Steven Rostedt wrote:
> > > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
> > > 
> > > It has been reported that ftrace_replace_code() which is called by
> > > ftrace_modify_all_code() can cause a soft lockup warning for an
> > > allmodconfig kernel. This is because all the debug options enabled
> > > causes the loop in ftrace_replace_code() (which loops over all the
> > > functions being enabled where there can be 10s of thousands), is too
> > > slow, and never schedules out.
> > > 
> > > To solve this, setting FTRACE_SCHEDULABLE to the command passed into
> > > ftrace_replace_code() will make it call cond_resched() in the loop,
> > > which prevents the soft lockup warning from triggering.
> > > 
> > > Link: http://lkml.kernel.org/r/20181204192903.8193-1-anders.roxell@linaro.org
> > > 
> > > Reported-by: Anders Roxell <anders.roxell@linaro.org>
> > > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> > > ---
> > >  arch/arm64/kernel/ftrace.c | 1 +
> > >  1 file changed, 1 insertion(+)
> > > 
> > > diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c
> > > index 57e962290df3..9a8de0a79f97 100644
> > > --- a/arch/arm64/kernel/ftrace.c
> > > +++ b/arch/arm64/kernel/ftrace.c
> > > @@ -193,6 +193,7 @@ int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec,
> > >  
> > >  void arch_ftrace_update_code(int command)
> > >  {
> > > +	command |= FTRACE_SCHEDULABLE;
> > >  	ftrace_modify_all_code(command);
> > >  }  
> > 
> > Bikeshed: I'd probably go for FTRACE_MAY_SLEEP, but I'm not going to die
> > on that hill so...
> 
> I like bike sheds. Hmm, it's not too late to change this. Perhaps I
> will.
> 
> > 
> > Acked-by: Will Deacon <will.deacon@arm.com>
> 
> Thanks!
> 
> If I decide to change the name to MAY_SLEEP, I assume I can still keep
> your Acked-by.

Of course!

Will

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2018-12-06 16:06 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-05 17:48 [PATCH 0/2] tracing: arm64: Make ftrace_replace_code() schedulable for arm64 Steven Rostedt
2018-12-05 17:48 ` [PATCH 1/2] ftrace: Allow ftrace_replace_code() to be schedulable Steven Rostedt
2018-12-06 14:32   ` Anders Roxell
2018-12-05 17:48 ` [PATCH 2/2] arm64: ftrace: Set FTRACE_SCHEDULABLE before ftrace_modify_all_code() Steven Rostedt
2018-12-06 13:20   ` Will Deacon
2018-12-06 14:31     ` Anders Roxell
2018-12-06 15:59     ` Steven Rostedt
2018-12-06 16:06       ` Will Deacon
2018-12-05 18:47 ` [PATCH 0/2] tracing: arm64: Make ftrace_replace_code() schedulable for arm64 Anders Roxell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).