The Linux kernel defines 64-bit values as 'long' rather than 'long long'
for user space applications on powerpc. Previously Lustre would assume
64-bit values were 'long long', which would cause compilation errors for
user space application when compiled on powerpc machines. This change
removes this assumption, correctly defining 64-bit types on powerpc.
Signed-off-by: Prakash Surya <surya1@llnl.gov>
Change-Id: I99f210e9402d3b2aea1a1ee5458b670387f65323
Reviewed-on: http://review.whamcloud.com/3127
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
typedef unsigned int __u32;
#endif
typedef unsigned int __u32;
#endif
+/*
+ * The kernel defines user space 64bit values as l64 on powerpc. We must
+ * match that definition to avoid conflicting definition compile errors.
+ */
+#if defined(__powerpc64__) && !defined(__KERNEL__)
+# ifndef HAVE___S64
+typedef __signed__ long __s64;
+# endif
+# ifndef HAVE___U64
+typedef unsigned long __u64;
+# endif
+#else /* !defined(__powerpc64__) || defined(__KERNEL__) */
+# ifndef HAVE___S64
typedef __signed__ long long __s64;
typedef __signed__ long long __s64;
-#endif
-#ifndef HAVE___U64
+# endif
+# ifndef HAVE___U64
typedef unsigned long long __u64;
typedef unsigned long long __u64;
#endif
/* long integer with size equal to pointer */
#endif
/* long integer with size equal to pointer */