Whamcloud - gitweb
LU-1537 libcfs: 64-bit values are l64 on powerpc
authorPrakash Surya <surya1@llnl.gov>
Mon, 18 Jun 2012 18:31:20 +0000 (11:31 -0700)
committerOleg Drokin <green@whamcloud.com>
Wed, 3 Oct 2012 18:43:24 +0000 (14:43 -0400)
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>
libcfs/include/libcfs/posix/posix-types.h

index aa62e71..0f31ac2 100644 (file)
@@ -74,11 +74,24 @@ typedef __signed__ int __s32;
 typedef unsigned int __u32;
 #endif
 
-#ifndef HAVE___S64
+/*
+ * 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;
-#endif
-#ifndef HAVE___U64
+# endif
+# ifndef HAVE___U64
 typedef unsigned long long __u64;
+# endif
 #endif
 
 /* long integer with size equal to pointer */