diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2015-12-27 18:02:16 +0200 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2016-01-12 20:47:03 +0200 |
commit | 5bb0c9be2ac9a98513d43969e2b5c3d02cb271c8 (patch) | |
tree | 2e71e19671c569e31040354c07295f25a183e74d /drivers | |
parent | 788e5b3a5da24cc8d93ce2f7c6508181cd7d7fb6 (diff) | |
download | linux-5bb0c9be2ac9a98513d43969e2b5c3d02cb271c8.tar.gz linux-5bb0c9be2ac9a98513d43969e2b5c3d02cb271c8.tar.bz2 linux-5bb0c9be2ac9a98513d43969e2b5c3d02cb271c8.zip |
xenbus: use virt_xxx barriers
drivers/xen/xenbus/xenbus_comms.c uses
full memory barriers to communicate with the other side.
For guests compiled with CONFIG_SMP, smp_wmb and smp_mb
would be sufficient, so mb() and wmb() here are only needed if
a non-SMP guest runs on an SMP host.
Switch to virt_xxx barriers which serve this exact purpose.
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/xen/xenbus/xenbus_comms.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/xen/xenbus/xenbus_comms.c b/drivers/xen/xenbus/xenbus_comms.c index fdb0f339d0a7..ecdecce80a6c 100644 --- a/drivers/xen/xenbus/xenbus_comms.c +++ b/drivers/xen/xenbus/xenbus_comms.c @@ -123,14 +123,14 @@ int xb_write(const void *data, unsigned len) avail = len; /* Must write data /after/ reading the consumer index. */ - mb(); + virt_mb(); memcpy(dst, data, avail); data += avail; len -= avail; /* Other side must not see new producer until data is there. */ - wmb(); + virt_wmb(); intf->req_prod += avail; /* Implies mb(): other side will see the updated producer. */ @@ -180,14 +180,14 @@ int xb_read(void *data, unsigned len) avail = len; /* Must read data /after/ reading the producer index. */ - rmb(); + virt_rmb(); memcpy(data, src, avail); data += avail; len -= avail; /* Other side must not see free space until we've copied out */ - mb(); + virt_mb(); intf->rsp_cons += avail; pr_debug("Finished read of %i bytes (%i to go)\n", avail, len); |