Thread (20 messages) 20 messages, 6 authors, 2017-06-08

Re: CPU_BIG_ENDIAN in generic code (was: Re: [PATCH v3 3/7] arch/sparc: Define config parameter CPU_BIG_ENDIAN)

From: Arnd Bergmann <arnd@arndb.de>
Date: 2017-06-08 08:02:03
Also in: linux-arch, linux-serial, lkml, sparclinux

On Thu, Jun 8, 2017 at 1:07 AM, Babu Moger [off-list ref] wrote:
On 5/29/2017 9:56 PM, Michael Ellerman wrote:
quoted
Geert Uytterhoeven [off-list ref] writes:
quoted
Hi Michael,

On Mon, May 29, 2017 at 2:07 PM, Michael Ellerman [off-list ref]
wrote:
quoted
Geert Uytterhoeven [off-list ref] writes:
quoted
On Tue, May 23, 2017 at 11:45 PM, Babu Moger [off-list ref]
wrote:
quoted
quoted
So far we tried always doing that, but a few checks for the semi-existing
Kconfig symbol crept in in generic code. Those could be replaced by the
__*__
variants, but consistently having the Kconfig symbols would be useful
anyway
(e.g. to avoid building the broken-on-big-endian ISDN drivers).
Ah OK, the original mail was citing C code, but yeah I guess it would be
handy in Makefiles etc.

Thanks for all the responses.  I see couple of options here.

1. Fix the c code in include/asm-generic/qrwlock.h using ifdef
__BIG_ENDIAN__
    This will fix the issue for us.

2. Define CPU_BIG_ENDIAN for all the missing fixed endian architectures.
Because the problem is only for fixed big endian archs.

I prefer the option 1.  What do you guys think ?
I would prefer option 2. If we leave out CONFIG_CPU_LITTLE_ENDIAN,
then the patch becomes much easier than what we had discussed earlier,
and we just need to patch a few Kconfig files to add

config CPU_BIG_ENDIAN
       def_bool y

I would also suggest adding a sanity check like
diff --git a/include/linux/byteorder/big_endian.h
b/include/linux/byteorder/big_endian.h
index 392041475c72..18a1ab5b0260 100644
--- a/include/linux/byteorder/big_endian.h
+++ b/include/linux/byteorder/big_endian.h
@@ -3,5 +3,9 @@

 #include <uapi/linux/byteorder/big_endian.h>

+#ifndef CONFIG_CPU_BIG_ENDIAN
+#warning inconsistent configuration, need CONFIG_CPU_BIG_ENDIAN
+#endif
+
 #include <linux/byteorder/generic.h>
 #endif /* _LINUX_BYTEORDER_BIG_ENDIAN_H */
diff --git a/include/linux/byteorder/little_endian.h
b/include/linux/byteorder/little_endian.h
index 08057377aa23..ba910bb9aad0 100644
--- a/include/linux/byteorder/little_endian.h
+++ b/include/linux/byteorder/little_endian.h
@@ -3,5 +3,9 @@

 #include <uapi/linux/byteorder/little_endian.h>

+#ifdef CONFIG_CPU_BIG_ENDIAN
+#warning inconsistent configuration, CONFIG_CPU_BIG_ENDIAN is set
+#endif
+
 #include <linux/byteorder/generic.h>
 #endif /* _LINUX_BYTEORDER_LITTLE_ENDIAN_H */
Fixing xtensa properly might still be tricky, but with that change, at least
we detect when things go wrong in this area.

        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