projects
/
userspace-rcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rename all memory primitives with prefix cmm_
[userspace-rcu.git]
/
urcu-static.h
diff --git
a/urcu-static.h
b/urcu-static.h
index 1eeb2e6b03319c313d051ef71a3148add48ff264..ad415ac7e86d5c686dc49ddb3f464ad8a24f8178 100644
(file)
--- a/
urcu-static.h
+++ b/
urcu-static.h
@@
-9,7
+9,7
@@
* TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu.h for linking
* dynamically with the userspace rcu library.
*
* TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu.h for linking
* dynamically with the userspace rcu library.
*
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@
polymtl.ca
>
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@
efficios.com
>
* Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
*
* This library is free software; you can redistribute it and/or
* Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
*
* This library is free software; you can redistribute it and/or
@@
-59,7
+59,7
@@
extern "C" {
# define MEMBARRIER_EXPEDITED (1 << 0)
# define MEMBARRIER_DELAYED (1 << 1)
# define MEMBARRIER_QUERY (1 << 16)
# define MEMBARRIER_EXPEDITED (1 << 0)
# define MEMBARRIER_DELAYED (1 << 1)
# define MEMBARRIER_QUERY (1 << 16)
-# define membarrier(...) syscall(
__NR
_membarrier, __VA_ARGS__)
+# define membarrier(...) syscall(
SYS
_membarrier, __VA_ARGS__)
#else
# undef RCU_MEMBARRIER
# define RCU_MB
#else
# undef RCU_MEMBARRIER
# define RCU_MB
@@
-181,23
+181,23
@@
extern int has_sys_membarrier;
static inline void smp_mb_slave(int group)
{
if (likely(has_sys_membarrier))
static inline void smp_mb_slave(int group)
{
if (likely(has_sys_membarrier))
- barrier();
+
cmm_
barrier();
else
else
- smp_mb();
+
cmm_
smp_mb();
}
#endif
#ifdef RCU_MB
static inline void smp_mb_slave(int group)
{
}
#endif
#ifdef RCU_MB
static inline void smp_mb_slave(int group)
{
- smp_mb();
+
cmm_
smp_mb();
}
#endif
#ifdef RCU_SIGNAL
static inline void smp_mb_slave(int group)
{
}
#endif
#ifdef RCU_SIGNAL
static inline void smp_mb_slave(int group)
{
- barrier();
+
cmm_
barrier();
}
#endif
}
#endif
@@
-222,7
+222,7
@@
struct rcu_reader {
unsigned long ctr;
char need_mb;
/* Data used for registry */
unsigned long ctr;
char need_mb;
/* Data used for registry */
- struct list_head
head
__attribute__((aligned(CACHE_LINE_SIZE)));
+ struct list_head
node
__attribute__((aligned(CACHE_LINE_SIZE)));
pthread_t tid;
};
pthread_t tid;
};
@@
-242,17
+242,15
@@
static inline void wake_up_gp(void)
}
}
}
}
-static inline int rcu_gp_ongoing(unsigned long *
value
)
+static inline int rcu_gp_ongoing(unsigned long *
ctr
)
{
unsigned long v;
{
unsigned long v;
- if (value == NULL)
- return 0;
/*
* Make sure both tests below are done on the same version of *value
* to insure consistency.
*/
/*
* Make sure both tests below are done on the same version of *value
* to insure consistency.
*/
- v = LOAD_SHARED(*
value
);
+ v = LOAD_SHARED(*
ctr
);
return (v & RCU_GP_CTR_NEST_MASK) &&
((v ^ rcu_gp_ctr) & RCU_GP_CTR_PHASE);
}
return (v & RCU_GP_CTR_NEST_MASK) &&
((v ^ rcu_gp_ctr) & RCU_GP_CTR_PHASE);
}
@@
-261,6
+259,7
@@
static inline void _rcu_read_lock(void)
{
unsigned long tmp;
{
unsigned long tmp;
+ cmm_barrier(); /* Ensure the compiler does not reorder us with mutex */
tmp = rcu_reader.ctr;
/*
* rcu_gp_ctr is
tmp = rcu_reader.ctr;
/*
* rcu_gp_ctr is
@@
-296,9
+295,10
@@
static inline void _rcu_read_unlock(void)
} else {
_STORE_SHARED(rcu_reader.ctr, rcu_reader.ctr - RCU_GP_COUNT);
}
} else {
_STORE_SHARED(rcu_reader.ctr, rcu_reader.ctr - RCU_GP_COUNT);
}
+ cmm_barrier(); /* Ensure the compiler does not reorder us with mutex */
}
}
-#ifdef __cplusplus
+#ifdef __cplusplus
}
#endif
}
#endif
This page took
0.024064 seconds
and
4
git commands to generate.