| From 646306b269e717df9705c64b26d423e705eb5f1a Mon Sep 17 00:00:00 2001 |
| From: Helge Deller <deller@gmx.de> |
| Date: Sat, 28 Jan 2017 11:52:02 +0100 |
| Subject: [PATCH] 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> |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/parisc/include/asm/bitops.h b/arch/parisc/include/asm/bitops.h |
| index 3f9406d9b9d6..da87943328a5 100644 |
| --- 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 <asm/barrier.h> |
| #include <linux/atomic.h> |
| @@ -17,6 +17,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)) |
| |
| |
| diff --git a/arch/parisc/include/uapi/asm/bitsperlong.h b/arch/parisc/include/uapi/asm/bitsperlong.h |
| index e0a23c7bdd43..07fa7e50bdc0 100644 |
| --- a/arch/parisc/include/uapi/asm/bitsperlong.h |
| +++ b/arch/parisc/include/uapi/asm/bitsperlong.h |
| @@ -3,10 +3,8 @@ |
| |
| #if 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> |
| diff --git a/arch/parisc/include/uapi/asm/swab.h b/arch/parisc/include/uapi/asm/swab.h |
| index e78403b129ef..928e1bbac98f 100644 |
| --- a/arch/parisc/include/uapi/asm/swab.h |
| +++ b/arch/parisc/include/uapi/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 __arch_swab32(__u32 x) |
| } |
| #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 __arch_swab64(__u64 x) |
| return x; |
| } |
| #define __arch_swab64 __arch_swab64 |
| -#endif /* BITS_PER_LONG > 32 */ |
| +#endif /* __BITS_PER_LONG > 32 */ |
| |
| #endif /* _PARISC_SWAB_H */ |
| -- |
| 2.10.1 |
| |