projects
/
userspace-rcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rcuja: 2d distribution sum improvement
[userspace-rcu.git]
/
urcu
/
rculist.h
diff --git
a/urcu/rculist.h
b/urcu/rculist.h
index 575e1fb0d8f4f836166695f80b732898d8c0265a..e67503d9431d5da5d68d8f0a888613b1cebe2395 100644
(file)
--- a/
urcu/rculist.h
+++ b/
urcu/rculist.h
@@
-33,11
+33,12
@@
*/
static inline void cds_list_add_rcu(struct cds_list_head *newp, struct cds_list_head *head)
{
*/
static inline void cds_list_add_rcu(struct cds_list_head *newp, struct cds_list_head *head)
{
- newp->next = head->next;
+ struct cds_list_head *first = head->next;
+
+ newp->next = first;
newp->prev = head;
newp->prev = head;
- cmm_smp_wmb();
- head->next->prev = newp;
- head->next = newp;
+ rcu_assign_pointer(head->next, newp);
+ first->prev = newp;
}
/* replace an old entry atomically.
}
/* replace an old entry atomically.
@@
-54,7
+55,7
@@
static inline void cds_list_replace_rcu(struct cds_list_head *old, struct cds_li
static inline void cds_list_del_rcu(struct cds_list_head *elem)
{
elem->next->prev = elem->prev;
static inline void cds_list_del_rcu(struct cds_list_head *elem)
{
elem->next->prev = elem->prev;
-
elem->prev->next = elem->next
;
+
CMM_STORE_SHARED(elem->prev->next, elem->next)
;
}
/*
}
/*
@@
-71,8
+72,8
@@
static inline void cds_list_del_rcu(struct cds_list_head *elem)
/* Iterate through elements of the list.
*/
#define cds_list_for_each_entry_rcu(pos, head, member) \
/* Iterate through elements of the list.
*/
#define cds_list_for_each_entry_rcu(pos, head, member) \
- for (pos = cds_list_entry(rcu_dereference((head)->next),
typeof(*pos), member);
\
+ for (pos = cds_list_entry(rcu_dereference((head)->next),
__typeof__(*pos), member);
\
&pos->member != (head); \
&pos->member != (head); \
- pos = cds_list_entry(rcu_dereference(pos->member.next),
typeof
(*pos), member))
+ pos = cds_list_entry(rcu_dereference(pos->member.next),
__typeof__
(*pos), member))
#endif /* _URCU_RCULIST_H */
#endif /* _URCU_RCULIST_H */
This page took
0.024861 seconds
and
4
git commands to generate.