2015-06-24 20:14:33

by Stephen Boyd

[permalink] [raw]
Subject: [PATCH] ARM64: smp: Silence suspicious RCU usage with ipi tracepoints

John Stultz reported an RCU splat on ARM with ipi trace events
enabled. It looks like the same problem exists on ARM64.

At this point in the IPI handling path we haven't called
irq_enter() yet, so RCU doesn't know that we're about to exit
idle and properly warns that we're using RCU from an idle CPU.
Use trace_ipi_entry_rcuidle() instead of trace_ipi_entry() so
that RCU is informed about our exit from idle.

Cc: John Stultz <[email protected]>
Cc: Steven Rostedt <[email protected]>
Cc: Paul E. McKenney <[email protected]>
Cc: Nicolas Pitre <[email protected]>
Fixes: 45ed695ac10a "ARM64: add IPI tracepoints"
Signed-off-by: Stephen Boyd <[email protected]>
---

I haven't confirmed this, but it looks an awful lot like the same
problem exists on ARM64.

arch/arm64/kernel/smp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 4b2121bd7f9c..a1883bfdd9d6 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -693,7 +693,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
struct pt_regs *old_regs = set_irq_regs(regs);

if ((unsigned)ipinr < NR_IPI) {
- trace_ipi_entry(ipi_types[ipinr]);
+ trace_ipi_entry_rcuidle(ipi_types[ipinr]);
__inc_irq_stat(cpu, ipi_irqs[ipinr]);
}

@@ -736,7 +736,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
}

if ((unsigned)ipinr < NR_IPI)
- trace_ipi_exit(ipi_types[ipinr]);
+ trace_ipi_exit_rcuidle(ipi_types[ipinr]);
set_irq_regs(old_regs);
}

--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


2015-06-24 20:20:53

by Paul E. McKenney

[permalink] [raw]
Subject: Re: [PATCH] ARM64: smp: Silence suspicious RCU usage with ipi tracepoints

On Wed, Jun 24, 2015 at 01:14:18PM -0700, Stephen Boyd wrote:
> John Stultz reported an RCU splat on ARM with ipi trace events
> enabled. It looks like the same problem exists on ARM64.
>
> At this point in the IPI handling path we haven't called
> irq_enter() yet, so RCU doesn't know that we're about to exit
> idle and properly warns that we're using RCU from an idle CPU.
> Use trace_ipi_entry_rcuidle() instead of trace_ipi_entry() so
> that RCU is informed about our exit from idle.
>
> Cc: John Stultz <[email protected]>
> Cc: Steven Rostedt <[email protected]>
> Cc: Paul E. McKenney <[email protected]>
> Cc: Nicolas Pitre <[email protected]>
> Fixes: 45ed695ac10a "ARM64: add IPI tracepoints"
> Signed-off-by: Stephen Boyd <[email protected]>

Reviewed-by: Paul E. McKenney <[email protected]>

> ---
>
> I haven't confirmed this, but it looks an awful lot like the same
> problem exists on ARM64.
>
> arch/arm64/kernel/smp.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
> index 4b2121bd7f9c..a1883bfdd9d6 100644
> --- a/arch/arm64/kernel/smp.c
> +++ b/arch/arm64/kernel/smp.c
> @@ -693,7 +693,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
> struct pt_regs *old_regs = set_irq_regs(regs);
>
> if ((unsigned)ipinr < NR_IPI) {
> - trace_ipi_entry(ipi_types[ipinr]);
> + trace_ipi_entry_rcuidle(ipi_types[ipinr]);
> __inc_irq_stat(cpu, ipi_irqs[ipinr]);
> }
>
> @@ -736,7 +736,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
> }
>
> if ((unsigned)ipinr < NR_IPI)
> - trace_ipi_exit(ipi_types[ipinr]);
> + trace_ipi_exit_rcuidle(ipi_types[ipinr]);
> set_irq_regs(old_regs);
> }
>
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>

2015-06-24 21:29:42

by Peter Zijlstra

[permalink] [raw]
Subject: Re: [PATCH] ARM64: smp: Silence suspicious RCU usage with ipi tracepoints

On Wed, Jun 24, 2015 at 01:14:18PM -0700, Stephen Boyd wrote:
> John Stultz reported an RCU splat on ARM with ipi trace events
> enabled. It looks like the same problem exists on ARM64.
>
> At this point in the IPI handling path we haven't called
> irq_enter() yet, so RCU doesn't know that we're about to exit
> idle and properly warns that we're using RCU from an idle CPU.
> Use trace_ipi_entry_rcuidle() instead of trace_ipi_entry() so
> that RCU is informed about our exit from idle.

I have a problem with $subject. It says 'silence', whereas afaict this
fixes an actual bug, so it should be 'fixes'.

2015-06-24 22:00:32

by Stephen Boyd

[permalink] [raw]
Subject: Re: [PATCH] ARM64: smp: Silence suspicious RCU usage with ipi tracepoints

On 06/24/2015 02:29 PM, Peter Zijlstra wrote:
> On Wed, Jun 24, 2015 at 01:14:18PM -0700, Stephen Boyd wrote:
>> John Stultz reported an RCU splat on ARM with ipi trace events
>> enabled. It looks like the same problem exists on ARM64.
>>
>> At this point in the IPI handling path we haven't called
>> irq_enter() yet, so RCU doesn't know that we're about to exit
>> idle and properly warns that we're using RCU from an idle CPU.
>> Use trace_ipi_entry_rcuidle() instead of trace_ipi_entry() so
>> that RCU is informed about our exit from idle.
> I have a problem with $subject. It says 'silence', whereas afaict this
> fixes an actual bug, so it should be 'fixes'.

Fair enough. I can resend or whoever applies this patch can
s/Silence/Fix/ on the $subject.

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

2015-06-25 01:01:43

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH] ARM64: smp: Silence suspicious RCU usage with ipi tracepoints

On Wed, 24 Jun 2015 23:29:30 +0200
Peter Zijlstra <[email protected]> wrote:

> On Wed, Jun 24, 2015 at 01:14:18PM -0700, Stephen Boyd wrote:
> > John Stultz reported an RCU splat on ARM with ipi trace events
> > enabled. It looks like the same problem exists on ARM64.
> >
> > At this point in the IPI handling path we haven't called
> > irq_enter() yet, so RCU doesn't know that we're about to exit
> > idle and properly warns that we're using RCU from an idle CPU.
> > Use trace_ipi_entry_rcuidle() instead of trace_ipi_entry() so
> > that RCU is informed about our exit from idle.
>
> I have a problem with $subject. It says 'silence', whereas afaict this
> fixes an actual bug, so it should be 'fixes'.

Agreed, otherwise Acked-by: Steven Rostedt <[email protected]>

-- Steve

2015-06-25 13:25:08

by Catalin Marinas

[permalink] [raw]
Subject: Re: [PATCH] ARM64: smp: Silence suspicious RCU usage with ipi tracepoints

On Wed, Jun 24, 2015 at 02:59:30PM -0700, Stephen Boyd wrote:
> On 06/24/2015 02:29 PM, Peter Zijlstra wrote:
> > On Wed, Jun 24, 2015 at 01:14:18PM -0700, Stephen Boyd wrote:
> >> John Stultz reported an RCU splat on ARM with ipi trace events
> >> enabled. It looks like the same problem exists on ARM64.
> >>
> >> At this point in the IPI handling path we haven't called
> >> irq_enter() yet, so RCU doesn't know that we're about to exit
> >> idle and properly warns that we're using RCU from an idle CPU.
> >> Use trace_ipi_entry_rcuidle() instead of trace_ipi_entry() so
> >> that RCU is informed about our exit from idle.
> > I have a problem with $subject. It says 'silence', whereas afaict this
> > fixes an actual bug, so it should be 'fixes'.
>
> Fair enough. I can resend or whoever applies this patch can
> s/Silence/Fix/ on the $subject.

I'll apply the patch and change the subject as well.

Thanks.

--
Catalin

2015-06-29 10:03:18

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: [PATCH] ARM64: smp: Silence suspicious RCU usage with ipi tracepoints

On Wed, Jun 24, 2015 at 01:14:18PM -0700, Stephen Boyd wrote:
> John Stultz reported an RCU splat on ARM with ipi trace events
> enabled. It looks like the same problem exists on ARM64.
>
> At this point in the IPI handling path we haven't called
> irq_enter() yet, so RCU doesn't know that we're about to exit
> idle and properly warns that we're using RCU from an idle CPU.
> Use trace_ipi_entry_rcuidle() instead of trace_ipi_entry() so
> that RCU is informed about our exit from idle.
>
> Cc: John Stultz <[email protected]>
> Cc: Steven Rostedt <[email protected]>
> Cc: Paul E. McKenney <[email protected]>
> Cc: Nicolas Pitre <[email protected]>
> Fixes: 45ed695ac10a "ARM64: add IPI tracepoints"
> Signed-off-by: Stephen Boyd <[email protected]>

I can find no trace of your equivalent ARM patch in my mailbox, but my
comment is as relevant to that message as it is to this one.

The Fixes: line has a standard format, which is not the formatting above.
Please see Documentation/SubmittingPatches section 2. Thanks.

I've fixed it when applying the ARM version of this patch. However, I'm
left wondering whether the lack of update to change the "Silence" to "Fix"
which I _stumbled_ over later in this thread is laziness on your part -
had it not been for the malformed Fixes: line, I would not have known to
update that.

We all gets lots of email every day, expecting people to remember some
comment in the dim and distant past made to a similar but different patch
is not really on. Please ensure that you update your patches in future.

--
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.

2015-06-29 11:23:42

by Catalin Marinas

[permalink] [raw]
Subject: Re: [PATCH] ARM64: smp: Silence suspicious RCU usage with ipi tracepoints

On Mon, Jun 29, 2015 at 11:02:51AM +0100, Russell King - ARM Linux wrote:
> On Wed, Jun 24, 2015 at 01:14:18PM -0700, Stephen Boyd wrote:
> > John Stultz reported an RCU splat on ARM with ipi trace events
> > enabled. It looks like the same problem exists on ARM64.
> >
> > At this point in the IPI handling path we haven't called
> > irq_enter() yet, so RCU doesn't know that we're about to exit
> > idle and properly warns that we're using RCU from an idle CPU.
> > Use trace_ipi_entry_rcuidle() instead of trace_ipi_entry() so
> > that RCU is informed about our exit from idle.
> >
> > Cc: John Stultz <[email protected]>
> > Cc: Steven Rostedt <[email protected]>
> > Cc: Paul E. McKenney <[email protected]>
> > Cc: Nicolas Pitre <[email protected]>
> > Fixes: 45ed695ac10a "ARM64: add IPI tracepoints"
[...]
> The Fixes: line has a standard format, which is not the formatting above.
> Please see Documentation/SubmittingPatches section 2. Thanks.

I re-wrote it in this instance. What's not clear to me is whether cc:
stable is still necessary with a Fixes: tag (I add it just in case).

Anyway, to simplify the process, I came up with a .gitconfig alias:

[alias]
show-fixes = !git show --pretty=format:\"Fixes: %h (\\\"%s\\\")\nCc: <[email protected]> "#" $(git describe --match="v*" --contains $1 | cut -d - -f -1)+\n\n%b\" $1 "#"

And another for .vimrc (to replace a Fixes: line):

command! GitFixes
\ :.!read tagname commit; git show-fixes $commit 2> /dev/null | head -n 2

--
Catalin