diff options
author | Natanael Copa | 2014-04-29 16:17:29 +0200 |
---|---|---|
committer | Peter Maydell | 2014-06-11 01:25:06 +0200 |
commit | 747eb78baa8803c58a1063e5da5b7f1e11b20eeb (patch) | |
tree | 03f2b63d9043ebfcd2c3f0ed8c7f05a2b7d96880 /hw/virtio/vhost.c | |
parent | xen: replace ffsl with ctzl (diff) | |
download | qemu-747eb78baa8803c58a1063e5da5b7f1e11b20eeb.tar.gz qemu-747eb78baa8803c58a1063e5da5b7f1e11b20eeb.tar.xz qemu-747eb78baa8803c58a1063e5da5b7f1e11b20eeb.zip |
vhost: replace ffsl with ctzl
Avoid using the GNU extesion ffsl which is not implemented in musl libc.
The atomic_xchg() means we know that vhost_log_chunk_t will never be
larger than the 'long' type, so ctzl() is always sufficient.
See also commit fbeadf50 (bitops: unify bitops_ffsl with the one in
host-utils.h, call it bitops_ctzl) on why ctzl should be used instead
of ffsl.
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/virtio/vhost.c')
-rw-r--r-- | hw/virtio/vhost.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 9e336ad81e..f62cfaf38e 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -41,7 +41,6 @@ static void vhost_dev_sync_region(struct vhost_dev *dev, for (;from < to; ++from) { vhost_log_chunk_t log; - int bit; /* We first check with non-atomic: much cheaper, * and we expect non-dirty to be the common case. */ if (!*from) { @@ -51,12 +50,11 @@ static void vhost_dev_sync_region(struct vhost_dev *dev, /* 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))) { + while (log) { + int bit = ctzl(log); hwaddr page_addr; hwaddr section_offset; hwaddr mr_offset; - bit -= 1; page_addr = addr + bit * VHOST_LOG_PAGE; section_offset = page_addr - section->offset_within_address_space; mr_offset = section_offset + section->offset_within_region; |