X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_vhost%2Fvhost.h;h=8919781313a9896b873b6fa471ee3402b5acd592;hb=776d64ffb7cff60a5500c8f33704787d0bae428a;hp=ba2fc74048710981f2ffcba889f9840fecacf965;hpb=41333fba5b98945b8051e7b48f8fe47432cdd356;p=dpdk.git diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h index ba2fc74048..8919781313 100644 --- a/lib/librte_vhost/vhost.h +++ b/lib/librte_vhost/vhost.h @@ -304,14 +304,18 @@ struct virtio_net { #define VHOST_LOG_PAGE 4096 /* - * Mark all pages belonging to the same dirty log bitmap byte - * as dirty. The goal is to avoid concurrency between different - * threads doing atomic read-modify-writes on the same byte. + * Atomically set a bit in memory. */ +static __rte_always_inline void +vhost_set_bit(unsigned int nr, volatile uint8_t *addr) +{ + __sync_fetch_and_or_8(addr, (1U << nr)); +} + static __rte_always_inline void vhost_log_page(uint8_t *log_base, uint64_t page) { - log_base[page / 8] = 0xff; + vhost_set_bit(page % 8, &log_base[page / 8]); } static __rte_always_inline void