projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: only define membarrier system call on Linux
[urcu.git]
/
urcu
/
arch
/
ppc.h
diff --git
a/urcu/arch/ppc.h
b/urcu/arch/ppc.h
index 95393ea0be0ee89b888c64ad53322e41e30631c8..791529ebb1a08ff3db124103474522b77bf0ad15 100644
(file)
--- a/
urcu/arch/ppc.h
+++ b/
urcu/arch/ppc.h
@@
-24,10
+24,12
@@
#include <urcu/compiler.h>
#include <urcu/config.h>
#include <urcu/compiler.h>
#include <urcu/config.h>
+#include <urcu/syscall-compat.h>
+#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#ifdef __cplusplus
extern "C" {
-#endif
+#endif
/* Include size of POWER5+ L3 cache lines: 256 bytes */
#define CAA_CACHE_LINE_SIZE 256
/* Include size of POWER5+ L3 cache lines: 256 bytes */
#define CAA_CACHE_LINE_SIZE 256
@@
-58,6
+60,7
@@
extern "C" {
#define cmm_smp_wmb() __asm__ __volatile__ (LWSYNC_OPCODE:::"memory")
#define mftbl() \
#define cmm_smp_wmb() __asm__ __volatile__ (LWSYNC_OPCODE:::"memory")
#define mftbl() \
+ __extension__ \
({ \
unsigned long rval; \
__asm__ __volatile__ ("mftbl %0" : "=r" (rval)); \
({ \
unsigned long rval; \
__asm__ __volatile__ ("mftbl %0" : "=r" (rval)); \
@@
-65,6
+68,7
@@
extern "C" {
})
#define mftbu() \
})
#define mftbu() \
+ __extension__ \
({ \
unsigned long rval; \
__asm__ __volatile__ ("mftbu %0" : "=r" (rval)); \
({ \
unsigned long rval; \
__asm__ __volatile__ ("mftbu %0" : "=r" (rval)); \
@@
-72,21
+76,24
@@
extern "C" {
})
#define mftb() \
})
#define mftb() \
+ __extension__ \
({ \
unsigned long long rval; \
__asm__ __volatile__ ("mftb %0" : "=r" (rval)); \
rval; \
})
({ \
unsigned long long rval; \
__asm__ __volatile__ ("mftb %0" : "=r" (rval)); \
rval; \
})
-typedef unsigned long long cycles_t;
+#define HAS_CAA_GET_CYCLES
+
+typedef uint64_t caa_cycles_t;
#ifdef __powerpc64__
#ifdef __powerpc64__
-static inline cycles_t caa_get_cycles(void)
+static inline c
aa_c
ycles_t caa_get_cycles(void)
{
{
- return (cycles_t) mftb();
+ return (c
aa_c
ycles_t) mftb();
}
#else
}
#else
-static inline cycles_t caa_get_cycles(void)
+static inline c
aa_c
ycles_t caa_get_cycles(void)
{
unsigned long h, l;
{
unsigned long h, l;
@@
-96,12
+103,20
@@
static inline cycles_t caa_get_cycles(void)
l = mftbl();
cmm_barrier();
if (mftbu() == h)
l = mftbl();
cmm_barrier();
if (mftbu() == h)
- return (((cycles_t) h) << 32) + l;
+ return (((c
aa_c
ycles_t) h) << 32) + l;
}
}
#endif
}
}
#endif
-#ifdef __cplusplus
+/*
+ * On Linux, define the membarrier system call number if not yet available in
+ * the system headers.
+ */
+#if (defined(__linux__) && !defined(__NR_membarrier))
+#define __NR_membarrier 365
+#endif
+
+#ifdef __cplusplus
}
#endif
}
#endif
This page took
0.02537 seconds
and
4
git commands to generate.