xen/common: Replace incorrect mandatory barriers with SMP barriers
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 5 Oct 2016 11:42:15 +0000 (12:42 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 7 Dec 2016 10:02:37 +0000 (10:02 +0000)
Mandatory barriers are only for use with reduced-cacheability MMIO mappings.

All of these uses are just to deal with shared memory between multiple
processors, so use the smp_*() which are the correct barriers for the purpose.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
xen/common/grant_table.c
xen/common/time.c
xen/common/vm_event.c

index e2c40970715ce05fb1277087adb6d746f1cc6957..a425a9ea0841d07869f86b61ab4da8d1fcfdad37 100644 (file)
@@ -993,7 +993,7 @@ __gnttab_map_grant_ref(
     mt = &maptrack_entry(lgt, handle);
     mt->domid = op->dom;
     mt->ref   = op->ref;
-    wmb();
+    smp_wmb();
     write_atomic(&mt->flags, op->flags);
 
     if ( need_iommu )
index 721ada8a695c2a2aa3313db792c7d7ea34b1024c..a7caea99e09da29e75df3087252ea319979b2125 100644 (file)
@@ -103,7 +103,7 @@ void update_domain_wallclock_time(struct domain *d)
 
     wc_version = &shared_info(d, wc_version);
     *wc_version = version_update_begin(*wc_version);
-    wmb();
+    smp_wmb();
 
     sec = wc_sec + d->time_offset_seconds;
     shared_info(d, wc_sec)    = sec;
@@ -117,7 +117,7 @@ void update_domain_wallclock_time(struct domain *d)
     shared_info(d, wc_sec_hi) = sec >> 32;
 #endif
 
-    wmb();
+    smp_wmb();
     *wc_version = version_update_end(*wc_version);
 
     spin_unlock(&wc_lock);
index 907ab40cde72c8868e59d6dc50d7d1895a2c4356..c6f7d32af7aa5cfd9aea5685e8dba406a12d86a9 100644 (file)
@@ -31,9 +31,9 @@
 #include <xsm/xsm.h>
 
 /* for public/io/ring.h macros */
-#define xen_mb()   mb()
-#define xen_rmb()  rmb()
-#define xen_wmb()  wmb()
+#define xen_mb()   smp_mb()
+#define xen_rmb()  smp_rmb()
+#define xen_wmb()  smp_wmb()
 
 #define vm_event_ring_lock_init(_ved)  spin_lock_init(&(_ved)->ring_lock)
 #define vm_event_ring_lock(_ved)       spin_lock(&(_ved)->ring_lock)