[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130921074726.GA7771@gmail.com>
Date: Sat, 21 Sep 2013 09:47:26 +0200
From: Ingo Molnar <mingo@...nel.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Frederic Weisbecker <fweisbec@...il.com>,
Thomas Gleixner <tglx@...utronix.de>,
LKML <linux-kernel@...r.kernel.org>,
Benjamin Herrenschmidt <benh@...nel.crashing.org>,
Paul Mackerras <paulus@....ibm.com>,
Peter Zijlstra <peterz@...radead.org>,
"H. Peter Anvin" <hpa@...or.com>,
James Hogan <james.hogan@...tec.com>,
"James E.J. Bottomley" <jejb@...isc-linux.org>,
Helge Deller <deller@....de>,
Martin Schwidefsky <schwidefsky@...ibm.com>,
Heiko Carstens <heiko.carstens@...ibm.com>,
"David S. Miller" <davem@...emloft.net>,
Andrew Morton <akpm@...ux-foundation.org>
Subject: Re: [RFC GIT PULL] softirq: Consolidation and stack overrun fix
* Linus Torvalds <torvalds@...ux-foundation.org> wrote:
> On Fri, Sep 20, 2013 at 9:26 AM, Frederic Weisbecker <fweisbec@...il.com> wrote:
> >
> > Now just for clarity, what do we then do with inline sofirq
> > executions: on local_bh_enable() for example, or explicit calls to
> > do_softirq() other than irq exit?
>
> If we do a softirq because it was pending and we did a
> "local_bh_enable()" in normal code, we need a new stack. The
> "local_bh_enable()" may be pretty deep in the callchain on a normal
> process stack, so I think it would be safest to switch to a separate
> stack for softirq handling.
>
> So you have a few different cases:
>
> - irq_exit(). The irq stack is by definition empty (assuming itq_exit()
> is done on the irq stack), so doing softirq in that context should be
> fine. However, that assumes that if we get *another* interrupt, then
> we'll switch stacks again, so this does mean that we need two irq
> stacks. No, irq's don't nest, but if we run softirq on the first irq
> stack, the other irq *can* nest that softirq.
>
> - process context doing local_bh_enable, and a bh became pending while
> it was disabled. See above: this needs a stack switch. Which stack to
> use is open, again assuming that a hardirq coming in will switch to yet
> another stack.
>
> Hmm?
I'd definitely argue in favor of never letting unknown-size stacks nest
(i.e. to always switch if we start a new context on top of a non-trivial
stack).
Known (small) size stack nesting is not real stack nesting, it's just a
somewhat unusual (and faster) way of stack switching.
Thanks,
Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists