Skip to content

Commit

Permalink
lib/seq: Document acquire-release semantics.
Browse files Browse the repository at this point in the history
Seq objects would be really hard to use if they did not provide
acquire-release semantics.  Currently they do that via
ovs_mutex_lock()/ovs_mutex_unlock(), respectively.  Document the
behavior so that it is safer to rely on that elsewhere.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
  • Loading branch information
Jarno Rajahalme committed Aug 29, 2014
1 parent dce96af commit ab355e6
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 2 deletions.
8 changes: 7 additions & 1 deletion lib/ovs-thread.c
Expand Up @@ -278,7 +278,11 @@ ovs_barrier_destroy(struct ovs_barrier *barrier)
}

/* Makes the calling thread block on the 'barrier' until all
* 'barrier->size' threads hit the barrier. */
* 'barrier->size' threads hit the barrier.
* ovs_barrier provides the necessary acquire-release semantics to make
* the effects of prior memory accesses of all the participating threads
* visible on return and to prevent the following memory accesses to be
* reordered before the ovs_barrier_block(). */
void
ovs_barrier_block(struct ovs_barrier *barrier)
{
Expand All @@ -288,6 +292,8 @@ ovs_barrier_block(struct ovs_barrier *barrier)
atomic_add(&barrier->count, 1, &orig);
if (orig + 1 == barrier->size) {
atomic_store(&barrier->count, 0);
/* seq_change() serves as a release barrier against the other threads,
* so the zeroed count is visible to them as they continue. */
seq_change(barrier->seq);
}

Expand Down
6 changes: 5 additions & 1 deletion lib/seq.h
Expand Up @@ -107,7 +107,11 @@
* Thread-safety
* =============
*
* Fully thread safe.
* Fully thread safe. seq_change() synchronizes with seq_read() and
* seq_wait() on the same variable in release-acquire fashion. That
* is, all effects of the memory accesses performed by a thread prior
* to seq_change() are visible to the threads returning from
* seq_read() or seq_wait() observing that change.
*/

#include <stdint.h>
Expand Down

0 comments on commit ab355e6

Please sign in to comment.