From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: mroos@linux.ee
Cc: David Miller <davem@davemloft.net>,
shemminger@vyatta.com,
Linux Kernel list <linux-kernel@vger.kernel.org>,
netdev@vger.kernel.org
Subject: Re: suspicious RCU usage warnings in 3.3.0
Date: Fri, 13 Apr 2012 06:35:13 -0700 [thread overview]
Message-ID: <20120413133513.GB2457@linux.vnet.ibm.com> (raw)
In-Reply-To: <alpine.SOC.1.00.1204131444150.2736@math.ut.ee>
On Fri, Apr 13, 2012 at 02:55:12PM +0300, mroos@linux.ee wrote:
> > sparc64: Eliminate obsolete __handle_softirq() function
> >
> > The invocation of softirq is now handled by irq_exit(), so there is no
> > need for sparc64 to invoke it on the trap-return path. In fact, doing so
> > is a bug because if the trap occurred in the idle loop, this invocation
> > can result in lockdep-RCU failures. The problem is that RCU ignores idle
> > CPUs, and the sparc64 trap-return path to the softirq handlers fails to
> > tell RCU that the CPU must be considered non-idle while those handlers
> > are executing. This means that RCU is ignoring any RCU read-side critical
> > sections in those handlers, which in turn means that RCU-protected data
> > can be yanked out from under those read-side critical sections.
> >
> > The shiny new lockdep-RCU ability to detect RCU read-side critical sections
> > that RCU is ignoring located this problem.
> >
> > The fix is straightforward: Make sparc64 stop manually invoking the
> > softirq handlers.
> >
> > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
>
> It works for me on Sun Fire V100 - no more RCU warnings under ping
> flood.
>
> Tested-by: Meelis Roos <mroos@linux.ee>
OK, if this thing is going to actually work, I guess I need to update
the changelog to give credit where it is due, please see below.
My main concern about my patch is my removal of this line:
bne,pn %icc, __handle_softirq
It is quite possible that this should instead change to look as follows:
bne,pn %icc, __handle_preemption
This code is under #ifndef CONFIG_SMP, so Meelis's testing would not
reach it.
Anyway, patch with updated changelog below.
Thanx, Paul
------------------------------------------------------------------------
sparc64: Eliminate obsolete __handle_softirq() function
The invocation of softirq is now handled by irq_exit(), so there is no
need for sparc64 to invoke it on the trap-return path. In fact, doing so
is a bug because if the trap occurred in the idle loop, this invocation
can result in lockdep-RCU failures. The problem is that RCU ignores idle
CPUs, and the sparc64 trap-return path to the softirq handlers fails to
tell RCU that the CPU must be considered non-idle while those handlers
are executing. This means that RCU is ignoring any RCU read-side critical
sections in those handlers, which in turn means that RCU-protected data
can be yanked out from under those read-side critical sections.
The shiny new lockdep-RCU ability to detect RCU read-side critical sections
that RCU is ignoring located this problem.
The fix is straightforward: Make sparc64 stop manually invoking the
softirq handlers.
Reported-by: Meelis Roos <mroos@linux.ee>
Suggested-by: David Miller <davem@davemloft.net>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Tested-by: Meelis Roos <mroos@linux.ee>
diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S
index 77f1b95..9171fc2 100644
--- a/arch/sparc/kernel/rtrap_64.S
+++ b/arch/sparc/kernel/rtrap_64.S
@@ -20,11 +20,6 @@
.text
.align 32
-__handle_softirq:
- call do_softirq
- nop
- ba,a,pt %xcc, __handle_softirq_continue
- nop
__handle_preemption:
call schedule
wrpr %g0, RTRAP_PSTATE, %pstate
@@ -89,9 +84,7 @@ rtrap:
cmp %l1, 0
/* mm/ultra.S:xcall_report_regs KNOWS about this load. */
- bne,pn %icc, __handle_softirq
ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
-__handle_softirq_continue:
rtrap_xcall:
sethi %hi(0xf << 20), %l4
and %l1, %l4, %l4
next prev parent reply other threads:[~2012-04-13 13:36 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-28 8:45 suspicious RCU usage warnings in 3.3.0 Meelis Roos
2012-03-28 21:45 ` David Miller
2012-04-11 15:08 ` Meelis Roos
2012-04-11 23:08 ` Paul E. McKenney
2012-04-12 0:10 ` Stephen Hemminger
2012-04-12 0:18 ` David Miller
2012-04-12 0:45 ` Paul E. McKenney
2012-04-12 1:03 ` David Miller
2012-04-12 1:53 ` Paul E. McKenney
2012-04-12 1:08 ` David Miller
2012-04-12 4:54 ` Paul E. McKenney
2012-04-13 11:55 ` mroos
2012-04-13 13:35 ` Paul E. McKenney [this message]
2012-04-13 14:55 ` David Miller
2012-04-13 16:30 ` Paul E. McKenney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120413133513.GB2457@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mroos@linux.ee \
--cc=netdev@vger.kernel.org \
--cc=shemminger@vyatta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.