summaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2018-02-16 10:05:23 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2018-03-12 16:12:47 +0100
commita40161cbe9ccbcbab798c3e4d257c4bba99d153a (patch)
treefe6cc9bb0a5a3253a59d0187a5266573a2b81e16 /configure
parentc8d3877e48c4f57381d72eaf8d016bff12ce2d7c (diff)
downloadqemu-a40161cbe9ccbcbab798c3e4d257c4bba99d153a.tar.gz
membarrier: add --enable-membarrier
Actually enable the global memory barriers if supported by the OS. Because only recent versions of Linux include the support, they are disabled by default. Note that it also has to be disabled for QEMU to run under Wine. Before this patch, rcutorture reports 85 ns/read for my machine, after the patch it reports 12.5 ns/read. On the other hand updates go from 50 *micro*seconds to 20 *milli*seconds. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure42
1 files changed, 41 insertions, 1 deletions
diff --git a/configure b/configure
index 26d56eb5bb..db87fc4fed 100755
--- a/configure
+++ b/configure
@@ -342,7 +342,7 @@ attr=""
libattr=""
xfs=""
tcg="yes"
-
+membarrier=""
vhost_net="no"
vhost_crypto="no"
vhost_scsi="no"
@@ -1161,6 +1161,10 @@ for opt do
;;
--enable-attr) attr="yes"
;;
+ --disable-membarrier) membarrier="no"
+ ;;
+ --enable-membarrier) membarrier="yes"
+ ;;
--disable-blobs) blobs="no"
;;
--with-pkgversion=*) pkgversion="$optarg"
@@ -1577,6 +1581,7 @@ disabled with --disable-FEATURE, default is enabled if available:
xen-pci-passthrough
brlapi BrlAPI (Braile)
curl curl connectivity
+ membarrier membarrier system call (for Linux 4.14+ or Windows)
fdt fdt device tree
bluez bluez stack connectivity
kvm KVM acceleration support
@@ -5138,6 +5143,37 @@ if compile_prog "" "" ; then
fi
##########################################
+# check for usable membarrier system call
+if test "$membarrier" = "yes"; then
+ have_membarrier=no
+ if test "$mingw32" = "yes" ; then
+ have_membarrier=yes
+ elif test "$linux" = "yes" ; then
+ cat > $TMPC << EOF
+ #include <linux/membarrier.h>
+ #include <sys/syscall.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+ int main(void) {
+ syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
+ syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
+ exit(0);
+ }
+EOF
+ if compile_prog "" "" ; then
+ have_membarrier=yes
+ fi
+ fi
+ if test "$have_membarrier" = "no"; then
+ feature_not_found "membarrier" "membarrier system call not available"
+ fi
+else
+ # Do not enable it by default even for Mingw32, because it doesn't
+ # work on Wine.
+ membarrier=no
+fi
+
+##########################################
# check if rtnetlink.h exists and is useful
have_rtnetlink=no
cat > $TMPC << EOF
@@ -5763,6 +5799,7 @@ fi
echo "malloc trim support $malloc_trim"
echo "RDMA support $rdma"
echo "fdt support $fdt"
+echo "membarrier $membarrier"
echo "preadv support $preadv"
echo "fdatasync $fdatasync"
echo "madvise $madvise"
@@ -6245,6 +6282,9 @@ fi
if test "$fdt" = "yes" ; then
echo "CONFIG_FDT=y" >> $config_host_mak
fi
+if test "$membarrier" = "yes" ; then
+ echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
+fi
if test "$signalfd" = "yes" ; then
echo "CONFIG_SIGNALFD=y" >> $config_host_mak
fi