Let hastd use C11 atomics.

C11 atomics now work on all the architectures. Have at least a single
piece of software in our base system that uses C11 atomics. This
somewhat makes it less likely that we break it because of LLVM imports,
etc.
This commit is contained in:
Ed Schouten 2013-06-15 22:17:59 +00:00
parent 8ed396853b
commit 87f02f6f89
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=251796

View File

@ -32,24 +32,24 @@
#ifndef __REFCNT_H__
#define __REFCNT_H__
#include <machine/atomic.h>
#include <stdatomic.h>
#include "pjdlog.h"
typedef unsigned int refcnt_t;
typedef atomic_uint refcnt_t;
static __inline void
refcnt_init(refcnt_t *count, unsigned int v)
{
*count = v;
atomic_init(count, v);
}
static __inline void
refcnt_acquire(refcnt_t *count)
{
atomic_add_acq_int(count, 1);
atomic_fetch_add_explicit(count, 1, memory_order_acquire);
}
static __inline unsigned int
@ -58,7 +58,7 @@ refcnt_release(refcnt_t *count)
unsigned int old;
/* XXX: Should this have a rel membar? */
old = atomic_fetchadd_int(count, -1);
old = atomic_fetch_sub(count, 1);
PJDLOG_ASSERT(old > 0);
return (old - 1);
}