net/i40e: fix missing defines for non-AVX build
[dpdk.git] / lib / librte_vhost / vhost.h
index ba2fc74..8919781 100644 (file)
@@ -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