lguest: get more serious about wmb() in example Launcher code
authorRusty Russell <rusty@rustcorp.com.au>
Sat, 13 Jun 2009 04:27:00 +0000 (22:27 -0600)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 12 Jun 2009 12:57:00 +0000 (22:27 +0930)
Since the Launcher process runs the Guest, it doesn't have to be very
serious about its barriers: the Guest isn't running while we are (Guest
is UP).

Before we change to use threads to service devices, we need to fix this.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Documentation/lguest/lguest.c

index 1a2b906a3ae6cfffd8422a64723a0d7f5230d0ea..1e31d1ec12a38e69d2dfc3e723ead31611e70275 100644 (file)
@@ -182,9 +182,10 @@ struct virtqueue
 /* Remember the arguments to the program so we can "reboot" */
 static char **main_args;
 
-/* Since guest is UP and we don't run at the same time, we don't need barriers.
- * But I include them in the code in case others copy it. */
-#define wmb()
+/* We have to be careful with barriers: our devices are all run in separate
+ * threads and so we need to make sure that changes visible to the Guest happen
+ * in precise order. */
+#define wmb() __asm__ __volatile__("" : : : "memory")
 
 /* Convert an iovec element to the given type.
  *