aboutsummaryrefslogtreecommitdiff
path: root/include/qemu/sys_membarrier.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/qemu/sys_membarrier.h')
-rw-r--r--include/qemu/sys_membarrier.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/include/qemu/sys_membarrier.h b/include/qemu/sys_membarrier.h
new file mode 100644
index 0000000..316e3dc
--- /dev/null
+++ b/include/qemu/sys_membarrier.h
@@ -0,0 +1,27 @@
+/*
+ * Process-global memory barriers
+ *
+ * Copyright (c) 2018 Red Hat, Inc.
+ *
+ * Author: Paolo Bonzini <pbonzini@redhat.com>
+ */
+
+#ifndef QEMU_SYS_MEMBARRIER_H
+#define QEMU_SYS_MEMBARRIER_H 1
+
+#ifdef CONFIG_MEMBARRIER
+/* Only block reordering at the compiler level in the performance-critical
+ * side. The slow side forces processor-level ordering on all other cores
+ * through a system call.
+ */
+extern void smp_mb_global_init(void);
+extern void smp_mb_global(void);
+#define smp_mb_placeholder() barrier()
+#else
+/* Keep it simple, execute a real memory barrier on both sides. */
+static inline void smp_mb_global_init(void) {}
+#define smp_mb_global() smp_mb()
+#define smp_mb_placeholder() smp_mb()
+#endif
+
+#endif