|
@@ -98,7 +98,7 @@ bool osq_lock(struct optimistic_spin_queue *lock)
|
|
|
|
|
|
prev = decode_cpu(old);
|
|
|
node->prev = prev;
|
|
|
- ACCESS_ONCE(prev->next) = node;
|
|
|
+ WRITE_ONCE(prev->next, node);
|
|
|
|
|
|
/*
|
|
|
* Normally @prev is untouchable after the above store; because at that
|
|
@@ -109,7 +109,7 @@ bool osq_lock(struct optimistic_spin_queue *lock)
|
|
|
* cmpxchg in an attempt to undo our queueing.
|
|
|
*/
|
|
|
|
|
|
- while (!ACCESS_ONCE(node->locked)) {
|
|
|
+ while (!READ_ONCE(node->locked)) {
|
|
|
/*
|
|
|
* If we need to reschedule bail... so we can block.
|
|
|
*/
|
|
@@ -148,7 +148,7 @@ unqueue:
|
|
|
* Or we race against a concurrent unqueue()'s step-B, in which
|
|
|
* case its step-C will write us a new @node->prev pointer.
|
|
|
*/
|
|
|
- prev = ACCESS_ONCE(node->prev);
|
|
|
+ prev = READ_ONCE(node->prev);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -170,8 +170,8 @@ unqueue:
|
|
|
* it will wait in Step-A.
|
|
|
*/
|
|
|
|
|
|
- ACCESS_ONCE(next->prev) = prev;
|
|
|
- ACCESS_ONCE(prev->next) = next;
|
|
|
+ WRITE_ONCE(next->prev, prev);
|
|
|
+ WRITE_ONCE(prev->next, next);
|
|
|
|
|
|
return false;
|
|
|
}
|
|
@@ -193,11 +193,11 @@ void osq_unlock(struct optimistic_spin_queue *lock)
|
|
|
node = this_cpu_ptr(&osq_node);
|
|
|
next = xchg(&node->next, NULL);
|
|
|
if (next) {
|
|
|
- ACCESS_ONCE(next->locked) = 1;
|
|
|
+ WRITE_ONCE(next->locked, 1);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
next = osq_wait_next(lock, node, NULL);
|
|
|
if (next)
|
|
|
- ACCESS_ONCE(next->locked) = 1;
|
|
|
+ WRITE_ONCE(next->locked, 1);
|
|
|
}
|