From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Will Deacon <will.deacon@arm.com>,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
Mike Frysinger <vapier@gentoo.org>
Subject: Re: [RESEND PATCH 2/4] asm-generic: io: don't perform swab during {in,out} string functions
Date: Thu, 18 Oct 2012 11:04:15 +1100 [thread overview]
Message-ID: <1350518655.4678.120.camel@pasglop> (raw)
In-Reply-To: <CAMuHMdXcQjDyen+o5aH=1zUOkNX-cfT3aXBOgCpyop=V67jk7w@mail.gmail.com>
On Wed, 2012-10-17 at 21:16 +0200, Geert Uytterhoeven wrote:
> On Wed, Oct 17, 2012 at 5:45 PM, Will Deacon <will.deacon@arm.com> wrote:
> > The {in,out}s{b,w,l} functions are designed to operate on a stream of
> > bytes and therefore should not perform any byte-swapping, regardless of
> > the CPU byte order.
>
> Euh?
Will is perfectly right :-)
> They transfer a stream of bytes between memory and PCI/ISA I/O space by
> reading from/writing to a single I/O port of width 8, 16, or 32 bits.
> On big endian machines, I/O port accesses may need to be swapped.
No. Not for streams. I suggest you watch the recording of my Plumbers
talk :-)
The sort story is that endianness is not a property of the IO port but
of the information that transit through it. If you're just going to copy
it into memory, you want to preserve it's format and so do not byteswap.
The byteswap we do on standard accessors is a "helper" because we assume
that underneath those IO ports are registers that are Little Endian. But
when using one as a window to a byte stream, we must not arbitrarily
swap the byte stream. We copy it as-is to memory, and then one can work
at interpreting the various fields that might or might not be present in
that stream with the appropriate accessors for memory accesses.
You will notice that all our stream IO functions are similarly
non-swapping on powerpc.
> > This patch fixes the generic IO header so that {in,out}s{b,w,l} call
> > the __raw_{read,write} functions directly rather than going via the
> > endian-correcting accessors.
>
> Furthermore __raw_*() has different semantics besides endianness, like
> ordering barriers. So you can't just change one for the other.
This is asm-generic. If you need barriers, implement your own. As far as
I can tell, Will is perfectly correct.
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cheers,
Ben.
> > Cc: Mike Frysinger <vapier@gentoo.org>
> > Cc: Ben Herrenschmidt <benh@kernel.crashing.org>
> > Acked-by: Arnd Bergmann <arnd@arndb.de>
> > Signed-off-by: Will Deacon <will.deacon@arm.com>
> > ---
> > include/asm-generic/io.h | 12 ++++++------
> > 1 files changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h
> > index 3607921..403b861 100644
> > --- a/include/asm-generic/io.h
> > +++ b/include/asm-generic/io.h
> > @@ -148,7 +148,7 @@ static inline void insb(unsigned long addr, void *buffer, int count)
>
> The "addr" parameter is actually a misnomer. Probably it should be "port".
> Oops, inb() and friends also use "addr".
>
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
next prev parent reply other threads:[~2012-10-18 0:04 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-17 15:45 [RESEND PATCH 0/4] Fix endianness of generic I/O accessors Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-17 15:45 ` [RESEND PATCH 1/4] asm-generic: io: remove {read,write} string functions Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-26 13:29 ` Arnd Bergmann
2012-10-26 13:38 ` Will Deacon
2012-10-26 13:38 ` Will Deacon
2012-10-17 15:45 ` [RESEND PATCH 2/4] asm-generic: io: don't perform swab during {in,out} " Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-17 19:16 ` Geert Uytterhoeven
2012-10-18 0:04 ` Benjamin Herrenschmidt [this message]
2012-10-18 5:48 ` Geert Uytterhoeven
2012-10-19 12:53 ` Will Deacon
2012-10-23 1:25 ` Benjamin Herrenschmidt
2012-10-23 1:25 ` Benjamin Herrenschmidt
2012-10-28 9:28 ` Geert Uytterhoeven
2012-10-28 20:38 ` Benjamin Herrenschmidt
2012-10-18 0:01 ` Benjamin Herrenschmidt
2012-10-17 15:45 ` [RESEND PATCH 3/4] mmc: mmci: use io{read,write}*_rep accessors instead of " Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-17 15:45 ` [RESEND PATCH 4/4] net: smc91x: " Will Deacon
2012-10-17 15:45 ` Will Deacon
2012-10-19 8:25 ` James Hogan
2012-10-19 8:25 ` James Hogan
2012-10-19 9:27 ` Will Deacon
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=1350518655.4678.120.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=geert@linux-m68k.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=vapier@gentoo.org \
--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).