From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Sinan Kaya <okaya@codeaurora.org>, Oliver <oohall@gmail.com>
Cc: linuxppc dev list <linuxppc-dev@lists.ozlabs.org>,
"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>,
Marc Zyngier <marc.zyngier@arm.com>,
Will Deacon <will.deacon@arm.com>
Subject: Re: RFC on writel and writel_relaxed
Date: Sat, 24 Mar 2018 12:22:50 +1100 [thread overview]
Message-ID: <1521854570.16434.358.camel@kernel.crashing.org> (raw)
In-Reply-To: <9c7d3d35-ddaf-60ee-1430-19b5c3f66813@codeaurora.org>
On Fri, 2018-03-23 at 09:42 -0400, Sinan Kaya wrote:
> On 3/22/2018 8:16 PM, Benjamin Herrenschmidt wrote:
> > On Thu, 2018-03-22 at 12:51 -0500, Sinan Kaya wrote:
> > > On 3/22/2018 8:52 AM, Benjamin Herrenschmidt wrote:
> > > > > > No, it's not sufficient.
> > > >
> > > > Just to clarify ... barrier() is just a compiler barrier, it means the
> > > > compiler will generate things in the order they are written. This isn't
> > > > sufficient on archs with an OO memory model, where an actual memory
> > > > barrier instruction needs to be emited.
> > >
> > > Surprisingly, ARM64 GCC compiler generates a write barrier as
> > > opposed to preventing code reordering.
> > >
> > > I was curious if this is an ARM only thing or not.
> >
> > Are you sure of that ? I thought it's the ARM implementation of writel
> > that had an explicit write barrier in it:
>
> Yes, I'm %100 sure. The answer is both writel() and barrier() generates
> a write barrier instruction. I found this by searching the kernel disassembly
> for back to back "dsb st" instruction.
I'm not sure you are correct here. As I wrote below, the implementatoin
of writel() contains an *explicit" memory barrier which is completely
different to a barrier() instruction:
>
> > #define writel(v,c) ({ __iowmb(); writel_relaxed((v),(c)); })
> >
> > And __iowmb() is
> >
> > #define __iowmb() wmb()
> >
> > Note, I'm a bit dubious about this in ARM:
> >
> > #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }
> >
> > Will, Marc, on powerpc, we put a sync *before* the read in readl etc...
> >
> > The reasoning was there could be some DMA setup followed by a side
> > effect readl rather than a side effect writel to trigger a DMA. Granted
> > I wouldn't expect modern devices to be that stupid, but I have vague
> > memory of some devices back in the day having that sort of read ops.
> >
> > In general, I though the model offerred by x86 and thus by Linux
> > readl/writel was full synchronization both before and after the MMIO,
> > vs either other MMIO or all other forms of ops (cachable memory, locks
> > etc...).
> >
> > Also, can't the above readl_relaxed leak out of a lock ?
>
> I think you are asking about PPC, correct?
No, I'm asking about ARM.
> I read somewhere that PPC implementation keeps track of MMIO accesses and
> has an implicit barrier inside the spin_unlock() code for such accesses.
> Isn't this true?
Yes, I wrote that code :-) We keep track of writes and put an implicit
stronger barrier in unlock on ppc64 because drivers never get mmiowb
right.
Cheers,
Ben.
> >
> > Cheers,
> > Ben.
> >
> >
>
>
next prev parent reply other threads:[~2018-03-24 1:23 UTC|newest]
Thread overview: 129+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-21 3:07 RFC on writel and writel_relaxed Sinan Kaya
2018-03-21 3:40 ` Oliver
2018-03-21 13:53 ` Sinan Kaya
2018-03-21 13:58 ` Sinan Kaya
2018-03-26 13:43 ` Arnd Bergmann
2018-03-26 16:00 ` Sinan Kaya
2018-03-21 14:35 ` David Laight
2018-03-21 15:04 ` Sinan Kaya
2018-03-22 5:24 ` Oliver
2018-03-22 8:20 ` Gabriel Paubert
2018-03-22 9:25 ` Oliver
2018-03-22 11:25 ` Gabriel Paubert
2018-03-22 10:37 ` David Laight
2018-03-22 4:24 ` Benjamin Herrenschmidt
2018-03-22 10:15 ` Oliver
2018-03-22 13:52 ` Benjamin Herrenschmidt
2018-03-22 17:51 ` Sinan Kaya
2018-03-23 0:16 ` Benjamin Herrenschmidt
2018-03-23 13:42 ` Sinan Kaya
2018-03-24 1:22 ` Benjamin Herrenschmidt [this message]
2018-03-24 15:06 ` Sinan Kaya
2018-03-26 11:44 ` Will Deacon
2018-03-26 12:11 ` okaya
2018-03-26 12:42 ` Sinan Kaya
2018-03-23 16:35 ` Jason Gunthorpe
2018-03-24 1:23 ` Benjamin Herrenschmidt
2018-03-26 11:08 ` David Laight
2018-03-26 16:54 ` Jason Gunthorpe
2018-03-26 19:44 ` Arnd Bergmann
2018-03-26 20:25 ` Jason Gunthorpe
2018-03-26 20:43 ` Arnd Bergmann
2018-03-26 21:09 ` Jason Gunthorpe
2018-03-26 21:30 ` Arnd Bergmann
2018-03-26 21:46 ` Sinan Kaya
2018-03-26 22:01 ` Benjamin Herrenschmidt
2018-03-26 22:08 ` Sinan Kaya
2018-03-26 22:28 ` Benjamin Herrenschmidt
2018-03-26 22:27 ` Jason Gunthorpe
2018-03-26 22:36 ` Benjamin Herrenschmidt
2018-03-26 22:42 ` Benjamin Herrenschmidt
2018-03-26 22:50 ` Jason Gunthorpe
2018-03-26 23:59 ` Benjamin Herrenschmidt
2018-03-27 1:39 ` Jason Gunthorpe
2018-03-27 7:56 ` Arnd Bergmann
2018-03-27 8:56 ` Benjamin Herrenschmidt
2018-03-27 9:44 ` Arnd Bergmann
2018-03-27 10:00 ` Will Deacon
2018-03-27 11:23 ` Benjamin Herrenschmidt
2018-03-27 12:22 ` okaya
2018-03-27 14:12 ` Jason Gunthorpe
2018-03-27 21:27 ` Benjamin Herrenschmidt
2018-03-27 9:57 ` Will Deacon
2018-03-27 10:05 ` Arnd Bergmann
2018-03-27 10:09 ` Will Deacon
2018-03-27 10:53 ` Arnd Bergmann
2018-03-27 11:02 ` Will Deacon
2018-03-27 11:05 ` Arnd Bergmann
2018-03-27 11:25 ` Benjamin Herrenschmidt
2018-03-27 13:20 ` David Laight
2018-03-27 13:46 ` Sinan Kaya
2018-03-27 14:36 ` Will Deacon
2018-03-27 21:29 ` Benjamin Herrenschmidt
2018-03-28 8:53 ` Will Deacon
2018-03-28 9:00 ` David Laight
2018-03-28 9:09 ` Will Deacon
2018-03-28 9:56 ` Benjamin Herrenschmidt
2018-03-28 9:50 ` Benjamin Herrenschmidt
2018-03-28 9:55 ` Arnd Bergmann
2018-03-28 10:01 ` Benjamin Herrenschmidt
2018-03-28 10:13 ` Will Deacon
2018-03-28 16:57 ` Jason Gunthorpe
2018-03-29 9:19 ` Will Deacon
2018-03-29 14:45 ` Jason Gunthorpe
2018-03-29 14:58 ` David Laight
2018-03-29 16:40 ` Jason Gunthorpe
2018-03-27 21:24 ` Benjamin Herrenschmidt
2018-03-27 11:21 ` Benjamin Herrenschmidt
2018-03-27 9:42 ` Will Deacon
2018-03-27 11:20 ` Benjamin Herrenschmidt
2018-03-27 11:24 ` Will Deacon
2018-03-27 14:24 ` Jason Gunthorpe
2018-03-27 14:16 ` Jason Gunthorpe
2018-03-26 22:00 ` Benjamin Herrenschmidt
2018-03-27 14:46 ` Sinan Kaya
2018-03-27 15:01 ` Jose Abreu
2018-03-27 15:10 ` Will Deacon
2018-03-27 18:54 ` Alexander Duyck
2018-03-27 19:54 ` Arnd Bergmann
2018-03-27 20:46 ` Arnd Bergmann
2018-03-27 21:33 ` Benjamin Herrenschmidt
2018-03-28 0:39 ` Linus Torvalds
2018-03-28 1:03 ` Benjamin Herrenschmidt
2018-03-28 2:51 ` Linus Torvalds
2018-03-28 3:24 ` Sinan Kaya
2018-03-28 4:41 ` Benjamin Herrenschmidt
2018-03-28 6:14 ` Linus Torvalds
2018-03-28 11:41 ` okaya
2018-03-28 15:13 ` Benjamin Herrenschmidt
2018-03-28 15:55 ` David Miller
2018-03-28 16:23 ` Nicholas Piggin
2018-03-28 21:31 ` Benjamin Herrenschmidt
2018-03-28 22:09 ` Nicholas Piggin
2018-03-29 9:20 ` Will Deacon
2018-03-29 13:56 ` Sinan Kaya
2018-03-29 14:04 ` David Miller
2018-03-29 16:29 ` Arnd Bergmann
2018-03-29 16:59 ` Sinan Kaya
2018-03-30 1:40 ` Benjamin Herrenschmidt
2018-04-02 13:01 ` Sinan Kaya
2018-03-28 4:33 ` Benjamin Herrenschmidt
2018-03-28 6:26 ` Linus Torvalds
2018-03-28 6:42 ` Benjamin Herrenschmidt
2018-03-28 6:53 ` Linus Torvalds
2018-03-28 6:56 ` Benjamin Herrenschmidt
2018-03-28 7:11 ` Arnd Bergmann
2018-03-28 7:42 ` Benjamin Herrenschmidt
2018-03-28 9:07 ` Will Deacon
2018-03-28 9:56 ` Benjamin Herrenschmidt
2018-03-28 10:13 ` Aw: " Lino Sanfilippo
2018-03-28 10:20 ` Benjamin Herrenschmidt
2018-03-28 11:30 ` David Laight
2018-03-28 15:12 ` Benjamin Herrenschmidt
2018-03-28 16:16 ` David Laight
2018-03-28 1:21 ` Benjamin Herrenschmidt
2018-03-27 21:35 ` Benjamin Herrenschmidt
2018-03-26 21:26 ` Benjamin Herrenschmidt
-- strict thread matches above, loose matches on Subject: below --
2018-03-27 21:54 Alexander Duyck
2018-03-27 22:35 ` Sinan Kaya
2018-03-27 23:43 ` Benjamin Herrenschmidt
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=1521854570.16434.358.camel@kernel.crashing.org \
--to=benh@kernel.crashing.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=marc.zyngier@arm.com \
--cc=okaya@codeaurora.org \
--cc=oohall@gmail.com \
--cc=will.deacon@arm.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 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).