mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
add a header file for atomic operations
We're already using them in several places, but __sync builtins are just too ugly to type, and do not provide seqcst load/store operations. Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
22fc860b0a
commit
5444e768ee
6 changed files with 531 additions and 46 deletions
|
@ -16,6 +16,7 @@
|
|||
#include <sys/ioctl.h>
|
||||
#include "hw/virtio/vhost.h"
|
||||
#include "hw/hw.h"
|
||||
#include "qemu/atomic.h"
|
||||
#include "qemu/range.h"
|
||||
#include <linux/vhost.h>
|
||||
#include "exec/address-spaces.h"
|
||||
|
@ -47,11 +48,9 @@ static void vhost_dev_sync_region(struct vhost_dev *dev,
|
|||
addr += VHOST_LOG_CHUNK;
|
||||
continue;
|
||||
}
|
||||
/* Data must be read atomically. We don't really
|
||||
* need the barrier semantics of __sync
|
||||
* builtins, but it's easier to use them than
|
||||
* roll our own. */
|
||||
log = __sync_fetch_and_and(from, 0);
|
||||
/* Data must be read atomically. We don't really need barrier semantics
|
||||
* but it's easier to use atomic_* than roll our own. */
|
||||
log = atomic_xchg(from, 0);
|
||||
while ((bit = sizeof(log) > sizeof(int) ?
|
||||
ffsll(log) : ffs(log))) {
|
||||
hwaddr page_addr;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue