projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Install missing arch_generic.h
[urcu.git]
/
urcu-qsbr-static.h
diff --git
a/urcu-qsbr-static.h
b/urcu-qsbr-static.h
index e49a04186104bbc2b3b769665a1fb6cb59fe7911..9f3a9b99f3c36ded7961cdeb3eadc102bba0f51d 100644
(file)
--- a/
urcu-qsbr-static.h
+++ b/
urcu-qsbr-static.h
@@
-43,6
+43,10
@@
#include <urcu/list.h>
#include <urcu/urcu-futex.h>
#include <urcu/list.h>
#include <urcu/urcu-futex.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* This code section can only be included in LGPL 2.1 compatible source code.
* See below for the function call wrappers which can be used in code meant to
/*
* This code section can only be included in LGPL 2.1 compatible source code.
* See below for the function call wrappers which can be used in code meant to
@@
-53,7
+57,7
@@
/*
* If a reader is really non-cooperative and refuses to commit its
/*
* If a reader is really non-cooperative and refuses to commit its
- *
u
rcu_reader.ctr count to memory (there is no barrier in the reader
+ * rcu_reader.ctr count to memory (there is no barrier in the reader
* per-se), kick it after a few loops waiting for it.
*/
#define KICK_READER_LOOPS 10000
* per-se), kick it after a few loops waiting for it.
*/
#define KICK_READER_LOOPS 10000
@@
-117,11
+121,6
@@
static inline void debug_yield_init(void)
}
#endif
}
#endif
-static inline void reader_barrier()
-{
- smp_mb();
-}
-
#define RCU_GP_ONLINE (1UL << 0)
#define RCU_GP_CTR (1UL << 1)
#define RCU_GP_ONLINE (1UL << 0)
#define RCU_GP_CTR (1UL << 1)
@@
-130,9
+129,9
@@
static inline void reader_barrier()
* Using a int rather than a char to eliminate false register dependencies
* causing stalls on some architectures.
*/
* Using a int rather than a char to eliminate false register dependencies
* causing stalls on some architectures.
*/
-extern unsigned long
u
rcu_gp_ctr;
+extern unsigned long rcu_gp_ctr;
-struct
u
rcu_reader {
+struct rcu_reader {
/* Data used by both reader and synchronize_rcu() */
unsigned long ctr;
/* Data used for registry */
/* Data used by both reader and synchronize_rcu() */
unsigned long ctr;
/* Data used for registry */
@@
-140,7
+139,7
@@
struct urcu_reader {
pthread_t tid;
};
pthread_t tid;
};
-extern struct
urcu_reader __thread u
rcu_reader;
+extern struct
rcu_reader __thread
rcu_reader;
extern int gp_futex;
extern int gp_futex;
@@
-157,30
+156,26
@@
static inline void wake_up_gp(void)
}
#if (BITS_PER_LONG < 64)
}
#if (BITS_PER_LONG < 64)
-static inline int rcu_gp_ongoing(unsigned long *
value
)
+static inline int rcu_gp_ongoing(unsigned long *
ctr
)
{
{
- unsigned long
reader_gp
;
+ unsigned long
v
;
- if (value == NULL)
- return 0;
- reader_gp = LOAD_SHARED(*value);
- return reader_gp && ((reader_gp ^ urcu_gp_ctr) & RCU_GP_CTR);
+ v = LOAD_SHARED(*ctr);
+ return v && ((v ^ rcu_gp_ctr) & RCU_GP_CTR);
}
#else /* !(BITS_PER_LONG < 64) */
}
#else /* !(BITS_PER_LONG < 64) */
-static inline int rcu_gp_ongoing(unsigned long *
value
)
+static inline int rcu_gp_ongoing(unsigned long *
ctr
)
{
{
- unsigned long
reader_gp
;
+ unsigned long
v
;
- if (value == NULL)
- return 0;
- reader_gp = LOAD_SHARED(*value);
- return reader_gp && (reader_gp - urcu_gp_ctr > ULONG_MAX / 2);
+ v = LOAD_SHARED(*ctr);
+ return v && (v - rcu_gp_ctr > ULONG_MAX / 2);
}
#endif /* !(BITS_PER_LONG < 64) */
static inline void _rcu_read_lock(void)
{
}
#endif /* !(BITS_PER_LONG < 64) */
static inline void _rcu_read_lock(void)
{
- rcu_assert(
u
rcu_reader.ctr);
+ rcu_assert(rcu_reader.ctr);
}
static inline void _rcu_read_unlock(void)
}
static inline void _rcu_read_unlock(void)
@@
-190,8
+185,8
@@
static inline void _rcu_read_unlock(void)
static inline void _rcu_quiescent_state(void)
{
smp_mb();
static inline void _rcu_quiescent_state(void)
{
smp_mb();
- _STORE_SHARED(
urcu_reader.ctr, _LOAD_SHARED(u
rcu_gp_ctr));
- smp_mb(); /* write
u
rcu_reader.ctr before read futex */
+ _STORE_SHARED(
rcu_reader.ctr, _LOAD_SHARED(
rcu_gp_ctr));
+ smp_mb(); /* write rcu_reader.ctr before read futex */
wake_up_gp();
smp_mb();
}
wake_up_gp();
smp_mb();
}
@@
-199,15
+194,19
@@
static inline void _rcu_quiescent_state(void)
static inline void _rcu_thread_offline(void)
{
smp_mb();
static inline void _rcu_thread_offline(void)
{
smp_mb();
- STORE_SHARED(
u
rcu_reader.ctr, 0);
- smp_mb(); /* write
u
rcu_reader.ctr before read futex */
+ STORE_SHARED(rcu_reader.ctr, 0);
+ smp_mb(); /* write rcu_reader.ctr before read futex */
wake_up_gp();
}
static inline void _rcu_thread_online(void)
{
wake_up_gp();
}
static inline void _rcu_thread_online(void)
{
- _STORE_SHARED(
urcu_reader.ctr, LOAD_SHARED(u
rcu_gp_ctr));
+ _STORE_SHARED(
rcu_reader.ctr, LOAD_SHARED(
rcu_gp_ctr));
smp_mb();
}
smp_mb();
}
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_QSBR_STATIC_H */
#endif /* _URCU_QSBR_STATIC_H */
This page took
0.024629 seconds
and
4
git commands to generate.