summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
4a2f213)
Be nicer to grace-periods.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
void rcu_lfs_push(struct rcu_lfs_stack *s, struct rcu_lfs_node *node)
{
void rcu_lfs_push(struct rcu_lfs_stack *s, struct rcu_lfs_node *node)
{
- struct rcu_lfs_node *head = rcu_dereference(s->head);
+ struct rcu_lfs_node *head;
+ rcu_read_lock();
+ head = rcu_dereference(s->head);
node->next = head;
/*
* uatomic_cmpxchg() implicit memory barrier orders earlier
node->next = head;
/*
* uatomic_cmpxchg() implicit memory barrier orders earlier
return;
} else {
/* Failure to prepend. Retry. */
return;
} else {
/* Failure to prepend. Retry. */
struct rcu_lfs_node *
rcu_lfs_pop(struct rcu_lfs_stack *s)
{
struct rcu_lfs_node *
rcu_lfs_pop(struct rcu_lfs_stack *s)
{
- struct rcu_lfs_node *head = rcu_dereference(s->head);
+ struct rcu_lfs_node *head;
+ rcu_read_lock();
+ head = rcu_dereference(s->head);
if (head) {
struct rcu_lfs_node *next = rcu_dereference(head->next);
if (head) {
struct rcu_lfs_node *next = rcu_dereference(head->next);
return head;
} else {
/* Concurrent modification. Retry. */
return head;
} else {
/* Concurrent modification. Retry. */