| From: Helge Deller <deller@gmx.de> |
| Date: Sat, 28 Jan 2017 11:52:02 +0100 |
| Subject: parisc: Don't use BITS_PER_LONG in userspace-exported swab.h header |
| |
| commit 2ad5d52d42810bed95100a3d912679d8864421ec upstream. |
| |
| In swab.h the "#if BITS_PER_LONG > 32" breaks compiling userspace programs if |
| BITS_PER_LONG is #defined by userspace with the sizeof() compiler builtin. |
| |
| Solve this problem by using __BITS_PER_LONG instead. Since we now |
| #include asm/bitsperlong.h avoid further potential userspace pollution |
| by moving the #define of SHIFT_PER_LONG to bitops.h which is not |
| exported to userspace. |
| |
| This patch unbreaks compiling qemu on hppa/parisc. |
| |
| Signed-off-by: Helge Deller <deller@gmx.de> |
| [bwh: Backported to 3.2: adjust filenames] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| arch/parisc/include/asm/bitops.h | 8 +++++++- |
| arch/parisc/include/asm/bitsperlong.h | 2 -- |
| arch/parisc/include/asm/swab.h | 5 +++-- |
| 3 files changed, 10 insertions(+), 5 deletions(-) |
| |
| --- a/arch/parisc/include/asm/bitops.h |
| +++ b/arch/parisc/include/asm/bitops.h |
| @@ -6,7 +6,7 @@ |
| #endif |
| |
| #include <linux/compiler.h> |
| -#include <asm/types.h> /* for BITS_PER_LONG/SHIFT_PER_LONG */ |
| +#include <asm/types.h> |
| #include <asm/byteorder.h> |
| #include <linux/atomic.h> |
| |
| @@ -16,6 +16,12 @@ |
| * to include/asm-i386/bitops.h or kerneldoc |
| */ |
| |
| +#if __BITS_PER_LONG == 64 |
| +#define SHIFT_PER_LONG 6 |
| +#else |
| +#define SHIFT_PER_LONG 5 |
| +#endif |
| + |
| #define CHOP_SHIFTCOUNT(x) (((unsigned long) (x)) & (BITS_PER_LONG - 1)) |
| |
| |
| --- a/arch/parisc/include/asm/bitsperlong.h |
| +++ b/arch/parisc/include/asm/bitsperlong.h |
| @@ -9,10 +9,8 @@ |
| */ |
| #if (defined(__KERNEL__) && defined(CONFIG_64BIT)) || defined (__LP64__) |
| #define __BITS_PER_LONG 64 |
| -#define SHIFT_PER_LONG 6 |
| #else |
| #define __BITS_PER_LONG 32 |
| -#define SHIFT_PER_LONG 5 |
| #endif |
| |
| #include <asm-generic/bitsperlong.h> |
| --- a/arch/parisc/include/asm/swab.h |
| +++ b/arch/parisc/include/asm/swab.h |
| @@ -1,6 +1,7 @@ |
| #ifndef _PARISC_SWAB_H |
| #define _PARISC_SWAB_H |
| |
| +#include <asm/bitsperlong.h> |
| #include <linux/types.h> |
| #include <linux/compiler.h> |
| |
| @@ -38,7 +39,7 @@ static inline __attribute_const__ __u32 |
| } |
| #define __arch_swab32 __arch_swab32 |
| |
| -#if BITS_PER_LONG > 32 |
| +#if __BITS_PER_LONG > 32 |
| /* |
| ** From "PA-RISC 2.0 Architecture", HP Professional Books. |
| ** See Appendix I page 8 , "Endian Byte Swapping". |
| @@ -61,6 +62,6 @@ static inline __attribute_const__ __u64 |
| return x; |
| } |
| #define __arch_swab64 __arch_swab64 |
| -#endif /* BITS_PER_LONG > 32 */ |
| +#endif /* __BITS_PER_LONG > 32 */ |
| |
| #endif /* _PARISC_SWAB_H */ |