[openib-general] get_lock.h on ia64 support
Michael S. Tsirkin
mst at mellanox.co.il
Mon Jan 9 09:28:07 PST 2006
Hi!
I was trying to build perftests on SLES9 SP1 (RC5).
I was getting compilation errors: apparently on this distribution
asm/timex.h includes all kind of kernel headers and
so is not fit to be used to build userspace apps.
I plan to check in the following patch to get us rid of this dependency
on asm/timex.h for PPC64 and IA64.
Note that get_cycles kernel function that we use just happens
to be incline, it could move out of line at any point, so
it might be a good idea to do this, regardless.
---
Multiple distributions have asm/timex.h that cant be used in userpace.
Lets just insert the inline assembly implementation as is.
Signed-off-by: Michael S. Tsirkin <mst at mellanox.co.il>
Index: openib/src/userspace/perftest/get_clock.h
===================================================================
--- openib/src/userspace/perftest/get_clock.h (revision 4692)
+++ openib/src/userspace/perftest/get_clock.h (working copy)
@@ -47,8 +47,9 @@ static inline cycles_t get_cycles()
val = (val << 32) | low;
return val;
}
-#elif defined(__PPC__)
+#elif defined(__PPC__) || || defined(__PPC64__)
/* Note: only PPC CPUs which have mftb instruction are supported. */
+/* PPC64 has mftb */
typedef unsigned long long cycles_t;
static inline cycles_t get_cycles()
{
@@ -57,10 +58,17 @@ static inline cycles_t get_cycles()
asm volatile ("mftb %0" : "=r" (ret) : );
return ret;
}
-#elif defined(__ia64__) || defined(__PPC64__)
+#elif defined(__ia64__)
/* Itanium2 and up has ar.itc (Itanium1 has errata) */
-/* PPC64 has mftb */
-#include <asm/timex.h>
+typedef unsigned long cycles_t;
+static inline cycles_t get_cycles()
+{
+ cycles_t ret;
+
+ asm volatile ("mov %0=ar.itc" : "=r" (ret) ::);
+ return ret;
+}
+
#else
#warning get_cycles not implemented for this architecture: attempt asm/timex.h
#include <asm/timex.h>
--
MST
More information about the general
mailing list