xen/events: use virt_xxx barriers
authorMichael S. Tsirkin <mst@redhat.com>
Sun, 27 Dec 2015 16:02:16 +0000 (18:02 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 12 Jan 2016 18:47:04 +0000 (20:47 +0200)
drivers/xen/events/events_fifo.c uses rmb() to communicate with the
other side.

For guests compiled with CONFIG_SMP, smp_rmb would be sufficient, so
rmb() here is only needed if a non-SMP guest runs on an SMP host.

Switch to the virt_rmb barrier which serves this exact purpose.

Pull in asm/barrier.h here to make sure the file is self-contained.

Suggested-by: David Vrabel <david.vrabel@citrix.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: David Vrabel <david.vrabel@citrix.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
drivers/xen/events/events_fifo.c

index 96a1b8d..eff2b88 100644 (file)
@@ -41,6 +41,7 @@
 #include <linux/percpu.h>
 #include <linux/cpu.h>
 
+#include <asm/barrier.h>
 #include <asm/sync_bitops.h>
 #include <asm/xen/hypercall.h>
 #include <asm/xen/hypervisor.h>
@@ -296,7 +297,7 @@ static void consume_one_event(unsigned cpu,
         * control block.
         */
        if (head == 0) {
-               rmb(); /* Ensure word is up-to-date before reading head. */
+               virt_rmb(); /* Ensure word is up-to-date before reading head. */
                head = control_block->head[priority];
        }