Thread (5 messages) 5 messages, 2 authors, 2016-01-25
STALE3796d

[PATCH 1/2] arm/mach-imx: use endian-safe readl/readw/writel/writew

From: arnd@arndb.de (Arnd Bergmann)
Date: 2016-01-24 21:28:46

On Sunday 24 January 2016 17:02:25 Johannes Berg wrote:
Instead of __raw_*, use *_relaxed. The conversion was done
using the following spatch (since that automatically adjusts
the coding style unlike a simple search&replace).

@@
expression E1, E2;
@@
-__raw_writel(E1, E2)
+writel_relaxed(E1, E2)
@@
expression E1, E2;
@@
-__raw_writew(E1, E2)
+writew_relaxed(E1, E2)
@@
expression E1;
@@
-__raw_readl(E1)
+readl_relaxed(E1)
@@
expression E1;
@@
-__raw_readw(E1)
+readw_relaxed(E1)

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
(Adding Shawn and Sascha here as well)

The patch looks fine to me, in the sense that we can safely assume
that the behavior won't change for little-endian, and that it is
fixing a bug for big-endian.

I would feel more comfortable with a patch using the non-relaxed()
accessors though, as that can avoid a number of subtle bugs with
I/O ordering.

Unfortunately, there is a nonzero overhead in the extra cache sync
on the Cortex-A9 based platforms (most imx6), so this has to
be done very carefully to avoid performance regressions. It's
probably a good idea to keep the two changes as separate commits,
but I'd also like to get both applied in the same merge window,
as 'readl_relaxed' tends to say "I have proven that I don't need
barriers", while the existing code just screams "I have no idea
about what I'm doing here".

Any other opinions on this?

	Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help