Messages in this thread | | | From | Michael Ellerman <> | Subject | Re: CPU_BIG_ENDIAN in generic code (was: Re: [PATCH v3 3/7] arch/sparc: Define config parameter CPU_BIG_ENDIAN) | Date | Mon, 29 May 2017 22:07:41 +1000 |
| |
Geert Uytterhoeven <geert@linux-m68k.org> writes:
> On Tue, May 23, 2017 at 11:45 PM, Babu Moger <babu.moger@oracle.com> wrote: >> Found this problem while enabling queued rwlock on SPARC. >> The parameter CONFIG_CPU_BIG_ENDIAN is used to clear the >> specific byte in qrwlock structure. Without this parameter, >> we clear the wrong byte. Here is the code. >> >> static inline u8 *__qrwlock_write_byte(struct qrwlock *lock) >> { >> return (u8 *)lock + 3 * IS_BUILTIN(CONFIG_CPU_BIG_ENDIAN); >> } >> >> Define CPU_BIG_ENDIAN for SPARC to fix it. > >> --- a/arch/sparc/Kconfig >> +++ b/arch/sparc/Kconfig >> @@ -92,6 +92,10 @@ config ARCH_DEFCONFIG >> config ARCH_PROC_KCORE_TEXT >> def_bool y >> >> +config CPU_BIG_ENDIAN >> + bool >> + default y if SPARC > > Nice catch! > > Traditionally, CPU_BIG_ENDIAN and CPU_LITTLE_ENDIAN were defined only on > architectures that may support both. And it was checked in platform code > and drivers only. > Hence the symbol is lacking from most architectures. Heck, even > architectures that support both may default to one endiannes, and declare > only the symbol for the other endianness:
I guess there's a reason we can't use __BIG_ENDIAN__ / __LITTLE_ENDIAN__ ?
cheers
| |