summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
d61c552)
As it is currently designed, urcu scheme never overflows and we do not use the
upper "sign" bit. But, nevertheless, just in case we choose to do it differently
in the future, use an unsigned long type to allow:
- overflow
- defined used of 0x80000000
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
*/
#define RCU_GP_COUNT (1UL << 0)
/* Use the amount of bits equal to half of the architecture long size */
*/
#define RCU_GP_COUNT (1UL << 0)
/* Use the amount of bits equal to half of the architecture long size */
-#define RCU_GP_CTR_PHASE (1UL << (sizeof(long) << 2))
+#define RCU_GP_CTR_PHASE (1UL << (sizeof(unsigned long) << 2))
#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_PHASE - 1)
/*
#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_PHASE - 1)
/*
* 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 rcu_gp_ctr;
struct rcu_reader {
/* Data used by both reader and synchronize_rcu() */
struct rcu_reader {
/* Data used by both reader and synchronize_rcu() */
char need_mb;
/* Data used for registry */
struct list_head head __attribute__((aligned(CACHE_LINE_SIZE)));
char need_mb;
/* Data used for registry */
struct list_head head __attribute__((aligned(CACHE_LINE_SIZE)));
-static inline int rcu_old_gp_ongoing(long *value)
+static inline int rcu_old_gp_ongoing(unsigned long *value)
if (value == NULL)
return 0;
if (value == NULL)
return 0;
static inline void _rcu_read_lock(void)
{
static inline void _rcu_read_lock(void)
{
static inline void _rcu_read_unlock(void)
{
static inline void _rcu_read_unlock(void)
{
* Also has a RCU_GP_COUNT of 1, to accelerate the reader fast path.
* Written to only by writer with mutex taken. Read by both writer and readers.
*/
* Also has a RCU_GP_COUNT of 1, to accelerate the reader fast path.
* Written to only by writer with mutex taken. Read by both writer and readers.
*/
-long rcu_gp_ctr = RCU_GP_COUNT;
+unsigned long rcu_gp_ctr = RCU_GP_COUNT;
/*
* Written to only by each individual reader. Read by both the reader and the
/*
* Written to only by each individual reader. Read by both the reader and the