From: Segher Boessenkool <segher@kernel.crashing.org>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
maged michael <maged.michael@gmail.com>,
Peter Zijlstra <peterz@infradead.org>,
Dave Watson <davejwatson@fb.com>,
Will Deacon <will.deacon@arm.com>, Andrew Hunter <ahh@google.com>,
David Sehr <sehr@google.com>, Paul Mackerras <paulus@samba.org>,
"H. Peter Anvin" <hpa@zytor.com>,
linux-arch <linux-arch@vger.kernel.org>, x86 <x86@kernel.org>,
"Russell King, ARM Linux" <linux@armlinux.org.uk>,
Greg Hackmann <ghackmann@google.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Ingo Molnar <mingo@redhat.com>,
Alan Stern <stern@rowland.harvard.edu>,
Paul <paulmck@linux.vnet.ibm.com>,
Andrea Parri <parri.andrea@gmail.com>,
Avi Kivity <avi@scylladb.com>, Boqun Feng <boqun.feng@gmail.com>,
Nicholas Piggin <npiggin@gmail.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Andy Lutomirski <luto@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-api <linux-api@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
linuxppc-dev <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH for 4.16 v7 02/11] powerpc: membarrier: Skip memory barrier in switch_mm()
Date: Mon, 21 Jun 2021 19:15:34 -0500 [thread overview]
Message-ID: <20210622001534.GC5077@gate.crashing.org> (raw)
In-Reply-To: <52451ce4-3eb2-e14b-81a9-99da2c0a2328@csgroup.eu>
Hi!
On Mon, Jun 21, 2021 at 04:11:04PM +0200, Christophe Leroy wrote:
> Le 19/06/2021 à 17:02, Segher Boessenkool a écrit :
> >The point of the twi in the I/O accessors was to make things easier to
> >debug if the accesses fail: for the twi insn to complete the load will
> >have to have completed as well. On a correctly working system you never
> >should need this (until something fails ;-) )
> >
> >Without the twi you might need to enforce ordering in some cases still.
> >The twi is a very heavy hammer, but some of that that gives us is no
> >doubt actually needed.
>
> Well, I've always been quite perplex about that. According to the
> documentation of the 8xx, if a bus error or something happens on an I/O
> access, the exception will be accounted on the instruction which does the
> access. But based on the following function, I understand that some version
> of powerpc do generate the trap on the instruction which was being executed
> at the time the I/O access failed, not the instruction that does the access
> itself ?
Trap instructions are never speculated (this may not be architectural,
but it is true on all existing implementations). So the instructions
after the twi;isync will not execute until the twi itself has finished,
and that cannot happen before the preceding load has (because it uses
the loaded register).
Now, some I/O accesses can cause machine checks. Machine checks are
asynchronous and can be hard to correlate to specific load insns, and
worse, you may not even have the address loaded from in architected
registers anymore. Since I/O accesses often take *long*, tens or even
hundreds of cycles is not unusual, this can be a challenge.
To recover from machine checks you typically need special debug hardware
and/or software. For the Apple machines those are not so easy to come
by. This "twi after loads" thing made it pretty easy to figure out
where your code was going wrong.
And it isn't as slow as it may sound: typically you really need to have
the result of the load before you can go on do useful work anyway, and
loads from I/O are slow non-posted things.
> /*
> * I/O accesses can cause machine checks on powermacs.
> * Check if the NIP corresponds to the address of a sync
> * instruction for which there is an entry in the exception
> * table.
> * -- paulus.
> */
I suspect this is from before the twi thing was added?
> It is not only the twi which bother's me in the I/O accessors but also the
> sync/isync and stuff.
>
> A write typically is
>
> sync
> stw
>
> A read is
>
> sync
> lwz
> twi
> isync
>
> Taking into account that HW ordering is garanteed by the fact that __iomem
> is guarded,
Yes. But machine checks are asynchronous :-)
> isn't the 'memory' clobber enough as a barrier ?
A "memory" clobber isn't a barrier of any kind. "Compiler barriers" do
not exist.
The only thing such a clobber does is it tells the compiler that this
inline asm can access some memory, and we do not say at what address.
So the compiler cannot reorder this asm with other memory accesses. It
has no other effects, no magical effects, and it is not comparable to
actual barrier instructions (that actually tell the hardware that some
certain ordering is required).
"Compiler barrier" is a harmful misnomer: language shapes thoughts,
using misleading names causes misguided thoughts.
Anyway :-)
The isync is simply to make sure the code after it does not start before
the code before it has completed. The sync before I am not sure.
Segher
next prev parent reply other threads:[~2021-06-22 0:30 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-29 20:20 [PATCH for 4.16 00/11] membarrier updates for 4.16 Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v2 01/11] membarrier: selftest: Test private expedited cmd Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v7 02/11] powerpc: membarrier: Skip memory barrier in switch_mm() Mathieu Desnoyers
2018-02-05 20:22 ` Ingo Molnar
[not found] ` <20180205202242.6ilyjh35byycf3ez-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-02-05 20:32 ` Mathieu Desnoyers
2021-06-18 17:13 ` Christophe Leroy
2021-06-18 17:26 ` Mathieu Desnoyers
2021-06-19 9:35 ` Christophe Leroy
2021-06-19 15:02 ` Segher Boessenkool
2021-06-21 14:11 ` Christophe Leroy
2021-06-22 0:15 ` Segher Boessenkool [this message]
2018-01-29 20:20 ` [PATCH for 4.16 v5 03/11] membarrier: Document scheduler barrier requirements Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v2 05/11] membarrier: selftest: Test global expedited cmd Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v2 06/11] Introduce sync_core_before_usermode Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v3 07/11] x86: Implement sync_core_before_usermode Mathieu Desnoyers
[not found] ` <20180129202020.8515-1-mathieu.desnoyers-vg+e7yoeK/dWk0Htik3J/w@public.gmane.org>
2018-01-29 20:20 ` [PATCH for 4.16 v3 04/11] membarrier: provide GLOBAL_EXPEDITED command Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v3 08/11] membarrier: Provide core serializing command Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 11/11] membarrier: selftest: Test private expedited sync core cmd Mathieu Desnoyers
2018-02-05 21:21 ` [PATCH for 4.16 00/11] membarrier updates for 4.16 Ingo Molnar
2018-01-29 20:20 ` [PATCH for 4.16 v4 09/11] membarrier: x86: Provide core serializing command Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 10/11] membarrier: arm64: " Mathieu Desnoyers
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=20210622001534.GC5077@gate.crashing.org \
--to=segher@kernel.crashing.org \
--cc=ahh@google.com \
--cc=avi@scylladb.com \
--cc=boqun.feng@gmail.com \
--cc=christophe.leroy@csgroup.eu \
--cc=davejwatson@fb.com \
--cc=ghackmann@google.com \
--cc=hpa@zytor.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=luto@kernel.org \
--cc=maged.michael@gmail.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@redhat.com \
--cc=npiggin@gmail.com \
--cc=parri.andrea@gmail.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=sehr@google.com \
--cc=stern@rowland.harvard.edu \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
--cc=will.deacon@arm.com \
--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).