Commit 06ed1096 authored by Helge Deller's avatar Helge Deller Committed by Ben Hutchings

parisc: Don't use BITS_PER_LONG in userspace-exported swab.h header

commit 2ad5d52d 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: default avatarHelge Deller <deller@gmx.de>
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent e15d8e5a
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#endif #endif
#include <linux/compiler.h> #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/byteorder.h>
#include <asm/barrier.h> #include <asm/barrier.h>
#include <linux/atomic.h> #include <linux/atomic.h>
...@@ -17,6 +17,12 @@ ...@@ -17,6 +17,12 @@
* to include/asm-i386/bitops.h or kerneldoc * 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)) #define CHOP_SHIFTCOUNT(x) (((unsigned long) (x)) & (BITS_PER_LONG - 1))
......
...@@ -9,10 +9,8 @@ ...@@ -9,10 +9,8 @@
*/ */
#if (defined(__KERNEL__) && defined(CONFIG_64BIT)) || defined (__LP64__) #if (defined(__KERNEL__) && defined(CONFIG_64BIT)) || defined (__LP64__)
#define __BITS_PER_LONG 64 #define __BITS_PER_LONG 64
#define SHIFT_PER_LONG 6
#else #else
#define __BITS_PER_LONG 32 #define __BITS_PER_LONG 32
#define SHIFT_PER_LONG 5
#endif #endif
#include <asm-generic/bitsperlong.h> #include <asm-generic/bitsperlong.h>
......
#ifndef _PARISC_SWAB_H #ifndef _PARISC_SWAB_H
#define _PARISC_SWAB_H #define _PARISC_SWAB_H
#include <asm/bitsperlong.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/compiler.h> #include <linux/compiler.h>
...@@ -38,7 +39,7 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x) ...@@ -38,7 +39,7 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
} }
#define __arch_swab32 __arch_swab32 #define __arch_swab32 __arch_swab32
#if BITS_PER_LONG > 32 #if __BITS_PER_LONG > 32
/* /*
** From "PA-RISC 2.0 Architecture", HP Professional Books. ** From "PA-RISC 2.0 Architecture", HP Professional Books.
** See Appendix I page 8 , "Endian Byte Swapping". ** See Appendix I page 8 , "Endian Byte Swapping".
...@@ -61,6 +62,6 @@ static inline __attribute_const__ __u64 __arch_swab64(__u64 x) ...@@ -61,6 +62,6 @@ static inline __attribute_const__ __u64 __arch_swab64(__u64 x)
return x; return x;
} }
#define __arch_swab64 __arch_swab64 #define __arch_swab64 __arch_swab64
#endif /* BITS_PER_LONG > 32 */ #endif /* __BITS_PER_LONG > 32 */
#endif /* _PARISC_SWAB_H */ #endif /* _PARISC_SWAB_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment