From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: io: avoid writeback addressing modes for __raw_ accessors
Date: Mon, 20 Aug 2012 17:54:05 +0100 [thread overview]
Message-ID: <20120820165405.GU25864@mudshark.cambridge.arm.com> (raw)
In-Reply-To: <alpine.LFD.2.02.1208201150010.1754@xanadu.home>
On Mon, Aug 20, 2012 at 05:09:06PM +0100, Nicolas Pitre wrote:
> On Mon, 20 Aug 2012, Will Deacon wrote:
> > diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
> > index b54d687..bbc94c2 100644
> > --- a/arch/arm/include/asm/io.h
> > +++ b/arch/arm/include/asm/io.h
> > @@ -63,38 +63,50 @@ extern void __raw_readsl(const void __iomem *addr, void *data, int longlen);
> > */
> > static inline void __raw_writew(u16 val, volatile void __iomem *addr)
> > {
> > - asm volatile("strh %0, [%1]" : : "r" (val), "r" (addr));
> > + asm volatile("strh %1, %0"
> > + : "=Qo" (*(volatile u16 __force *)addr)
> > + : "r" (val));
> > }
> >
> > static inline u16 __raw_readw(const volatile void __iomem *addr)
> > {
> > u16 val;
> > - asm volatile("ldrh %0, [%1]" : "=r" (val) : "r" (addr));
> > + asm volatile("ldrh %0, %1"
> > + : "=r" (val)
> > + : "Qo" (*(const volatile u16 __force *)addr));
> > return val;
> > }
>
> Semantically, I think the qualifier on the Qo constraint should be + as
> in "+Qo" listed in the input operand list in both cases since we may not
> assume anything about the memory location when it is referring to IO
> registers. It is not because you write to it that previous writes can
> be optimized away, and it is not because you read from it that the
> accessed memory location will remain the same after the read. Granted,
> the volatile should take care of that, but it doesn't hurt to be
> explicit.
Hmm, ok. I too would hope that the volatile keyword would sort that out but,
since the '+' doesn't seem to change the generated code, I can add that. It
does, however, mean we have to cast away the `const' in the read accessors
which makes the code even uglier.
> Reviewed-by: Nicolas Pitre <nico@linaro.org>
Cheers Nicolas, I'll post the patch independently with your tag.
Will
next prev parent reply other threads:[~2012-08-20 16:54 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-14 14:59 [PATCH] ARM: io: avoid writeback addressing modes for __raw_ accessors Will Deacon
2012-08-17 3:43 ` Nicolas Pitre
2012-08-20 12:41 ` Will Deacon
2012-08-20 13:29 ` Nicolas Pitre
2012-08-20 14:49 ` Will Deacon
2012-08-20 16:09 ` Nicolas Pitre
2012-08-20 16:54 ` Will Deacon [this message]
2012-08-20 18:04 ` Nicolas Pitre
2012-08-20 18:10 ` Will Deacon
2012-08-20 18:45 ` Nicolas Pitre
2012-08-21 9:02 ` Will Deacon
2012-08-21 10:11 ` Arnd Bergmann
2012-08-21 12:33 ` Nicolas Pitre
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=20120820165405.GU25864@mudshark.cambridge.arm.com \
--to=will.deacon@arm.com \
--cc=linux-arm-kernel@lists.infradead.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).