From: Heiko Carstens <hca@linux.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Sven Schnelle <svens@linux.ibm.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
"Paul E. McKenney" <paulmck@kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
the arch/x86 maintainers <x86@kernel.org>
Subject: Re: [GIT pull] locking/urgent for v5.10-rc6
Date: Wed, 2 Dec 2020 11:52:28 +0100 [thread overview]
Message-ID: <20201202105228.GA6202@osiris> (raw)
In-Reply-To: <20201202093805.GB3040@hirez.programming.kicks-ass.net>
On Wed, Dec 02, 2020 at 10:38:05AM +0100, Peter Zijlstra wrote:
> On Wed, Dec 02, 2020 at 08:54:27AM +0100, Heiko Carstens wrote:
> > > > But but but...
> > > >
> > > > do_idle() # IRQs on
> > > > local_irq_disable(); # IRQs off
> > > > defaul_idle_call() # IRQs off
> > > lockdep_hardirqs_on(); # IRQs off, but lockdep things they're on
> > > > arch_cpu_idle() # IRQs off
> > > > enabled_wait() # IRQs off
> > > > raw_local_save() # still off
> > > > psw_idle() # very much off
> > > > ext_int_handler # get an interrupt ?!?!
> > > rcu_irq_enter() # lockdep thinks IRQs are on <- FAIL
> > >
> > > I can't much read s390 assembler, but ext_int_handler() has a
> > > TRACE_IRQS_OFF, which would be sufficient to re-align the lockdep state
> > > with the actual state, but there's some condition before it, what's that
> > > test and is that right?
> >
> > After digging a bit into our asm code: no, it is not right, and only
> > for psw_idle() it is wrong.
> >
> > What happens with the current code:
> >
> > - default_idle_call() calls lockdep_hardirqs_on() before calling into
> > arch_cpu_idle()
>
> Correct.
>
> > - our arch_cpu_idle() calls psw_idle() which enables irqs. the irq
> > handler will call/use the SWITCH_ASYNC macro which clears the
> > interrupt enabled bits in the old program status word (_only_ for
> > psw_idle)
>
> This is the condition at 0: that compares r13 to psw_idle_exit?
Yes, exactly.
> > So I guess my patch which I sent yesterday evening should fix all that
> > mess
>
> Yes, afaict it does the right thing. Exceptions should call
> TRACE_IRQS_OFF unconditionally, since the hardware will disable
> interrupts upon taking an exception, irrespective of what the previous
> context had.
>
> On exception return the previous IRQ state is inspected and lockdep is
> changed to match (except for NMIs, which either are ignored by lockdep
> or need a little bit of extra care).
Yes, we do all that, except that it seems odd to test the previous
state for interrupts (not exceptions). Since for interrupts the
previous context obviously must have been enabled for interrupts.
Except if you play tricks with the old PSW, like we do :/
next prev parent reply other threads:[~2020-12-02 10:56 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-29 13:37 [GIT pull] irq/urgent for v5.10-rc6 Thomas Gleixner
2020-11-29 13:38 ` [GIT pull] locking/urgent " Thomas Gleixner
2020-11-29 19:31 ` Linus Torvalds
2020-11-30 0:29 ` Paul E. McKenney
2020-11-30 7:56 ` Peter Zijlstra
2020-11-30 8:23 ` Sven Schnelle
2020-11-30 12:31 ` Sven Schnelle
2020-11-30 12:52 ` Peter Zijlstra
2020-11-30 13:03 ` Peter Zijlstra
2020-11-30 18:04 ` Linus Torvalds
2020-11-30 19:31 ` Christian Borntraeger
2020-12-01 8:07 ` Peter Zijlstra
2020-12-01 11:07 ` Peter Zijlstra
2020-12-01 14:46 ` Paul E. McKenney
2020-12-01 14:55 ` Peter Zijlstra
2020-12-01 16:53 ` Paul E. McKenney
2020-12-01 18:15 ` Peter Zijlstra
2020-12-01 18:48 ` Peter Zijlstra
2020-12-01 18:57 ` Mark Rutland
2020-12-01 19:14 ` Peter Zijlstra
2020-12-01 19:18 ` Heiko Carstens
2020-12-02 9:21 ` Peter Zijlstra
2020-12-02 10:56 ` Heiko Carstens
2020-12-02 11:16 ` Mark Rutland
2020-12-02 13:46 ` Heiko Carstens
2020-12-02 12:27 ` Peter Zijlstra
2020-12-01 7:48 ` Sven Schnelle
2020-12-02 7:54 ` Heiko Carstens
2020-12-02 9:38 ` Peter Zijlstra
2020-12-02 10:52 ` Heiko Carstens [this message]
2020-11-30 8:36 ` Peter Zijlstra
2020-11-30 17:55 ` Linus Torvalds
2020-12-01 7:39 ` Peter Zijlstra
2020-12-01 7:56 ` Peter Zijlstra
2020-12-01 19:45 ` Linus Torvalds
2020-12-02 7:53 ` Peter Zijlstra
2020-11-29 20:06 ` pr-tracker-bot
2020-11-29 20:06 ` [GIT pull] irq/urgent " pr-tracker-bot
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=20201202105228.GA6202@osiris \
--to=hca@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=svens@linux.ibm.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
/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 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).