Message ID | 20130130200900.9d7cf7908caeaef4ecee1d61@freescale.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Jan 30, 2013 at 08:09:00PM -0600, Kim Phillips wrote: > diff --git a/arch/Kconfig b/arch/Kconfig > index 40e2b12..c8798b9 100644 > --- a/arch/Kconfig > +++ b/arch/Kconfig > @@ -141,6 +141,16 @@ config ARCH_USE_BUILTIN_BSWAP > instructions should set this. And it shouldn't hurt to set it > on architectures that don't have such instructions. > > +config ARCH_DEFINES_BUILTIN_BSWAP > + depends on ARCH_USE_BUILTIN_BSWAP > + bool > + help > + ARCH selects this when it wants to control HAVE_BUILTIN_BSWAPxx This is what threw me off: if ARCH selects this, I don't think we want to have a help text and the option be user visible? Normally such options are only bool and are selected automatically by hm.. ARCH, as you say above and do so below. :-) > + definitions over those in the generic compiler headers. It > + can be dependent on a combination of byte swapping instruction > + availability, the instruction set version, and the state > + of support in different compiler versions. > + > config HAVE_SYSCALL_WRAPPERS > bool > > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index 73027aa..b5868c2 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -57,6 +57,8 @@ config ARM > select CLONE_BACKWARDS > select OLD_SIGSUSPEND3 > select OLD_SIGACTION > + select ARCH_USE_BUILTIN_BSWAP > + select ARCH_DEFINES_BUILTIN_BSWAP > help Thanks.
On Wed, Jan 30, 2013 at 08:09:00PM -0600, Kim Phillips wrote: > The savings come mostly from device-tree related code, and some > from drivers. You forget that IP networking is all big endian, so these will be using the byte swapping too (search it for htons/ntohs/htonl/ntohl). > v2: > - at91 and lpd270 builds fixed by limiting to ARMv6 and above > (i.e., ARM cores that have support for the 'rev' instruction). > Otherwise, the compiler emits calls to libgcc's __bswapsi2 on > these ARMv4/v5 builds (and arch ARM doesn't link with libgcc). Which compiler version? gcc 4.5.4 doesn't do this, except for the 16-bit swap, so I doubt that any later compiler does. > --- a/arch/arm/include/uapi/asm/swab.h > +++ b/arch/arm/include/uapi/asm/swab.h > @@ -50,4 +50,14 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x) > > #endif > > +#if defined(__KERNEL__) && __LINUX_ARM_ARCH__ >= 6 > +#if GCC_VERSION >= 40600 > +#define __HAVE_BUILTIN_BSWAP32__ > +#define __HAVE_BUILTIN_BSWAP64__ > +#endif > +#if GCC_VERSION >= 40800 > +#define __HAVE_BUILTIN_BSWAP16__ > +#endif > +#endif If this is __KERNEL__ only, it should not be in a uapi header. UAPI headers get exported to userland, this is not userland interface code. IT should be in arch/arm/include/asm/swab.h
diff --git a/arch/Kconfig b/arch/Kconfig index 40e2b12..c8798b9 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -141,6 +141,16 @@ config ARCH_USE_BUILTIN_BSWAP instructions should set this. And it shouldn't hurt to set it on architectures that don't have such instructions. +config ARCH_DEFINES_BUILTIN_BSWAP + depends on ARCH_USE_BUILTIN_BSWAP + bool + help + ARCH selects this when it wants to control HAVE_BUILTIN_BSWAPxx + definitions over those in the generic compiler headers. It + can be dependent on a combination of byte swapping instruction + availability, the instruction set version, and the state + of support in different compiler versions. + config HAVE_SYSCALL_WRAPPERS bool diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 73027aa..b5868c2 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -57,6 +57,8 @@ config ARM select CLONE_BACKWARDS select OLD_SIGSUSPEND3 select OLD_SIGACTION + select ARCH_USE_BUILTIN_BSWAP + select ARCH_DEFINES_BUILTIN_BSWAP help The ARM series is a line of low-power-consumption RISC chip designs licensed by ARM Ltd and targeted at embedded applications and diff --git a/arch/arm/include/uapi/asm/swab.h b/arch/arm/include/uapi/asm/swab.h index 6fcb32a..5d86ed0 100644 --- a/arch/arm/include/uapi/asm/swab.h +++ b/arch/arm/include/uapi/asm/swab.h @@ -50,4 +50,14 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x) #endif +#if defined(__KERNEL__) && __LINUX_ARM_ARCH__ >= 6 +#if GCC_VERSION >= 40600 +#define __HAVE_BUILTIN_BSWAP32__ +#define __HAVE_BUILTIN_BSWAP64__ +#endif +#if GCC_VERSION >= 40800 +#define __HAVE_BUILTIN_BSWAP16__ +#endif +#endif + #endif /* _UAPI__ASM_ARM_SWAB_H */ diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h index 68b162d..fce39cb 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h @@ -66,7 +66,8 @@ #endif -#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP +#if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP) && \ + !defined(CONFIG_ARCH_DEFINES_BUILTIN_BSWAP) #if GCC_VERSION >= 40400 #define __HAVE_BUILTIN_BSWAP32__ #define __HAVE_BUILTIN_BSWAP64__