hw/net/vhost_net.c | 12 ++++++++++-- hw/net/virtio-net.c | 4 ++++ hw/virtio/virtio-pci.c | 4 ++-- net/hub.c | 2 ++ net/net.c | 4 +++- configure | 22 +++++++++++++++++++++- default-configs/pci.mak | 2 +- default-configs/s390x-softmmu.mak | 2 +- net/Makefile.objs | 2 +- qemu-options.hx | 4 ++++ tests/Makefile.include | 6 +++--- 11 files changed, 52 insertions(+), 12 deletions(-)
Learn to compile out vhost-user. Keep it enabled by default on
non-mingw, that is assumed to be on POSIX.
When trying to make a vhost-user netdev, it gives the following error:
-netdev vhost-user,id=foo,chardev=chr-test: Parameter 'type' expects a netdev backend type
And similar error with the HMP/QMP monitors.
In the future, we may want to hide vhost-user from QAPI/introspection
with conditional compilation, although the design of this hasn't been
fully fleshed out yet and shouldn't prevent this patch from being
applied.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/net/vhost_net.c | 12 ++++++++++--
hw/net/virtio-net.c | 4 ++++
hw/virtio/virtio-pci.c | 4 ++--
net/hub.c | 2 ++
net/net.c | 4 +++-
configure | 22 +++++++++++++++++++++-
default-configs/pci.mak | 2 +-
default-configs/s390x-softmmu.mak | 2 +-
net/Makefile.objs | 2 +-
qemu-options.hx | 4 ++++
tests/Makefile.include | 6 +++---
11 files changed, 52 insertions(+), 12 deletions(-)
diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
index e037db63a3..565a1cc99d 100644
--- a/hw/net/vhost_net.c
+++ b/hw/net/vhost_net.c
@@ -56,6 +56,7 @@ static const int kernel_feature_bits[] = {
VHOST_INVALID_FEATURE_BIT
};
+#ifdef CONFIG_VHOST_USER
/* Features supported by others. */
static const int user_feature_bits[] = {
VIRTIO_F_NOTIFY_ON_EMPTY,
@@ -86,6 +87,7 @@ static const int user_feature_bits[] = {
VHOST_INVALID_FEATURE_BIT
};
+#endif
static const int *vhost_net_get_feature_bits(struct vhost_net *net)
{
@@ -95,9 +97,11 @@ static const int *vhost_net_get_feature_bits(struct vhost_net *net)
case NET_CLIENT_DRIVER_TAP:
feature_bits = kernel_feature_bits;
break;
+#ifdef CONFIG_VHOST_USER
case NET_CLIENT_DRIVER_VHOST_USER:
feature_bits = user_feature_bits;
break;
+#endif
default:
error_report("Feature bits not defined for this type: %d",
net->nc->info->type);
@@ -193,6 +197,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options)
}
}
+#ifdef CONFIG_VHOST_USER
/* Set sane init value. Override when guest acks. */
if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) {
features = vhost_user_get_acked_features(net->nc);
@@ -203,7 +208,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options)
goto fail;
}
}
-
+#endif
vhost_net_ack_features(net, features);
return net;
@@ -309,6 +314,7 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs,
net = get_vhost_net(ncs[i].peer);
vhost_net_set_vq_index(net, i * 2);
+#ifdef CONFIG_VHOST_USER
/* Suppress the masking guest notifiers on vhost user
* because vhost user doesn't interrupt masking/unmasking
* properly.
@@ -316,8 +322,8 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs,
if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) {
dev->use_guest_notifier_mask = false;
}
+#endif
}
-
r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true);
if (r < 0) {
error_report("Error binding guest notifier: %d", -r);
@@ -414,10 +420,12 @@ VHostNetState *get_vhost_net(NetClientState *nc)
case NET_CLIENT_DRIVER_TAP:
vhost_net = tap_get_vhost_net(nc);
break;
+#ifdef CONFIG_VHOST_USER
case NET_CLIENT_DRIVER_VHOST_USER:
vhost_net = vhost_user_get_vhost_net(nc);
assert(vhost_net);
break;
+#endif
default:
break;
}
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 148071a396..9bda4ab4f8 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -524,9 +524,11 @@ static int peer_attach(VirtIONet *n, int index)
return 0;
}
+#ifdef CONFIG_VHOST_USER
if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) {
vhost_set_vring_enable(nc->peer, 1);
}
+#endif
if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) {
return 0;
@@ -547,9 +549,11 @@ static int peer_detach(VirtIONet *n, int index)
return 0;
}
+#ifdef CONFIG_VHOST_USER
if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) {
vhost_set_vring_enable(nc->peer, 0);
}
+#endif
if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) {
return 0;
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 5d14bd66dc..85b82e6c94 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -2135,7 +2135,7 @@ static const TypeInfo vhost_scsi_pci_info = {
};
#endif
-#ifdef CONFIG_LINUX
+#ifdef CONFIG_VHOST_USER
/* vhost-user-scsi-pci */
static Property vhost_user_scsi_pci_properties[] = {
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
@@ -2665,7 +2665,7 @@ static void virtio_pci_register_types(void)
#ifdef CONFIG_VHOST_SCSI
type_register_static(&vhost_scsi_pci_info);
#endif
-#ifdef CONFIG_LINUX
+#ifdef CONFIG_VHOST_USER
type_register_static(&vhost_user_scsi_pci_info);
#endif
#ifdef CONFIG_VHOST_VSOCK
diff --git a/net/hub.c b/net/hub.c
index 32d8cf5cd4..ec06275ff6 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -322,7 +322,9 @@ void net_hub_check_clients(void)
case NET_CLIENT_DRIVER_TAP:
case NET_CLIENT_DRIVER_SOCKET:
case NET_CLIENT_DRIVER_VDE:
+#ifdef CONFIG_VHOST_USER
case NET_CLIENT_DRIVER_VHOST_USER:
+#endif
has_host_dev = 1;
break;
default:
diff --git a/net/net.c b/net/net.c
index 0e28099554..d11909421c 100644
--- a/net/net.c
+++ b/net/net.c
@@ -957,7 +957,7 @@ static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
[NET_CLIENT_DRIVER_BRIDGE] = net_init_bridge,
#endif
[NET_CLIENT_DRIVER_HUBPORT] = net_init_hubport,
-#ifdef CONFIG_VHOST_NET_USED
+#if defined(CONFIG_VHOST_NET_USED) && defined(CONFIG_VHOST_USER)
[NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user,
#endif
#ifdef CONFIG_L2TPV3
@@ -1033,10 +1033,12 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp)
legacy.type = NET_CLIENT_DRIVER_NETMAP;
legacy.u.netmap = opts->u.netmap;
break;
+#ifdef CONFIG_VHOST_USER
case NET_LEGACY_OPTIONS_TYPE_VHOST_USER:
legacy.type = NET_CLIENT_DRIVER_VHOST_USER;
legacy.u.vhost_user = opts->u.vhost_user;
break;
+#endif
default:
abort();
}
diff --git a/configure b/configure
index a3f0522e8f..defb9e9974 100755
--- a/configure
+++ b/configure
@@ -306,6 +306,7 @@ tcg="yes"
vhost_net="no"
vhost_scsi="no"
vhost_vsock="no"
+vhost_user=""
kvm="no"
hax="no"
rdma=""
@@ -1283,6 +1284,10 @@ for opt do
;;
--enable-vxhs) vxhs="yes"
;;
+ --disable-vhost-user) vhost_user="no"
+ ;;
+ --enable-vhost-user) vhost_user="yes"
+ ;;
*)
echo "ERROR: unknown option $opt"
echo "Try '$0 --help' for more information"
@@ -1291,6 +1296,14 @@ for opt do
esac
done
+if test "$vhost_user" = ""; then
+ if test "$mingw32" = "yes" ; then
+ vhost_user="no"
+ else
+ vhost_user="yes"
+ fi
+fi
+
case "$cpu" in
ppc)
CPU_CFLAGS="-m32"
@@ -1518,6 +1531,7 @@ disabled with --disable-FEATURE, default is enabled if available:
qom-cast-debug cast debugging support
tools build qemu-io, qemu-nbd and qemu-image tools
vxhs Veritas HyperScale vDisk backend support
+ vhost-user vhost-user support
NOTE: The object files are built at the place where configure is launched
EOF
@@ -5278,6 +5292,7 @@ echo "libcap-ng support $cap_ng"
echo "vhost-net support $vhost_net"
echo "vhost-scsi support $vhost_scsi"
echo "vhost-vsock support $vhost_vsock"
+echo "vhost-user support $vhost_user"
echo "Trace backends $trace_backends"
if have_backend "simple"; then
echo "Trace output file $trace_file-<pid>"
@@ -5696,6 +5711,9 @@ fi
if test "$vhost_vsock" = "yes" ; then
echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
fi
+if test "$vhost_user" = "yes" ; then
+ echo "CONFIG_VHOST_USER=y" >> $config_host_mak
+fi
if test "$blobs" = "yes" ; then
echo "INSTALL_BLOBS=yes" >> $config_host_mak
fi
@@ -6279,7 +6297,9 @@ if supported_kvm_target $target; then
echo "CONFIG_KVM=y" >> $config_target_mak
if test "$vhost_net" = "yes" ; then
echo "CONFIG_VHOST_NET=y" >> $config_target_mak
- echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
+ if test "$vhost_user" = "yes" ; then
+ echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
+ fi
fi
fi
if supported_hax_target $target; then
diff --git a/default-configs/pci.mak b/default-configs/pci.mak
index 53ff10975c..708d7b19ad 100644
--- a/default-configs/pci.mak
+++ b/default-configs/pci.mak
@@ -43,4 +43,4 @@ CONFIG_VGA=y
CONFIG_VGA_PCI=y
CONFIG_IVSHMEM=$(CONFIG_EVENTFD)
CONFIG_ROCKER=y
-CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX)
+CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER)
diff --git a/default-configs/s390x-softmmu.mak b/default-configs/s390x-softmmu.mak
index b227a36179..bb870477f8 100644
--- a/default-configs/s390x-softmmu.mak
+++ b/default-configs/s390x-softmmu.mak
@@ -1,6 +1,6 @@
CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
-CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX)
+CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER)
CONFIG_VIRTIO=y
CONFIG_SCLPCONSOLE=y
CONFIG_TERMINAL3270=y
diff --git a/net/Makefile.objs b/net/Makefile.objs
index 67ba5e26fb..7cac7ed1e4 100644
--- a/net/Makefile.objs
+++ b/net/Makefile.objs
@@ -3,7 +3,7 @@ common-obj-y += socket.o
common-obj-y += dump.o
common-obj-y += eth.o
common-obj-$(CONFIG_L2TPV3) += l2tpv3.o
-common-obj-$(CONFIG_POSIX) += vhost-user.o
+common-obj-$(CONFIG_VHOST_USER) += vhost-user.o
common-obj-$(CONFIG_SLIRP) += slirp.o
common-obj-$(CONFIG_VDE) += vde.o
common-obj-$(CONFIG_NETMAP) += netmap.o
diff --git a/qemu-options.hx b/qemu-options.hx
index 746b5fa75d..c2d4ae440f 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1994,8 +1994,10 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
" VALE port (created on the fly) called 'name' ('nmname' is name of the \n"
" netmap device, defaults to '/dev/netmap')\n"
#endif
+#ifdef CONFIG_VHOST_USER
"-netdev vhost-user,id=str,chardev=dev[,vhostforce=on|off]\n"
" configure a vhost-user network, backed by a chardev 'dev'\n"
+#endif
"-netdev hubport,id=str,hubid=n\n"
" configure a hub port on QEMU VLAN 'n'\n", QEMU_ARCH_ALL)
DEF("net", HAS_ARG, QEMU_OPTION_net,
@@ -2428,6 +2430,7 @@ The hubport netdev lets you connect a NIC to a QEMU "vlan" instead of a single
netdev. @code{-net} and @code{-device} with parameter @option{vlan} create the
required hub automatically.
+#ifdef CONFIG_VHOST_USER
@item -netdev vhost-user,chardev=@var{id}[,vhostforce=on|off][,queues=n]
Establish a vhost-user netdev, backed by a chardev @var{id}. The chardev should
@@ -2445,6 +2448,7 @@ qemu -m 512 -object memory-backend-file,id=mem,size=512M,mem-path=/hugetlbfs,sha
-netdev type=vhost-user,id=net0,chardev=chr0 \
-device virtio-net-pci,netdev=net0
@end example
+#endif
@item -net dump[,vlan=@var{n}][,file=@var{file}][,len=@var{len}]
Dump network traffic on VLAN @var{n} to file @var{file} (@file{qemu-vlan0.pcap} by default).
diff --git a/tests/Makefile.include b/tests/Makefile.include
index cfbb689e0e..6b9a0ce07e 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -252,9 +252,9 @@ check-qtest-i386-y += tests/pc-cpu-test$(EXESUF)
check-qtest-i386-y += tests/q35-test$(EXESUF)
check-qtest-i386-y += tests/vmgenid-test$(EXESUF)
gcov-files-i386-y += hw/pci-host/q35.c
-check-qtest-i386-$(CONFIG_VHOST_NET_TEST_i386) += tests/vhost-user-test$(EXESUF)
-ifeq ($(CONFIG_VHOST_NET_TEST_i386),)
-check-qtest-x86_64-$(CONFIG_VHOST_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF)
+check-qtest-i386-$(CONFIG_VHOST_USER_NET_TEST_i386) += tests/vhost-user-test$(EXESUF)
+ifeq ($(CONFIG_VHOST_USER_NET_TEST_i386),)
+check-qtest-x86_64-$(CONFIG_VHOST_USER_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF)
endif
check-qtest-i386-y += tests/test-netfilter$(EXESUF)
check-qtest-i386-y += tests/test-filter-mirror$(EXESUF)
--
2.14.0.rc0.1.g40ca67566
Hi, This series failed build test on FreeBSD host. Please find the details below. Type: series Subject: [Qemu-devel] [PATCH] build-sys: add --disable-vhost-user Message-id: 20170718163437.18001-1-marcandre.lureau@redhat.com === TEST SCRIPT BEGIN === #!/bin/sh # Testing script will be invoked under the git checkout with # HEAD pointing to a commit that has the patches applied on top of "base" # branch set -e echo "=== ENV ===" env echo "=== PACKAGES ===" pkg info echo "=== TEST BEGIN ===" CC=/usr/local/libexec/ccache/cc INSTALL=$PWD/install BUILD=$PWD/build echo -n "Using CC: " realpath $CC mkdir -p $BUILD $INSTALL SRC=$PWD cd $BUILD $SRC/configure --cc=$CC --prefix=$INSTALL --target-list=x86_64-softmmu gmake -j4 # XXX: we need reliable clean up # make check -j4 V=1 gmake install === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 From https://github.com/patchew-project/qemu * [new tag] patchew/20170718163437.18001-1-marcandre.lureau@redhat.com -> patchew/20170718163437.18001-1-marcandre.lureau@redhat.com Switched to a new branch 'test' 163dfc1613 build-sys: add --disable-vhost-user === OUTPUT BEGIN === === ENV === LOGNAME=patchew-tester PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin PWD=/var/tmp/patchew-tester-tmp-rj56yzun/src HOME=/home/patchew-tester USER=patchew-tester SHELL=/bin/sh PATCHEW=/home/patchew-tester/patchew/patchew-cli -s http://patchew.org --nodebug === PACKAGES === bash-4.4.12_2 GNU Project's Bourne Again SHell binutils-2.28,1 GNU binary tools bison-3.0.4,1 Parser generator from FSF, (mostly) compatible with Yacc ca_root_nss-3.30.2 Root certificate bundle from the Mozilla Project ccache-3.3.4_3 Tool to minimize the compile time of C/C++ programs curl-7.54.0 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers cvsps-2.1_2 Create patchset information from CVS dtc-1.4.2_1 Device Tree Compiler expat-2.2.0_1 XML 1.0 parser written in C gcc-5.4.0 GNU Compiler Collection 5 gcc-ecj-4.5 Eclipse Java Compiler used to build GCC Java gettext-runtime-0.19.8.1_1 GNU gettext runtime libraries and programs git-2.13.0 Distributed source code management tool glib-2.46.2_5 Some useful routines of C programming (current stable version) gmake-4.2.1_1 GNU version of 'make' utility gmp-6.1.2 Free library for arbitrary precision arithmetic indexinfo-0.2.6 Utility to regenerate the GNU info page index libffi-3.2.1 Foreign Function Interface libiconv-1.14_10 Character set conversion library libnghttp2-1.21.0 HTTP/2.0 C Library m4-1.4.18,1 GNU M4 mpc-1.0.3 Library of complex numbers with arbitrarily high precision mpfr-3.1.5_1 Library for multiple-precision floating-point computations p5-Authen-SASL-2.16_1 Perl5 module for SASL authentication p5-Digest-HMAC-1.03_1 Perl5 interface to HMAC Message-Digest Algorithms p5-Error-0.17024 Error/exception handling in object-oriented programming style p5-GSSAPI-0.28_1 Perl extension providing access to the GSSAPIv2 library pcre-8.40 Perl Compatible Regular Expressions library perl5-5.24.1 Practical Extraction and Report Language pixman-0.34.0 Low-level pixel manipulation library pkg-1.10.1 Package manager pkgconf-1.3.0,1 Utility to help to configure compiler and linker flags python-2.7_3,2 "meta-port" for the default version of Python interpreter python2-2_3 The "meta-port" for version 2 of the Python interpreter python27-2.7.13_3 Interpreted object-oriented programming language python3-3_3 The "meta-port" for version 3 of the Python interpreter python35-3.5.3_1 Interpreted object-oriented programming language readline-6.3.8 Library for editing command lines as they are typed sudo-1.8.20p1 Allow others to run commands as root === TEST BEGIN === Using CC: /usr/local/bin/ccache Install prefix /var/tmp/patchew-tester-tmp-rj56yzun/src/install BIOS directory /var/tmp/patchew-tester-tmp-rj56yzun/src/install/share/qemu binary directory /var/tmp/patchew-tester-tmp-rj56yzun/src/install/bin library directory /var/tmp/patchew-tester-tmp-rj56yzun/src/install/lib module directory /var/tmp/patchew-tester-tmp-rj56yzun/src/install/lib/qemu libexec directory /var/tmp/patchew-tester-tmp-rj56yzun/src/install/libexec include directory /var/tmp/patchew-tester-tmp-rj56yzun/src/install/include config directory /var/tmp/patchew-tester-tmp-rj56yzun/src/install/etc local state directory /var/tmp/patchew-tester-tmp-rj56yzun/src/install/var Manual directory /var/tmp/patchew-tester-tmp-rj56yzun/src/install/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /var/tmp/patchew-tester-tmp-rj56yzun/src C compiler /usr/local/libexec/ccache/cc Host C compiler cc C++ compiler c++ Objective-C compiler clang ARFLAGS rv CFLAGS -O2 -g QEMU_CFLAGS -I/usr/local/include/pixman-1 -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -DNCURSES_WIDECHAR -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wno-string-plus-int -Wno-initializer-overrides -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-definition -Wtype-limits -fstack-protector-strong LDFLAGS -Wl,--warn-common -m64 -g make gmake install install python python -B smbd /usr/sbin/smbd module support no host CPU x86_64 host big endian no target list x86_64-softmmu gprof enabled no sparse enabled no strip binaries yes profiler no static build no pixman system SDL support no GTK support no GTK GL support no VTE support no TLS priority NORMAL GNUTLS support no GNUTLS rnd no libgcrypt no libgcrypt kdf no nettle no nettle kdf no libtasn1 no curses support yes virgl support no curl support yes mingw32 support no Audio drivers oss Block whitelist (rw) Block whitelist (ro) VirtFS support no VNC support yes VNC SASL support no VNC JPEG support no VNC PNG support no xen support no brlapi support no bluez support no Documentation no PIE no vde support no netmap support yes Linux AIO support no ATTR/XATTR support no Install blobs yes KVM support no HAX support no TCG support yes TCG debug enabled no TCG interpreter no RDMA support no fdt support no preadv support yes fdatasync no madvise yes posix_madvise yes libcap-ng support no vhost-net support no vhost-scsi support no vhost-vsock support no vhost-user support yes Trace backends log spice support no rbd support no xfsctl support no smartcard support no libusb yes usb net redir no OpenGL support no OpenGL dmabufs no libiscsi support no libnfs support no build guest agent yes QGA VSS support no QGA w32 disk info no QGA MSI support no seccomp support no coroutine backend ucontext coroutine pool yes debug stack usage no GlusterFS support no gcov gcov gcov enabled no TPM support yes libssh2 support no TPM passthrough no QOM debugging yes Live block migration yes lzo support no snappy support no bzip2 support yes NUMA host support no tcmalloc support no jemalloc support no avx2 optimization no replication support yes VxHS block device no GEN x86_64-softmmu/config-devices.mak.tmp GEN config-host.h GEN qemu-options.def GEN qmp-commands.h GEN x86_64-softmmu/config-devices.mak GEN qapi-types.h GEN qapi-visit.h GEN qapi-event.h GEN qmp-marshal.c GEN qapi-types.c GEN qapi-visit.c GEN qapi-event.c GEN qmp-introspect.h GEN qmp-introspect.c GEN trace/generated-tcg-tracers.h GEN trace/generated-helpers-wrappers.h GEN trace/generated-helpers.h GEN trace/generated-helpers.c GEN module_block.h GEN tests/test-qapi-types.h GEN tests/test-qapi-visit.h GEN tests/test-qmp-commands.h GEN tests/test-qapi-event.h GEN tests/test-qmp-introspect.h GEN trace-root.h GEN util/trace.h GEN crypto/trace.h GEN io/trace.h GEN migration/trace.h GEN block/trace.h GEN chardev/trace.h GEN hw/block/trace.h GEN hw/block/dataplane/trace.h GEN hw/char/trace.h GEN hw/intc/trace.h GEN hw/net/trace.h GEN hw/virtio/trace.h GEN hw/audio/trace.h GEN hw/misc/trace.h GEN hw/usb/trace.h GEN hw/scsi/trace.h GEN hw/nvram/trace.h GEN hw/display/trace.h GEN hw/input/trace.h GEN hw/timer/trace.h GEN hw/dma/trace.h GEN hw/sparc/trace.h GEN hw/sd/trace.h GEN hw/isa/trace.h GEN hw/mem/trace.h GEN hw/i386/trace.h GEN hw/i386/xen/trace.h GEN hw/9pfs/trace.h GEN hw/ppc/trace.h GEN hw/pci/trace.h GEN hw/s390x/trace.h GEN hw/vfio/trace.h GEN hw/acpi/trace.h GEN hw/arm/trace.h GEN hw/alpha/trace.h GEN hw/xen/trace.h GEN ui/trace.h GEN audio/trace.h GEN net/trace.h GEN target/arm/trace.h GEN target/i386/trace.h GEN target/mips/trace.h GEN target/sparc/trace.h GEN target/s390x/trace.h GEN target/ppc/trace.h GEN qom/trace.h GEN linux-user/trace.h GEN qapi/trace.h GEN accel/tcg/trace.h GEN accel/kvm/trace.h GEN nbd/trace.h GEN trace-root.c GEN util/trace.c GEN crypto/trace.c GEN io/trace.c GEN migration/trace.c GEN block/trace.c GEN chardev/trace.c GEN hw/block/trace.c GEN hw/block/dataplane/trace.c GEN hw/char/trace.c GEN hw/intc/trace.c GEN hw/net/trace.c GEN hw/virtio/trace.c GEN hw/audio/trace.c GEN hw/misc/trace.c GEN hw/usb/trace.c GEN hw/scsi/trace.c GEN hw/nvram/trace.c GEN hw/display/trace.c GEN hw/input/trace.c GEN hw/timer/trace.c GEN hw/dma/trace.c GEN hw/sparc/trace.c GEN hw/sd/trace.c GEN hw/isa/trace.c GEN hw/mem/trace.c GEN hw/i386/trace.c GEN hw/i386/xen/trace.c GEN hw/9pfs/trace.c GEN hw/ppc/trace.c GEN hw/pci/trace.c GEN hw/s390x/trace.c GEN hw/vfio/trace.c GEN hw/acpi/trace.c GEN hw/arm/trace.c GEN hw/alpha/trace.c GEN hw/xen/trace.c GEN ui/trace.c GEN audio/trace.c GEN net/trace.c GEN target/arm/trace.c GEN target/i386/trace.c GEN target/mips/trace.c GEN target/sparc/trace.c GEN target/s390x/trace.c GEN target/ppc/trace.c GEN qom/trace.c GEN linux-user/trace.c GEN qapi/trace.c GEN accel/tcg/trace.c GEN accel/kvm/trace.c GEN nbd/trace.c GEN config-all-devices.mak GEN qga/qapi-generated/qga-qapi-types.h GEN qga/qapi-generated/qga-qapi-visit.h GEN qga/qapi-generated/qga-qmp-commands.h GEN qga/qapi-generated/qga-qapi-types.c GEN qga/qapi-generated/qga-qapi-visit.c GEN qga/qapi-generated/qga-qmp-marshal.c CC qmp-introspect.o CC qapi-types.o CC qapi-visit.o CC qapi-event.o CC qapi/qapi-visit-core.o CC qapi/qapi-dealloc-visitor.o CC qapi/qobject-input-visitor.o CC qapi/qobject-output-visitor.o CC qapi/qmp-registry.o CC qapi/qmp-dispatch.o CC qapi/string-input-visitor.o CC qapi/string-output-visitor.o CC qapi/opts-visitor.o CC qapi/qapi-clone-visitor.o CC qapi/qmp-event.o CC qapi/qapi-util.o CC qobject/qnull.o CC qobject/qnum.o CC qobject/qstring.o CC qobject/qdict.o CC qobject/qlist.o CC qobject/qbool.o CC qobject/qjson.o CC qobject/qobject.o CC qobject/json-lexer.o CC qobject/json-streamer.o CC qobject/json-parser.o CC trace/control.o CC trace/qmp.o CC util/osdep.o CC util/cutils.o CC util/unicode.o CC util/qemu-timer-common.o CC util/bufferiszero.o CC util/lockcnt.o CC util/aiocb.o CC util/async.o CC util/thread-pool.o CC util/qemu-timer.o CC util/main-loop.o CC util/iohandler.o CC util/aio-posix.o CC util/compatfd.o CC util/event_notifier-posix.o CC util/mmap-alloc.o CC util/oslib-posix.o CC util/qemu-openpty.o CC util/qemu-thread-posix.o CC util/memfd.o CC util/envlist.o CC util/path.o CC util/module.o CC util/host-utils.o CC util/bitmap.o CC util/bitops.o CC util/hbitmap.o CC util/fifo8.o CC util/acl.o CC util/cacheinfo.o CC util/error.o CC util/qemu-error.o CC util/id.o CC util/iov.o CC util/qemu-config.o CC util/qemu-sockets.o CC util/uri.o CC util/notify.o CC util/qemu-option.o CC util/qemu-progress.o CC util/keyval.o CC util/hexdump.o CC util/crc32c.o CC util/uuid.o CC util/throttle.o CC util/getauxval.o CC util/readline.o CC util/rcu.o CC util/qemu-coroutine.o CC util/qemu-coroutine-lock.o CC util/qemu-coroutine-io.o CC util/qemu-coroutine-sleep.o CC util/coroutine-ucontext.o CC util/buffer.o CC util/timed-average.o CC util/base64.o CC util/log.o CC util/qdist.o CC util/qht.o CC util/range.o CC util/stats64.o CC util/systemd.o CC trace-root.o CC util/trace.o CC crypto/trace.o CC io/trace.o CC migration/trace.o CC block/trace.o CC chardev/trace.o CC hw/block/trace.o CC hw/block/dataplane/trace.o CC hw/char/trace.o CC hw/intc/trace.o CC hw/net/trace.o CC hw/virtio/trace.o CC hw/audio/trace.o CC hw/misc/trace.o CC hw/usb/trace.o CC hw/scsi/trace.o CC hw/nvram/trace.o CC hw/display/trace.o CC hw/input/trace.o CC hw/timer/trace.o CC hw/dma/trace.o CC hw/sparc/trace.o CC hw/sd/trace.o CC hw/isa/trace.o CC hw/mem/trace.o CC hw/i386/trace.o CC hw/i386/xen/trace.o CC hw/9pfs/trace.o CC hw/ppc/trace.o CC hw/pci/trace.o CC hw/s390x/trace.o CC hw/vfio/trace.o CC hw/acpi/trace.o CC hw/arm/trace.o CC hw/alpha/trace.o CC hw/xen/trace.o CC ui/trace.o CC audio/trace.o CC net/trace.o CC target/arm/trace.o CC target/i386/trace.o CC target/mips/trace.o CC target/sparc/trace.o CC target/s390x/trace.o CC target/ppc/trace.o CC qom/trace.o CC linux-user/trace.o CC qapi/trace.o CC accel/tcg/trace.o CC accel/kvm/trace.o CC nbd/trace.o CC crypto/pbkdf-stub.o CC stubs/arch-query-cpu-def.o CC stubs/arch-query-cpu-model-expansion.o CC stubs/arch-query-cpu-model-comparison.o CC stubs/arch-query-cpu-model-baseline.o CC stubs/bdrv-next-monitor-owned.o CC stubs/blk-commit-all.o CC stubs/blockdev-close-all-bdrv-states.o CC stubs/clock-warp.o CC stubs/cpu-get-clock.o CC stubs/cpu-get-icount.o CC stubs/dump.o CC stubs/error-printf.o CC stubs/fdset.o CC stubs/gdbstub.o CC stubs/get-vm-name.o CC stubs/iothread.o CC stubs/iothread-lock.o CC stubs/is-daemonized.o CC stubs/machine-init-done.o CC stubs/migr-blocker.o CC stubs/monitor.o CC stubs/notify-event.o CC stubs/qtest.o CC stubs/replay.o CC stubs/runstate-check.o CC stubs/set-fd-handler.o CC stubs/slirp.o CC stubs/sysbus.o CC stubs/trace-control.o CC stubs/uuid.o CC stubs/vm-stop.o CC stubs/vmstate.o CC stubs/qmp_pc_dimm_device_list.o CC stubs/target-monitor-defs.o CC stubs/target-get-monitor-def.o CC stubs/pc_madt_cpu_entry.o CC stubs/vmgenid.o CC stubs/xen-common.o CC stubs/xen-hvm.o CC contrib/ivshmem-client/ivshmem-client.o CC contrib/ivshmem-client/main.o CC contrib/ivshmem-server/ivshmem-server.o CC contrib/ivshmem-server/main.o CC qemu-nbd.o CC blockjob.o CC block.o CC qemu-io-cmds.o CC replication.o CC block/raw-format.o CC block/qcow.o CC block/vdi.o CC block/vmdk.o CC block/cloop.o CC block/bochs.o CC block/vpc.o CC block/vvfat.o CC block/dmg.o CC block/qcow2.o CC block/qcow2-refcount.o CC block/qcow2-cluster.o CC block/qcow2-snapshot.o CC block/qcow2-cache.o CC block/qcow2-bitmap.o CC block/qed.o CC block/qed-l2-cache.o CC block/qed-table.o CC block/qed-cluster.o CC block/qed-check.o CC block/vhdx.o CC block/vhdx-endian.o CC block/vhdx-log.o CC block/quorum.o CC block/parallels.o CC block/blkdebug.o CC block/blkverify.o CC block/blkreplay.o CC block/block-backend.o CC block/snapshot.o CC block/qapi.o CC block/file-posix.o CC block/null.o CC block/mirror.o CC block/commit.o CC block/io.o CC block/throttle-groups.o CC block/nbd.o CC block/nbd-client.o CC block/sheepdog.o CC block/accounting.o CC block/dirty-bitmap.o CC block/write-threshold.o CC block/backup.o CC block/replication.o CC block/crypto.o CC nbd/server.o CC nbd/client.o CC nbd/common.o CC block/curl.o CC block/dmg-bz2.o CC crypto/init.o CC crypto/hash.o CC crypto/hash-glib.o CC crypto/hmac.o CC crypto/hmac-glib.o CC crypto/aes.o CC crypto/desrfb.o CC crypto/cipher.o CC crypto/tlscreds.o CC crypto/tlscredsanon.o CC crypto/tlscredsx509.o CC crypto/tlssession.o CC crypto/secret.o CC crypto/random-platform.o CC crypto/pbkdf.o CC crypto/ivgen.o CC crypto/ivgen-essiv.o CC crypto/ivgen-plain.o CC crypto/ivgen-plain64.o CC crypto/afsplit.o CC crypto/xts.o CC crypto/block.o CC crypto/block-qcow.o CC crypto/block-luks.o CC io/channel.o CC io/channel-buffer.o CC io/channel-command.o CC io/channel-file.o CC io/channel-socket.o CC io/channel-tls.o CC io/channel-watch.o CC io/channel-websock.o CC io/channel-util.o CC io/dns-resolver.o CC io/task.o CC qom/object.o CC qom/container.o CC qom/qom-qobject.o CC qom/object_interfaces.o GEN qemu-img-cmds.h CC qemu-io.o CC blockdev.o CC blockdev-nbd.o CC bootdevice.o CC iothread.o CC qdev-monitor.o CC device-hotplug.o CC os-posix.o CC bt-host.o CC bt-vhci.o CC dma-helpers.o CC vl.o CC tpm.o CC qmp-marshal.o CC qmp.o CC hmp.o CC cpus-common.o CC audio/audio.o CC audio/noaudio.o CC audio/wavaudio.o CC audio/mixeng.o CC audio/ossaudio.o CC audio/wavcapture.o CC backends/rng.o CC backends/rng-egd.o CC backends/rng-random.o CC backends/tpm.o CC backends/hostmem.o CC backends/hostmem-ram.o CC backends/cryptodev.o CC backends/cryptodev-builtin.o CC block/stream.o CC chardev/msmouse.o CC chardev/wctablet.o CC chardev/testdev.o CC disas/i386.o CC hw/acpi/core.o CC hw/acpi/piix4.o CC hw/acpi/pcihp.o CC hw/acpi/ich9.o CC hw/acpi/tco.o CC hw/acpi/cpu_hotplug.o CC hw/acpi/memory_hotplug.o CC hw/acpi/cpu.o CC hw/acpi/nvdimm.o CC hw/acpi/vmgenid.o CC hw/acpi/acpi_interface.o CC hw/acpi/bios-linker-loader.o CC hw/acpi/aml-build.o CC hw/acpi/ipmi.o CC hw/acpi/acpi-stub.o CC hw/acpi/ipmi-stub.o CC hw/audio/sb16.o CC hw/audio/es1370.o CC hw/audio/ac97.o CC hw/audio/fmopl.o CC hw/audio/adlib.o CC hw/audio/gus.o CC hw/audio/gusemu_hal.o CC hw/audio/gusemu_mixer.o CC hw/audio/cs4231a.o CC hw/audio/intel-hda.o CC hw/audio/hda-codec.o CC hw/audio/pcspk.o CC hw/audio/soundhw.o CC hw/block/block.o CC hw/block/cdrom.o CC hw/block/hd-geometry.o CC hw/block/fdc.o CC hw/block/pflash_cfi01.o CC hw/block/nvme.o CC hw/bt/core.o CC hw/bt/l2cap.o CC hw/bt/sdp.o CC hw/bt/hci.o CC hw/bt/hid.o CC hw/bt/hci-csr.o CC hw/char/ipoctal232.o CC hw/char/parallel.o CC hw/char/serial.o CC hw/char/serial-isa.o CC hw/char/serial-pci.o CC hw/char/virtio-console.o CC hw/char/debugcon.o CC hw/core/qdev.o CC hw/core/qdev-properties.o CC hw/core/bus.o CC hw/core/reset.o CC hw/core/fw-path-provider.o CC hw/core/irq.o CC hw/core/hotplug.o CC hw/core/nmi.o CC hw/core/sysbus.o CC hw/core/machine.o CC hw/core/loader.o CC hw/core/qdev-properties-system.o CC hw/core/register.o CC hw/core/or-irq.o CC hw/cpu/core.o CC hw/display/cirrus_vga.o CC hw/display/vga-pci.o CC hw/display/vga-isa.o CC hw/display/vmware_vga.o CC hw/dma/i8257.o CC hw/i2c/core.o CC hw/i2c/smbus.o CC hw/i2c/smbus_eeprom.o CC hw/i2c/smbus_ich9.o CC hw/i2c/pm_smbus.o CC hw/ide/core.o CC hw/ide/atapi.o CC hw/ide/qdev.o CC hw/ide/pci.o CC hw/ide/isa.o CC hw/ide/piix.o CC hw/ide/ahci.o CC hw/ide/ich.o CC hw/input/hid.o CC hw/input/pckbd.o CC hw/input/ps2.o CC hw/input/vmmouse.o CC hw/input/virtio-input.o CC hw/input/virtio-input-hid.o CC hw/intc/i8259_common.o CC hw/intc/i8259.o CC hw/intc/ioapic_common.o CC hw/intc/intc.o CC hw/ipack/ipack.o CC hw/ipack/tpci200.o CC hw/ipmi/ipmi.o CC hw/ipmi/ipmi_bmc_sim.o CC hw/ipmi/ipmi_bmc_extern.o CC hw/ipmi/isa_ipmi_kcs.o CC hw/ipmi/isa_ipmi_bt.o CC hw/isa/isa-bus.o CC hw/isa/apm.o CC hw/mem/pc-dimm.o CC hw/mem/nvdimm.o CC hw/misc/applesmc.o CC hw/misc/debugexit.o CC hw/misc/sga.o CC hw/misc/pc-testdev.o CC hw/misc/pci-testdev.o CC hw/misc/edu.o CC hw/misc/unimp.o CC hw/net/ne2000.o CC hw/net/eepro100.o CC hw/net/pcnet-pci.o CC hw/net/pcnet.o CC hw/net/e1000.o CC hw/net/e1000x_common.o CC hw/net/net_tx_pkt.o CC hw/net/net_rx_pkt.o CC hw/net/e1000e.o CC hw/net/e1000e_core.o CC hw/net/rtl8139.o CC hw/net/vmxnet3.o CC hw/net/ne2000-isa.o CC hw/net/rocker/rocker.o CC hw/net/rocker/rocker_fp.o CC hw/net/rocker/rocker_desc.o CC hw/net/rocker/rocker_world.o CC hw/net/rocker/rocker_of_dpa.o CC hw/nvram/eeprom93xx.o CC hw/nvram/fw_cfg.o CC hw/nvram/chrp_nvram.o CC hw/pci-bridge/pci_bridge_dev.o CC hw/pci-bridge/pcie_root_port.o CC hw/pci-bridge/gen_pcie_root_port.o CC hw/pci-bridge/pci_expander_bridge.o CC hw/pci-bridge/xio3130_upstream.o CC hw/pci-bridge/xio3130_downstream.o CC hw/pci-bridge/ioh3420.o CC hw/pci-bridge/i82801b11.o CC hw/pci-host/pam.o CC hw/pci-host/piix.o CC hw/pci-host/q35.o CC hw/pci/pci.o CC hw/pci/pci_bridge.o CC hw/pci/msix.o CC hw/pci/msi.o CC hw/pci/shpc.o CC hw/pci/slotid_cap.o CC hw/pci/pci_host.o CC hw/pci/pcie_host.o CC hw/pci/pcie.o CC hw/pci/pcie_aer.o CC hw/pci/pcie_port.o CC hw/pci/pci-stub.o CC hw/pcmcia/pcmcia.o CC hw/scsi/scsi-disk.o CC hw/scsi/scsi-generic.o CC hw/scsi/scsi-bus.o CC hw/scsi/lsi53c895a.o CC hw/scsi/mptsas.o CC hw/scsi/mptconfig.o CC hw/scsi/mptendian.o CC hw/scsi/megasas.o CC hw/scsi/vmw_pvscsi.o CC hw/scsi/esp.o CC hw/scsi/esp-pci.o CC hw/sd/sd.o CC hw/sd/core.o CC hw/sd/sdhci.o CC hw/smbios/smbios.o CC hw/smbios/smbios_type_38.o CC hw/smbios/smbios-stub.o CC hw/smbios/smbios_type_38-stub.o CC hw/timer/hpet.o CC hw/timer/i8254_common.o CC hw/timer/i8254.o CC hw/tpm/tpm_tis.o CC hw/usb/core.o CC hw/usb/combined-packet.o CC hw/usb/bus.o CC hw/usb/libhw.o CC hw/usb/desc.o CC hw/usb/desc-msos.o CC hw/usb/hcd-uhci.o CC hw/usb/hcd-ohci.o CC hw/usb/hcd-ehci.o CC hw/usb/hcd-ehci-pci.o CC hw/usb/hcd-xhci.o CC hw/usb/hcd-xhci-nec.o CC hw/usb/dev-hub.o CC hw/usb/dev-hid.o CC hw/usb/dev-wacom.o CC hw/usb/dev-storage.o CC hw/usb/dev-uas.o CC hw/usb/dev-audio.o CC hw/usb/dev-serial.o CC hw/usb/dev-network.o CC hw/usb/dev-bluetooth.o CC hw/usb/dev-smartcard-reader.o CC hw/usb/dev-mtp.o CC hw/usb/host-libusb.o CC hw/usb/host-legacy.o CC hw/virtio/virtio-rng.o CC hw/virtio/virtio-pci.o CC hw/virtio/virtio-bus.o CC hw/virtio/virtio-mmio.o CC hw/virtio/vhost-stub.o CC hw/watchdog/watchdog.o CC hw/watchdog/wdt_i6300esb.o CC hw/watchdog/wdt_ib700.o CC migration/migration.o CC migration/socket.o CC migration/fd.o CC migration/exec.o CC migration/tls.o CC migration/channel.o CC migration/savevm.o CC migration/colo-comm.o CC migration/colo.o CC migration/colo-failover.o CC migration/vmstate.o CC migration/vmstate-types.o CC migration/page_cache.o CC migration/qemu-file.o CC migration/global_state.o CC migration/qemu-file-channel.o CC migration/xbzrle.o CC migration/postcopy-ram.o CC migration/qjson.o CC migration/block.o CC net/net.o CC net/queue.o CC net/checksum.o CC net/util.o CC net/hub.o CC net/socket.o CC net/dump.o CC net/eth.o CC net/vhost-user.o CC net/slirp.o CC net/netmap.o CC net/filter.o CC net/filter-buffer.o CC net/filter-mirror.o CC net/colo-compare.o CC net/colo.o CC net/filter-rewriter.o CC net/filter-replay.o CC net/tap.o CC net/tap-bsd.o CC qom/cpu.o CC replay/replay.o CC replay/replay-internal.o CC replay/replay-events.o CC replay/replay-time.o CC replay/replay-input.o CC replay/replay-char.o CC replay/replay-snapshot.o CC replay/replay-net.o CC replay/replay-audio.o CC slirp/cksum.o CC slirp/if.o CC slirp/ip_icmp.o CC slirp/ip6_icmp.o CC slirp/ip6_input.o CC slirp/ip6_output.o CC slirp/ip_input.o CC slirp/ip_output.o CC slirp/dnssearch.o CC slirp/dhcpv6.o CC slirp/slirp.o CC slirp/mbuf.o CC slirp/misc.o CC slirp/sbuf.o CC slirp/socket.o CC slirp/tcp_input.o CC slirp/tcp_output.o CC slirp/tcp_subr.o CC slirp/tcp_timer.o CC slirp/udp.o CC slirp/udp6.o CC slirp/bootp.o CC slirp/tftp.o CC slirp/arp_table.o CC slirp/ndp_table.o CC slirp/ncsi.o CC ui/keymaps.o CC ui/console.o CC ui/cursor.o CC ui/qemu-pixman.o CC ui/input.o CC ui/input-keymap.o CC ui/input-legacy.o CC ui/curses.o CC ui/vnc.o CC ui/vnc-enc-zlib.o CC ui/vnc-enc-hextile.o CC ui/vnc-enc-tight.o CC ui/vnc-palette.o CC ui/vnc-enc-zrle.o CC ui/vnc-auth-vencrypt.o CC ui/vnc-ws.o CC ui/vnc-jobs.o CC chardev/char.o CC chardev/char-fd.o CC chardev/char-fe.o CC chardev/char-file.o CC chardev/char-io.o CC chardev/char-mux.o CC chardev/char-null.o CC chardev/char-parallel.o CC chardev/char-pipe.o CC chardev/char-pty.o CC chardev/char-ringbuf.o CC chardev/char-serial.o CC chardev/char-socket.o CC chardev/char-stdio.o CC chardev/char-udp.o AS optionrom/multiboot.o AS optionrom/linuxboot.o CC optionrom/linuxboot_dma.o AS optionrom/kvmvapic.o BUILD optionrom/multiboot.img BUILD optionrom/linuxboot.img BUILD optionrom/linuxboot_dma.img BUILD optionrom/kvmvapic.img BUILD optionrom/multiboot.raw BUILD optionrom/linuxboot.raw BUILD optionrom/linuxboot_dma.raw BUILD optionrom/kvmvapic.raw SIGN optionrom/multiboot.bin SIGN optionrom/linuxboot.bin SIGN optionrom/linuxboot_dma.bin SIGN optionrom/kvmvapic.bin CC qga/commands.o CC qga/guest-agent-command-state.o CC qga/main.o CC qga/commands-posix.o CC qga/channel-posix.o CC qga/qapi-generated/qga-qapi-types.o CC qga/qapi-generated/qga-qapi-visit.o CC qga/qapi-generated/qga-qmp-marshal.o AR libqemuutil.a AR libqemustub.a CC qemu-img.o LINK qemu-io LINK ivshmem-client LINK ivshmem-server LINK qemu-nbd LINK qemu-ga GEN x86_64-softmmu/hmp-commands.h GEN x86_64-softmmu/hmp-commands-info.h GEN x86_64-softmmu/config-target.h CC x86_64-softmmu/exec.o CC x86_64-softmmu/tcg/tcg.o CC x86_64-softmmu/tcg/tcg-op.o CC x86_64-softmmu/tcg/optimize.o LINK qemu-img CC x86_64-softmmu/tcg/tcg-common.o CC x86_64-softmmu/tcg/tcg-runtime.o CC x86_64-softmmu/fpu/softfloat.o CC x86_64-softmmu/disas.o GEN x86_64-softmmu/gdbstub-xml.c CC x86_64-softmmu/hax-stub.o CC x86_64-softmmu/arch_init.o CC x86_64-softmmu/cpus.o CC x86_64-softmmu/monitor.o CC x86_64-softmmu/gdbstub.o CC x86_64-softmmu/balloon.o CC x86_64-softmmu/ioport.o CC x86_64-softmmu/numa.o CC x86_64-softmmu/qtest.o CC x86_64-softmmu/memory.o CC x86_64-softmmu/memory_mapping.o CC x86_64-softmmu/dump.o CC x86_64-softmmu/migration/ram.o CC x86_64-softmmu/accel/accel.o CC x86_64-softmmu/accel/stubs/kvm-stub.o CC x86_64-softmmu/accel/tcg/tcg-all.o CC x86_64-softmmu/accel/tcg/cputlb.o CC x86_64-softmmu/accel/tcg/cpu-exec.o CC x86_64-softmmu/accel/tcg/cpu-exec-common.o CC x86_64-softmmu/accel/tcg/translate-all.o CC x86_64-softmmu/hw/block/virtio-blk.o CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o CC x86_64-softmmu/hw/char/virtio-serial-bus.o CC x86_64-softmmu/hw/core/generic-loader.o CC x86_64-softmmu/hw/core/null-machine.o CC x86_64-softmmu/hw/display/vga.o CC x86_64-softmmu/hw/display/virtio-gpu.o CC x86_64-softmmu/hw/display/virtio-gpu-3d.o CC x86_64-softmmu/hw/display/virtio-gpu-pci.o CC x86_64-softmmu/hw/display/virtio-vga.o CC x86_64-softmmu/hw/intc/apic.o CC x86_64-softmmu/hw/intc/apic_common.o CC x86_64-softmmu/hw/intc/ioapic.o CC x86_64-softmmu/hw/isa/lpc_ich9.o CC x86_64-softmmu/hw/misc/vmport.o CC x86_64-softmmu/hw/misc/pvpanic.o CC x86_64-softmmu/hw/misc/mmio_interface.o CC x86_64-softmmu/hw/net/virtio-net.o CC x86_64-softmmu/hw/net/vhost_net.o CC x86_64-softmmu/hw/scsi/virtio-scsi.o CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o CC x86_64-softmmu/hw/scsi/vhost-scsi-common.o CC x86_64-softmmu/hw/scsi/vhost-user-scsi.o CC x86_64-softmmu/hw/timer/mc146818rtc.o CC x86_64-softmmu/hw/virtio/virtio.o CC x86_64-softmmu/hw/virtio/virtio-balloon.o CC x86_64-softmmu/hw/virtio/virtio-crypto.o CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o CC x86_64-softmmu/hw/i386/multiboot.o CC x86_64-softmmu/hw/i386/pc.o CC x86_64-softmmu/hw/i386/pc_piix.o CC x86_64-softmmu/hw/i386/pc_q35.o CC x86_64-softmmu/hw/i386/pc_sysfw.o CC x86_64-softmmu/hw/i386/x86-iommu.o CC x86_64-softmmu/hw/i386/intel_iommu.o CC x86_64-softmmu/hw/i386/amd_iommu.o CC x86_64-softmmu/hw/i386/kvmvapic.o CC x86_64-softmmu/hw/i386/acpi-build.o CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o CC x86_64-softmmu/target/i386/helper.o CC x86_64-softmmu/target/i386/cpu.o CC x86_64-softmmu/target/i386/gdbstub.o CC x86_64-softmmu/target/i386/xsave_helper.o CC x86_64-softmmu/target/i386/translate.o CC x86_64-softmmu/target/i386/bpt_helper.o CC x86_64-softmmu/target/i386/cc_helper.o CC x86_64-softmmu/target/i386/excp_helper.o CC x86_64-softmmu/target/i386/fpu_helper.o CC x86_64-softmmu/target/i386/int_helper.o CC x86_64-softmmu/target/i386/mem_helper.o CC x86_64-softmmu/target/i386/misc_helper.o CC x86_64-softmmu/target/i386/mpx_helper.o CC x86_64-softmmu/target/i386/seg_helper.o CC x86_64-softmmu/target/i386/smm_helper.o CC x86_64-softmmu/target/i386/svm_helper.o CC x86_64-softmmu/target/i386/machine.o CC x86_64-softmmu/target/i386/arch_memory_mapping.o CC x86_64-softmmu/target/i386/arch_dump.o CC x86_64-softmmu/target/i386/monitor.o CC x86_64-softmmu/target/i386/kvm-stub.o GEN trace/generated-helpers.c CC x86_64-softmmu/trace/control-target.o CC x86_64-softmmu/gdbstub-xml.o CC x86_64-softmmu/trace/generated-helpers.o LINK x86_64-softmmu/qemu-system-x86_64 hw/scsi/vhost-scsi-common.o: In function `vhost_scsi_common_start': /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:41: undefined reference to `vhost_dev_enable_notifiers' /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:53: undefined reference to `vhost_dev_start' /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:64: undefined reference to `vhost_virtqueue_mask' /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:72: undefined reference to `vhost_dev_disable_notifiers' hw/scsi/vhost-scsi-common.o: In function `vhost_scsi_common_stop': /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:83: undefined reference to `vhost_dev_stop' /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:93: undefined reference to `vhost_dev_disable_notifiers' hw/scsi/vhost-scsi-common.o: In function `vhost_scsi_common_get_features': /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:101: undefined reference to `vhost_get_features' hw/scsi/vhost-user-scsi.o: In function `vhost_user_scsi_realize': /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-user-scsi.c:94: undefined reference to `vhost_dev_init' hw/scsi/vhost-user-scsi.o: In function `vhost_user_scsi_unrealize': /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-user-scsi.c:117: undefined reference to `vhost_dev_cleanup' c++: error: linker command failed with exit code 1 (use -v to see invocation) gmake[1]: *** [Makefile:197: qemu-system-x86_64] Error 1 gmake: *** [Makefile:328: subdir-x86_64-softmmu] Error 2 === OUTPUT END === Test command exited with code: 2 --- Email generated automatically by Patchew [http://patchew.org/]. Please send your feedback to patchew-devel@freelists.org
----- Original Message ----- > Hi, > > This series failed build test on FreeBSD host. Please find the details below. > ... > GEN trace/generated-helpers.c > CC x86_64-softmmu/trace/control-target.o > CC x86_64-softmmu/gdbstub-xml.o > CC x86_64-softmmu/trace/generated-helpers.o > LINK x86_64-softmmu/qemu-system-x86_64 > hw/scsi/vhost-scsi-common.o: In function `vhost_scsi_common_start': > /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:41: > undefined reference to `vhost_dev_enable_notifiers' > /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:53: > undefined reference to `vhost_dev_start' > /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:64: > undefined reference to `vhost_virtqueue_mask' > /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:72: > undefined reference to `vhost_dev_disable_notifiers' > hw/scsi/vhost-scsi-common.o: In function `vhost_scsi_common_stop': > /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:83: > undefined reference to `vhost_dev_stop' > /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:93: > undefined reference to `vhost_dev_disable_notifiers' > hw/scsi/vhost-scsi-common.o: In function `vhost_scsi_common_get_features': > /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-scsi-common.c:101: > undefined reference to `vhost_get_features' > hw/scsi/vhost-user-scsi.o: In function `vhost_user_scsi_realize': > /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-user-scsi.c:94: > undefined reference to `vhost_dev_init' > hw/scsi/vhost-user-scsi.o: In function `vhost_user_scsi_unrealize': > /var/tmp/patchew-tester-tmp-rj56yzun/src/hw/scsi/vhost-user-scsi.c:117: > undefined reference to `vhost_dev_cleanup' > c++: error: linker command failed with exit code 1 (use -v to see invocation) > gmake[1]: *** [Makefile:197: qemu-system-x86_64] Error 1 > gmake: *** [Makefile:328: subdir-x86_64-softmmu] Error 2 That should help: diff --git a/default-configs/pci.mak b/default-configs/pci.mak index 708d7b19ad..5fe530e58d 100644 --- a/default-configs/pci.mak +++ b/default-configs/pci.mak @@ -43,4 +43,4 @@ CONFIG_VGA=y CONFIG_VGA_PCI=y CONFIG_IVSHMEM=$(CONFIG_EVENTFD) CONFIG_ROCKER=y -CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) +CONFIG_VHOST_USER_SCSI=$(and $(CONFIG_VHOST_USER),$(CONFIG_LINUX)) diff --git a/default-configs/s390x-softmmu.mak b/default-configs/s390x-softmmu.mak index bb870477f8..51191b77df 100644 --- a/default-configs/s390x-softmmu.mak +++ b/default-configs/s390x-softmmu.mak @@ -1,6 +1,6 @@ CONFIG_PCI=y CONFIG_VIRTIO_PCI=y -CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) +CONFIG_VHOST_USER_SCSI=$(and $(CONFIG_VHOST_USER),$(CONFIG_LINUX)) CONFIG_VIRTIO=y CONFIG_SCLPCONSOLE=y CONFIG_TERMINAL3270=y diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 8cc836e9f2..8b0d6b69cd 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -2135,7 +2135,7 @@ static const TypeInfo vhost_scsi_pci_info = { }; #endif -#ifdef CONFIG_VHOST_USER_SCSI +#if defined(CONFIG_VHOST_USER) && defined(CONFIG_LINUX) /* vhost-user-scsi-pci */ static Property vhost_user_scsi_pci_properties[] = { DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, @@ -2665,7 +2665,7 @@ static void virtio_pci_register_types(void) #ifdef CONFIG_VHOST_SCSI type_register_static(&vhost_scsi_pci_info); #endif -#ifdef CONFIG_VHOST_USER_SCSI +#if defined(CONFIG_VHOST_USER) && defined(CONFIG_LINUX) type_register_static(&vhost_user_scsi_pci_info); #endif #ifdef CONFIG_VHOST_VSOCK
On Tue, Jul 18, 2017 at 06:34:37PM +0200, Marc-André Lureau wrote: > Learn to compile out vhost-user. Keep it enabled by default on > non-mingw, that is assumed to be on POSIX. > > When trying to make a vhost-user netdev, it gives the following error: > > -netdev vhost-user,id=foo,chardev=chr-test: Parameter 'type' expects a netdev backend type > > And similar error with the HMP/QMP monitors. > > In the future, we may want to hide vhost-user from QAPI/introspection > with conditional compilation, although the design of this hasn't been > fully fleshed out yet and shouldn't prevent this patch from being > applied. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> What's the reason we want to do this though? > --- > hw/net/vhost_net.c | 12 ++++++++++-- > hw/net/virtio-net.c | 4 ++++ > hw/virtio/virtio-pci.c | 4 ++-- > net/hub.c | 2 ++ > net/net.c | 4 +++- > configure | 22 +++++++++++++++++++++- > default-configs/pci.mak | 2 +- > default-configs/s390x-softmmu.mak | 2 +- > net/Makefile.objs | 2 +- > qemu-options.hx | 4 ++++ > tests/Makefile.include | 6 +++--- > 11 files changed, 52 insertions(+), 12 deletions(-) > > diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c > index e037db63a3..565a1cc99d 100644 > --- a/hw/net/vhost_net.c > +++ b/hw/net/vhost_net.c > @@ -56,6 +56,7 @@ static const int kernel_feature_bits[] = { > VHOST_INVALID_FEATURE_BIT > }; > > +#ifdef CONFIG_VHOST_USER > /* Features supported by others. */ > static const int user_feature_bits[] = { > VIRTIO_F_NOTIFY_ON_EMPTY, > @@ -86,6 +87,7 @@ static const int user_feature_bits[] = { > > VHOST_INVALID_FEATURE_BIT > }; > +#endif > > static const int *vhost_net_get_feature_bits(struct vhost_net *net) > { > @@ -95,9 +97,11 @@ static const int *vhost_net_get_feature_bits(struct vhost_net *net) > case NET_CLIENT_DRIVER_TAP: > feature_bits = kernel_feature_bits; > break; > +#ifdef CONFIG_VHOST_USER > case NET_CLIENT_DRIVER_VHOST_USER: > feature_bits = user_feature_bits; > break; > +#endif > default: > error_report("Feature bits not defined for this type: %d", > net->nc->info->type); > @@ -193,6 +197,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > } > } > > +#ifdef CONFIG_VHOST_USER > /* Set sane init value. Override when guest acks. */ > if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > features = vhost_user_get_acked_features(net->nc); > @@ -203,7 +208,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > goto fail; > } > } > - > +#endif > vhost_net_ack_features(net, features); > > return net; > @@ -309,6 +314,7 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, > net = get_vhost_net(ncs[i].peer); > vhost_net_set_vq_index(net, i * 2); > > +#ifdef CONFIG_VHOST_USER > /* Suppress the masking guest notifiers on vhost user > * because vhost user doesn't interrupt masking/unmasking > * properly. > @@ -316,8 +322,8 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, > if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > dev->use_guest_notifier_mask = false; > } > +#endif > } > - > r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true); > if (r < 0) { > error_report("Error binding guest notifier: %d", -r); > @@ -414,10 +420,12 @@ VHostNetState *get_vhost_net(NetClientState *nc) > case NET_CLIENT_DRIVER_TAP: > vhost_net = tap_get_vhost_net(nc); > break; > +#ifdef CONFIG_VHOST_USER > case NET_CLIENT_DRIVER_VHOST_USER: > vhost_net = vhost_user_get_vhost_net(nc); > assert(vhost_net); > break; > +#endif > default: > break; > } > diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c > index 148071a396..9bda4ab4f8 100644 > --- a/hw/net/virtio-net.c > +++ b/hw/net/virtio-net.c > @@ -524,9 +524,11 @@ static int peer_attach(VirtIONet *n, int index) > return 0; > } > > +#ifdef CONFIG_VHOST_USER > if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > vhost_set_vring_enable(nc->peer, 1); > } > +#endif > > if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) { > return 0; > @@ -547,9 +549,11 @@ static int peer_detach(VirtIONet *n, int index) > return 0; > } > > +#ifdef CONFIG_VHOST_USER > if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > vhost_set_vring_enable(nc->peer, 0); > } > +#endif > > if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) { > return 0; > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > index 5d14bd66dc..85b82e6c94 100644 > --- a/hw/virtio/virtio-pci.c > +++ b/hw/virtio/virtio-pci.c > @@ -2135,7 +2135,7 @@ static const TypeInfo vhost_scsi_pci_info = { > }; > #endif > > -#ifdef CONFIG_LINUX > +#ifdef CONFIG_VHOST_USER > /* vhost-user-scsi-pci */ > static Property vhost_user_scsi_pci_properties[] = { > DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, > @@ -2665,7 +2665,7 @@ static void virtio_pci_register_types(void) > #ifdef CONFIG_VHOST_SCSI > type_register_static(&vhost_scsi_pci_info); > #endif > -#ifdef CONFIG_LINUX > +#ifdef CONFIG_VHOST_USER > type_register_static(&vhost_user_scsi_pci_info); > #endif > #ifdef CONFIG_VHOST_VSOCK > diff --git a/net/hub.c b/net/hub.c > index 32d8cf5cd4..ec06275ff6 100644 > --- a/net/hub.c > +++ b/net/hub.c > @@ -322,7 +322,9 @@ void net_hub_check_clients(void) > case NET_CLIENT_DRIVER_TAP: > case NET_CLIENT_DRIVER_SOCKET: > case NET_CLIENT_DRIVER_VDE: > +#ifdef CONFIG_VHOST_USER > case NET_CLIENT_DRIVER_VHOST_USER: > +#endif > has_host_dev = 1; > break; > default: > diff --git a/net/net.c b/net/net.c > index 0e28099554..d11909421c 100644 > --- a/net/net.c > +++ b/net/net.c > @@ -957,7 +957,7 @@ static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])( > [NET_CLIENT_DRIVER_BRIDGE] = net_init_bridge, > #endif > [NET_CLIENT_DRIVER_HUBPORT] = net_init_hubport, > -#ifdef CONFIG_VHOST_NET_USED > +#if defined(CONFIG_VHOST_NET_USED) && defined(CONFIG_VHOST_USER) > [NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user, > #endif > #ifdef CONFIG_L2TPV3 > @@ -1033,10 +1033,12 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp) > legacy.type = NET_CLIENT_DRIVER_NETMAP; > legacy.u.netmap = opts->u.netmap; > break; > +#ifdef CONFIG_VHOST_USER > case NET_LEGACY_OPTIONS_TYPE_VHOST_USER: > legacy.type = NET_CLIENT_DRIVER_VHOST_USER; > legacy.u.vhost_user = opts->u.vhost_user; > break; > +#endif > default: > abort(); > } > diff --git a/configure b/configure > index a3f0522e8f..defb9e9974 100755 > --- a/configure > +++ b/configure > @@ -306,6 +306,7 @@ tcg="yes" > vhost_net="no" > vhost_scsi="no" > vhost_vsock="no" > +vhost_user="" > kvm="no" > hax="no" > rdma="" > @@ -1283,6 +1284,10 @@ for opt do > ;; > --enable-vxhs) vxhs="yes" > ;; > + --disable-vhost-user) vhost_user="no" > + ;; > + --enable-vhost-user) vhost_user="yes" > + ;; > *) > echo "ERROR: unknown option $opt" > echo "Try '$0 --help' for more information" > @@ -1291,6 +1296,14 @@ for opt do > esac > done > > +if test "$vhost_user" = ""; then > + if test "$mingw32" = "yes" ; then > + vhost_user="no" > + else > + vhost_user="yes" > + fi > +fi > + > case "$cpu" in > ppc) > CPU_CFLAGS="-m32" > @@ -1518,6 +1531,7 @@ disabled with --disable-FEATURE, default is enabled if available: > qom-cast-debug cast debugging support > tools build qemu-io, qemu-nbd and qemu-image tools > vxhs Veritas HyperScale vDisk backend support > + vhost-user vhost-user support > > NOTE: The object files are built at the place where configure is launched > EOF > @@ -5278,6 +5292,7 @@ echo "libcap-ng support $cap_ng" > echo "vhost-net support $vhost_net" > echo "vhost-scsi support $vhost_scsi" > echo "vhost-vsock support $vhost_vsock" > +echo "vhost-user support $vhost_user" > echo "Trace backends $trace_backends" > if have_backend "simple"; then > echo "Trace output file $trace_file-<pid>" > @@ -5696,6 +5711,9 @@ fi > if test "$vhost_vsock" = "yes" ; then > echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak > fi > +if test "$vhost_user" = "yes" ; then > + echo "CONFIG_VHOST_USER=y" >> $config_host_mak > +fi > if test "$blobs" = "yes" ; then > echo "INSTALL_BLOBS=yes" >> $config_host_mak > fi > @@ -6279,7 +6297,9 @@ if supported_kvm_target $target; then > echo "CONFIG_KVM=y" >> $config_target_mak > if test "$vhost_net" = "yes" ; then > echo "CONFIG_VHOST_NET=y" >> $config_target_mak > - echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak > + if test "$vhost_user" = "yes" ; then > + echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak > + fi > fi > fi > if supported_hax_target $target; then > diff --git a/default-configs/pci.mak b/default-configs/pci.mak > index 53ff10975c..708d7b19ad 100644 > --- a/default-configs/pci.mak > +++ b/default-configs/pci.mak > @@ -43,4 +43,4 @@ CONFIG_VGA=y > CONFIG_VGA_PCI=y > CONFIG_IVSHMEM=$(CONFIG_EVENTFD) > CONFIG_ROCKER=y > -CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX) > +CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) > diff --git a/default-configs/s390x-softmmu.mak b/default-configs/s390x-softmmu.mak > index b227a36179..bb870477f8 100644 > --- a/default-configs/s390x-softmmu.mak > +++ b/default-configs/s390x-softmmu.mak > @@ -1,6 +1,6 @@ > CONFIG_PCI=y > CONFIG_VIRTIO_PCI=y > -CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX) > +CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) > CONFIG_VIRTIO=y > CONFIG_SCLPCONSOLE=y > CONFIG_TERMINAL3270=y > diff --git a/net/Makefile.objs b/net/Makefile.objs > index 67ba5e26fb..7cac7ed1e4 100644 > --- a/net/Makefile.objs > +++ b/net/Makefile.objs > @@ -3,7 +3,7 @@ common-obj-y += socket.o > common-obj-y += dump.o > common-obj-y += eth.o > common-obj-$(CONFIG_L2TPV3) += l2tpv3.o > -common-obj-$(CONFIG_POSIX) += vhost-user.o > +common-obj-$(CONFIG_VHOST_USER) += vhost-user.o > common-obj-$(CONFIG_SLIRP) += slirp.o > common-obj-$(CONFIG_VDE) += vde.o > common-obj-$(CONFIG_NETMAP) += netmap.o > diff --git a/qemu-options.hx b/qemu-options.hx > index 746b5fa75d..c2d4ae440f 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -1994,8 +1994,10 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev, > " VALE port (created on the fly) called 'name' ('nmname' is name of the \n" > " netmap device, defaults to '/dev/netmap')\n" > #endif > +#ifdef CONFIG_VHOST_USER > "-netdev vhost-user,id=str,chardev=dev[,vhostforce=on|off]\n" > " configure a vhost-user network, backed by a chardev 'dev'\n" > +#endif > "-netdev hubport,id=str,hubid=n\n" > " configure a hub port on QEMU VLAN 'n'\n", QEMU_ARCH_ALL) > DEF("net", HAS_ARG, QEMU_OPTION_net, > @@ -2428,6 +2430,7 @@ The hubport netdev lets you connect a NIC to a QEMU "vlan" instead of a single > netdev. @code{-net} and @code{-device} with parameter @option{vlan} create the > required hub automatically. > > +#ifdef CONFIG_VHOST_USER > @item -netdev vhost-user,chardev=@var{id}[,vhostforce=on|off][,queues=n] > > Establish a vhost-user netdev, backed by a chardev @var{id}. The chardev should > @@ -2445,6 +2448,7 @@ qemu -m 512 -object memory-backend-file,id=mem,size=512M,mem-path=/hugetlbfs,sha > -netdev type=vhost-user,id=net0,chardev=chr0 \ > -device virtio-net-pci,netdev=net0 > @end example > +#endif > > @item -net dump[,vlan=@var{n}][,file=@var{file}][,len=@var{len}] > Dump network traffic on VLAN @var{n} to file @var{file} (@file{qemu-vlan0.pcap} by default). > diff --git a/tests/Makefile.include b/tests/Makefile.include > index cfbb689e0e..6b9a0ce07e 100644 > --- a/tests/Makefile.include > +++ b/tests/Makefile.include > @@ -252,9 +252,9 @@ check-qtest-i386-y += tests/pc-cpu-test$(EXESUF) > check-qtest-i386-y += tests/q35-test$(EXESUF) > check-qtest-i386-y += tests/vmgenid-test$(EXESUF) > gcov-files-i386-y += hw/pci-host/q35.c > -check-qtest-i386-$(CONFIG_VHOST_NET_TEST_i386) += tests/vhost-user-test$(EXESUF) > -ifeq ($(CONFIG_VHOST_NET_TEST_i386),) > -check-qtest-x86_64-$(CONFIG_VHOST_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF) > +check-qtest-i386-$(CONFIG_VHOST_USER_NET_TEST_i386) += tests/vhost-user-test$(EXESUF) > +ifeq ($(CONFIG_VHOST_USER_NET_TEST_i386),) > +check-qtest-x86_64-$(CONFIG_VHOST_USER_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF) > endif > check-qtest-i386-y += tests/test-netfilter$(EXESUF) > check-qtest-i386-y += tests/test-filter-mirror$(EXESUF) > -- > 2.14.0.rc0.1.g40ca67566
On Tue, Jul 18, 2017 at 06:34:37PM +0200, Marc-André Lureau wrote: > Learn to compile out vhost-user. Keep it enabled by default on > non-mingw, that is assumed to be on POSIX. > > When trying to make a vhost-user netdev, it gives the following error: > > -netdev vhost-user,id=foo,chardev=chr-test: Parameter 'type' expects a netdev backend type > > And similar error with the HMP/QMP monitors. > > In the future, we may want to hide vhost-user from QAPI/introspection > with conditional compilation, although the design of this hasn't been > fully fleshed out yet and shouldn't prevent this patch from being > applied. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> After an offline discussion, looks like the idea is to be able to ship a cut down binary with less features (and e.g. smaller attack surface?). Besides failing build on freebsd, this patch has too much ifdefery for my taste. How about we patch just net/net.c? > --- > hw/net/vhost_net.c | 12 ++++++++++-- > hw/net/virtio-net.c | 4 ++++ > hw/virtio/virtio-pci.c | 4 ++-- > net/hub.c | 2 ++ > net/net.c | 4 +++- > configure | 22 +++++++++++++++++++++- > default-configs/pci.mak | 2 +- > default-configs/s390x-softmmu.mak | 2 +- > net/Makefile.objs | 2 +- > qemu-options.hx | 4 ++++ > tests/Makefile.include | 6 +++--- > 11 files changed, 52 insertions(+), 12 deletions(-) > > diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c > index e037db63a3..565a1cc99d 100644 > --- a/hw/net/vhost_net.c > +++ b/hw/net/vhost_net.c > @@ -56,6 +56,7 @@ static const int kernel_feature_bits[] = { > VHOST_INVALID_FEATURE_BIT > }; > > +#ifdef CONFIG_VHOST_USER > /* Features supported by others. */ > static const int user_feature_bits[] = { > VIRTIO_F_NOTIFY_ON_EMPTY, > @@ -86,6 +87,7 @@ static const int user_feature_bits[] = { > > VHOST_INVALID_FEATURE_BIT > }; > +#endif > > static const int *vhost_net_get_feature_bits(struct vhost_net *net) > { > @@ -95,9 +97,11 @@ static const int *vhost_net_get_feature_bits(struct vhost_net *net) > case NET_CLIENT_DRIVER_TAP: > feature_bits = kernel_feature_bits; > break; > +#ifdef CONFIG_VHOST_USER > case NET_CLIENT_DRIVER_VHOST_USER: > feature_bits = user_feature_bits; > break; > +#endif > default: > error_report("Feature bits not defined for this type: %d", > net->nc->info->type); > @@ -193,6 +197,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > } > } > > +#ifdef CONFIG_VHOST_USER > /* Set sane init value. Override when guest acks. */ > if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > features = vhost_user_get_acked_features(net->nc); > @@ -203,7 +208,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > goto fail; > } > } > - > +#endif > vhost_net_ack_features(net, features); > > return net; > @@ -309,6 +314,7 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, > net = get_vhost_net(ncs[i].peer); > vhost_net_set_vq_index(net, i * 2); > > +#ifdef CONFIG_VHOST_USER > /* Suppress the masking guest notifiers on vhost user > * because vhost user doesn't interrupt masking/unmasking > * properly. > @@ -316,8 +322,8 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, > if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > dev->use_guest_notifier_mask = false; > } > +#endif > } > - > r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true); > if (r < 0) { > error_report("Error binding guest notifier: %d", -r); > @@ -414,10 +420,12 @@ VHostNetState *get_vhost_net(NetClientState *nc) > case NET_CLIENT_DRIVER_TAP: > vhost_net = tap_get_vhost_net(nc); > break; > +#ifdef CONFIG_VHOST_USER > case NET_CLIENT_DRIVER_VHOST_USER: > vhost_net = vhost_user_get_vhost_net(nc); > assert(vhost_net); > break; > +#endif > default: > break; > } > diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c > index 148071a396..9bda4ab4f8 100644 > --- a/hw/net/virtio-net.c > +++ b/hw/net/virtio-net.c > @@ -524,9 +524,11 @@ static int peer_attach(VirtIONet *n, int index) > return 0; > } > > +#ifdef CONFIG_VHOST_USER > if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > vhost_set_vring_enable(nc->peer, 1); > } > +#endif > > if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) { > return 0; > @@ -547,9 +549,11 @@ static int peer_detach(VirtIONet *n, int index) > return 0; > } > > +#ifdef CONFIG_VHOST_USER > if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > vhost_set_vring_enable(nc->peer, 0); > } > +#endif > > if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) { > return 0; > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > index 5d14bd66dc..85b82e6c94 100644 > --- a/hw/virtio/virtio-pci.c > +++ b/hw/virtio/virtio-pci.c > @@ -2135,7 +2135,7 @@ static const TypeInfo vhost_scsi_pci_info = { > }; > #endif > > -#ifdef CONFIG_LINUX > +#ifdef CONFIG_VHOST_USER > /* vhost-user-scsi-pci */ > static Property vhost_user_scsi_pci_properties[] = { > DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, > @@ -2665,7 +2665,7 @@ static void virtio_pci_register_types(void) > #ifdef CONFIG_VHOST_SCSI > type_register_static(&vhost_scsi_pci_info); > #endif > -#ifdef CONFIG_LINUX > +#ifdef CONFIG_VHOST_USER > type_register_static(&vhost_user_scsi_pci_info); > #endif > #ifdef CONFIG_VHOST_VSOCK > diff --git a/net/hub.c b/net/hub.c > index 32d8cf5cd4..ec06275ff6 100644 > --- a/net/hub.c > +++ b/net/hub.c > @@ -322,7 +322,9 @@ void net_hub_check_clients(void) > case NET_CLIENT_DRIVER_TAP: > case NET_CLIENT_DRIVER_SOCKET: > case NET_CLIENT_DRIVER_VDE: > +#ifdef CONFIG_VHOST_USER > case NET_CLIENT_DRIVER_VHOST_USER: > +#endif > has_host_dev = 1; > break; > default: > diff --git a/net/net.c b/net/net.c > index 0e28099554..d11909421c 100644 > --- a/net/net.c > +++ b/net/net.c > @@ -957,7 +957,7 @@ static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])( > [NET_CLIENT_DRIVER_BRIDGE] = net_init_bridge, > #endif > [NET_CLIENT_DRIVER_HUBPORT] = net_init_hubport, > -#ifdef CONFIG_VHOST_NET_USED > +#if defined(CONFIG_VHOST_NET_USED) && defined(CONFIG_VHOST_USER) > [NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user, > #endif > #ifdef CONFIG_L2TPV3 > @@ -1033,10 +1033,12 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp) > legacy.type = NET_CLIENT_DRIVER_NETMAP; > legacy.u.netmap = opts->u.netmap; > break; > +#ifdef CONFIG_VHOST_USER > case NET_LEGACY_OPTIONS_TYPE_VHOST_USER: > legacy.type = NET_CLIENT_DRIVER_VHOST_USER; > legacy.u.vhost_user = opts->u.vhost_user; > break; > +#endif > default: > abort(); > } > diff --git a/configure b/configure > index a3f0522e8f..defb9e9974 100755 > --- a/configure > +++ b/configure > @@ -306,6 +306,7 @@ tcg="yes" > vhost_net="no" > vhost_scsi="no" > vhost_vsock="no" > +vhost_user="" > kvm="no" > hax="no" > rdma="" > @@ -1283,6 +1284,10 @@ for opt do > ;; > --enable-vxhs) vxhs="yes" > ;; > + --disable-vhost-user) vhost_user="no" > + ;; > + --enable-vhost-user) vhost_user="yes" > + ;; > *) > echo "ERROR: unknown option $opt" > echo "Try '$0 --help' for more information" > @@ -1291,6 +1296,14 @@ for opt do > esac > done > > +if test "$vhost_user" = ""; then > + if test "$mingw32" = "yes" ; then > + vhost_user="no" > + else > + vhost_user="yes" > + fi > +fi > + > case "$cpu" in > ppc) > CPU_CFLAGS="-m32" > @@ -1518,6 +1531,7 @@ disabled with --disable-FEATURE, default is enabled if available: > qom-cast-debug cast debugging support > tools build qemu-io, qemu-nbd and qemu-image tools > vxhs Veritas HyperScale vDisk backend support > + vhost-user vhost-user support > > NOTE: The object files are built at the place where configure is launched > EOF > @@ -5278,6 +5292,7 @@ echo "libcap-ng support $cap_ng" > echo "vhost-net support $vhost_net" > echo "vhost-scsi support $vhost_scsi" > echo "vhost-vsock support $vhost_vsock" > +echo "vhost-user support $vhost_user" > echo "Trace backends $trace_backends" > if have_backend "simple"; then > echo "Trace output file $trace_file-<pid>" > @@ -5696,6 +5711,9 @@ fi > if test "$vhost_vsock" = "yes" ; then > echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak > fi > +if test "$vhost_user" = "yes" ; then > + echo "CONFIG_VHOST_USER=y" >> $config_host_mak > +fi > if test "$blobs" = "yes" ; then > echo "INSTALL_BLOBS=yes" >> $config_host_mak > fi > @@ -6279,7 +6297,9 @@ if supported_kvm_target $target; then > echo "CONFIG_KVM=y" >> $config_target_mak > if test "$vhost_net" = "yes" ; then > echo "CONFIG_VHOST_NET=y" >> $config_target_mak > - echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak > + if test "$vhost_user" = "yes" ; then > + echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak > + fi > fi > fi > if supported_hax_target $target; then > diff --git a/default-configs/pci.mak b/default-configs/pci.mak > index 53ff10975c..708d7b19ad 100644 > --- a/default-configs/pci.mak > +++ b/default-configs/pci.mak > @@ -43,4 +43,4 @@ CONFIG_VGA=y > CONFIG_VGA_PCI=y > CONFIG_IVSHMEM=$(CONFIG_EVENTFD) > CONFIG_ROCKER=y > -CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX) > +CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) > diff --git a/default-configs/s390x-softmmu.mak b/default-configs/s390x-softmmu.mak > index b227a36179..bb870477f8 100644 > --- a/default-configs/s390x-softmmu.mak > +++ b/default-configs/s390x-softmmu.mak > @@ -1,6 +1,6 @@ > CONFIG_PCI=y > CONFIG_VIRTIO_PCI=y > -CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX) > +CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) > CONFIG_VIRTIO=y > CONFIG_SCLPCONSOLE=y > CONFIG_TERMINAL3270=y > diff --git a/net/Makefile.objs b/net/Makefile.objs > index 67ba5e26fb..7cac7ed1e4 100644 > --- a/net/Makefile.objs > +++ b/net/Makefile.objs > @@ -3,7 +3,7 @@ common-obj-y += socket.o > common-obj-y += dump.o > common-obj-y += eth.o > common-obj-$(CONFIG_L2TPV3) += l2tpv3.o > -common-obj-$(CONFIG_POSIX) += vhost-user.o > +common-obj-$(CONFIG_VHOST_USER) += vhost-user.o > common-obj-$(CONFIG_SLIRP) += slirp.o > common-obj-$(CONFIG_VDE) += vde.o > common-obj-$(CONFIG_NETMAP) += netmap.o > diff --git a/qemu-options.hx b/qemu-options.hx > index 746b5fa75d..c2d4ae440f 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -1994,8 +1994,10 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev, > " VALE port (created on the fly) called 'name' ('nmname' is name of the \n" > " netmap device, defaults to '/dev/netmap')\n" > #endif > +#ifdef CONFIG_VHOST_USER > "-netdev vhost-user,id=str,chardev=dev[,vhostforce=on|off]\n" > " configure a vhost-user network, backed by a chardev 'dev'\n" > +#endif > "-netdev hubport,id=str,hubid=n\n" > " configure a hub port on QEMU VLAN 'n'\n", QEMU_ARCH_ALL) > DEF("net", HAS_ARG, QEMU_OPTION_net, > @@ -2428,6 +2430,7 @@ The hubport netdev lets you connect a NIC to a QEMU "vlan" instead of a single > netdev. @code{-net} and @code{-device} with parameter @option{vlan} create the > required hub automatically. > > +#ifdef CONFIG_VHOST_USER > @item -netdev vhost-user,chardev=@var{id}[,vhostforce=on|off][,queues=n] > > Establish a vhost-user netdev, backed by a chardev @var{id}. The chardev should > @@ -2445,6 +2448,7 @@ qemu -m 512 -object memory-backend-file,id=mem,size=512M,mem-path=/hugetlbfs,sha > -netdev type=vhost-user,id=net0,chardev=chr0 \ > -device virtio-net-pci,netdev=net0 > @end example > +#endif > > @item -net dump[,vlan=@var{n}][,file=@var{file}][,len=@var{len}] > Dump network traffic on VLAN @var{n} to file @var{file} (@file{qemu-vlan0.pcap} by default). > diff --git a/tests/Makefile.include b/tests/Makefile.include > index cfbb689e0e..6b9a0ce07e 100644 > --- a/tests/Makefile.include > +++ b/tests/Makefile.include > @@ -252,9 +252,9 @@ check-qtest-i386-y += tests/pc-cpu-test$(EXESUF) > check-qtest-i386-y += tests/q35-test$(EXESUF) > check-qtest-i386-y += tests/vmgenid-test$(EXESUF) > gcov-files-i386-y += hw/pci-host/q35.c > -check-qtest-i386-$(CONFIG_VHOST_NET_TEST_i386) += tests/vhost-user-test$(EXESUF) > -ifeq ($(CONFIG_VHOST_NET_TEST_i386),) > -check-qtest-x86_64-$(CONFIG_VHOST_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF) > +check-qtest-i386-$(CONFIG_VHOST_USER_NET_TEST_i386) += tests/vhost-user-test$(EXESUF) > +ifeq ($(CONFIG_VHOST_USER_NET_TEST_i386),) > +check-qtest-x86_64-$(CONFIG_VHOST_USER_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF) > endif > check-qtest-i386-y += tests/test-netfilter$(EXESUF) > check-qtest-i386-y += tests/test-filter-mirror$(EXESUF) > -- > 2.14.0.rc0.1.g40ca67566
Hi On Wed, Jul 26, 2017 at 7:53 PM Michael S. Tsirkin <mst@redhat.com> wrote: > > On Tue, Jul 18, 2017 at 06:34:37PM +0200, Marc-André Lureau wrote: > > Learn to compile out vhost-user. Keep it enabled by default on > > non-mingw, that is assumed to be on POSIX. > > > > When trying to make a vhost-user netdev, it gives the following error: > > > > -netdev vhost-user,id=foo,chardev=chr-test: Parameter 'type' expects a netdev backend type > > > > And similar error with the HMP/QMP monitors. > > > > In the future, we may want to hide vhost-user from QAPI/introspection > > with conditional compilation, although the design of this hasn't been > > fully fleshed out yet and shouldn't prevent this patch from being > > applied. > > > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > > After an offline discussion, looks like the idea is to be able to ship a > cut down binary with less features (and e.g. smaller attack surface?). > > Besides failing build on freebsd, this patch has too much ifdefery for > my taste. How about we patch just net/net.c? > The point with --disable-vhost-user was to remove all vhost-user code. For netdev vhost-user only, it would be as simple as removing/compiling out the line: [NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user, Not sure it's worth a configure option in this case. > > > > --- > > hw/net/vhost_net.c | 12 ++++++++++-- > > hw/net/virtio-net.c | 4 ++++ > > hw/virtio/virtio-pci.c | 4 ++-- > > net/hub.c | 2 ++ > > net/net.c | 4 +++- > > configure | 22 +++++++++++++++++++++- > > default-configs/pci.mak | 2 +- > > default-configs/s390x-softmmu.mak | 2 +- > > net/Makefile.objs | 2 +- > > qemu-options.hx | 4 ++++ > > tests/Makefile.include | 6 +++--- > > 11 files changed, 52 insertions(+), 12 deletions(-) > > > > diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c > > index e037db63a3..565a1cc99d 100644 > > --- a/hw/net/vhost_net.c > > +++ b/hw/net/vhost_net.c > > @@ -56,6 +56,7 @@ static const int kernel_feature_bits[] = { > > VHOST_INVALID_FEATURE_BIT > > }; > > > > +#ifdef CONFIG_VHOST_USER > > /* Features supported by others. */ > > static const int user_feature_bits[] = { > > VIRTIO_F_NOTIFY_ON_EMPTY, > > @@ -86,6 +87,7 @@ static const int user_feature_bits[] = { > > > > VHOST_INVALID_FEATURE_BIT > > }; > > +#endif > > > > static const int *vhost_net_get_feature_bits(struct vhost_net *net) > > { > > @@ -95,9 +97,11 @@ static const int *vhost_net_get_feature_bits(struct vhost_net *net) > > case NET_CLIENT_DRIVER_TAP: > > feature_bits = kernel_feature_bits; > > break; > > +#ifdef CONFIG_VHOST_USER > > case NET_CLIENT_DRIVER_VHOST_USER: > > feature_bits = user_feature_bits; > > break; > > +#endif > > default: > > error_report("Feature bits not defined for this type: %d", > > net->nc->info->type); > > @@ -193,6 +197,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > > } > > } > > > > +#ifdef CONFIG_VHOST_USER > > /* Set sane init value. Override when guest acks. */ > > if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > > features = vhost_user_get_acked_features(net->nc); > > @@ -203,7 +208,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > > goto fail; > > } > > } > > - > > +#endif > > vhost_net_ack_features(net, features); > > > > return net; > > @@ -309,6 +314,7 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, > > net = get_vhost_net(ncs[i].peer); > > vhost_net_set_vq_index(net, i * 2); > > > > +#ifdef CONFIG_VHOST_USER > > /* Suppress the masking guest notifiers on vhost user > > * because vhost user doesn't interrupt masking/unmasking > > * properly. > > @@ -316,8 +322,8 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, > > if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > > dev->use_guest_notifier_mask = false; > > } > > +#endif > > } > > - > > r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true); > > if (r < 0) { > > error_report("Error binding guest notifier: %d", -r); > > @@ -414,10 +420,12 @@ VHostNetState *get_vhost_net(NetClientState *nc) > > case NET_CLIENT_DRIVER_TAP: > > vhost_net = tap_get_vhost_net(nc); > > break; > > +#ifdef CONFIG_VHOST_USER > > case NET_CLIENT_DRIVER_VHOST_USER: > > vhost_net = vhost_user_get_vhost_net(nc); > > assert(vhost_net); > > break; > > +#endif > > default: > > break; > > } > > diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c > > index 148071a396..9bda4ab4f8 100644 > > --- a/hw/net/virtio-net.c > > +++ b/hw/net/virtio-net.c > > @@ -524,9 +524,11 @@ static int peer_attach(VirtIONet *n, int index) > > return 0; > > } > > > > +#ifdef CONFIG_VHOST_USER > > if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > > vhost_set_vring_enable(nc->peer, 1); > > } > > +#endif > > > > if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) { > > return 0; > > @@ -547,9 +549,11 @@ static int peer_detach(VirtIONet *n, int index) > > return 0; > > } > > > > +#ifdef CONFIG_VHOST_USER > > if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > > vhost_set_vring_enable(nc->peer, 0); > > } > > +#endif > > > > if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) { > > return 0; > > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > > index 5d14bd66dc..85b82e6c94 100644 > > --- a/hw/virtio/virtio-pci.c > > +++ b/hw/virtio/virtio-pci.c > > @@ -2135,7 +2135,7 @@ static const TypeInfo vhost_scsi_pci_info = { > > }; > > #endif > > > > -#ifdef CONFIG_LINUX > > +#ifdef CONFIG_VHOST_USER > > /* vhost-user-scsi-pci */ > > static Property vhost_user_scsi_pci_properties[] = { > > DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, > > @@ -2665,7 +2665,7 @@ static void virtio_pci_register_types(void) > > #ifdef CONFIG_VHOST_SCSI > > type_register_static(&vhost_scsi_pci_info); > > #endif > > -#ifdef CONFIG_LINUX > > +#ifdef CONFIG_VHOST_USER > > type_register_static(&vhost_user_scsi_pci_info); > > #endif > > #ifdef CONFIG_VHOST_VSOCK > > diff --git a/net/hub.c b/net/hub.c > > index 32d8cf5cd4..ec06275ff6 100644 > > --- a/net/hub.c > > +++ b/net/hub.c > > @@ -322,7 +322,9 @@ void net_hub_check_clients(void) > > case NET_CLIENT_DRIVER_TAP: > > case NET_CLIENT_DRIVER_SOCKET: > > case NET_CLIENT_DRIVER_VDE: > > +#ifdef CONFIG_VHOST_USER > > case NET_CLIENT_DRIVER_VHOST_USER: > > +#endif > > has_host_dev = 1; > > break; > > default: > > diff --git a/net/net.c b/net/net.c > > index 0e28099554..d11909421c 100644 > > --- a/net/net.c > > +++ b/net/net.c > > @@ -957,7 +957,7 @@ static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])( > > [NET_CLIENT_DRIVER_BRIDGE] = net_init_bridge, > > #endif > > [NET_CLIENT_DRIVER_HUBPORT] = net_init_hubport, > > -#ifdef CONFIG_VHOST_NET_USED > > +#if defined(CONFIG_VHOST_NET_USED) && defined(CONFIG_VHOST_USER) > > [NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user, > > #endif > > #ifdef CONFIG_L2TPV3 > > @@ -1033,10 +1033,12 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp) > > legacy.type = NET_CLIENT_DRIVER_NETMAP; > > legacy.u.netmap = opts->u.netmap; > > break; > > +#ifdef CONFIG_VHOST_USER > > case NET_LEGACY_OPTIONS_TYPE_VHOST_USER: > > legacy.type = NET_CLIENT_DRIVER_VHOST_USER; > > legacy.u.vhost_user = opts->u.vhost_user; > > break; > > +#endif > > default: > > abort(); > > } > > diff --git a/configure b/configure > > index a3f0522e8f..defb9e9974 100755 > > --- a/configure > > +++ b/configure > > @@ -306,6 +306,7 @@ tcg="yes" > > vhost_net="no" > > vhost_scsi="no" > > vhost_vsock="no" > > +vhost_user="" > > kvm="no" > > hax="no" > > rdma="" > > @@ -1283,6 +1284,10 @@ for opt do > > ;; > > --enable-vxhs) vxhs="yes" > > ;; > > + --disable-vhost-user) vhost_user="no" > > + ;; > > + --enable-vhost-user) vhost_user="yes" > > + ;; > > *) > > echo "ERROR: unknown option $opt" > > echo "Try '$0 --help' for more information" > > @@ -1291,6 +1296,14 @@ for opt do > > esac > > done > > > > +if test "$vhost_user" = ""; then > > + if test "$mingw32" = "yes" ; then > > + vhost_user="no" > > + else > > + vhost_user="yes" > > + fi > > +fi > > + > > case "$cpu" in > > ppc) > > CPU_CFLAGS="-m32" > > @@ -1518,6 +1531,7 @@ disabled with --disable-FEATURE, default is enabled if available: > > qom-cast-debug cast debugging support > > tools build qemu-io, qemu-nbd and qemu-image tools > > vxhs Veritas HyperScale vDisk backend support > > + vhost-user vhost-user support > > > > NOTE: The object files are built at the place where configure is launched > > EOF > > @@ -5278,6 +5292,7 @@ echo "libcap-ng support $cap_ng" > > echo "vhost-net support $vhost_net" > > echo "vhost-scsi support $vhost_scsi" > > echo "vhost-vsock support $vhost_vsock" > > +echo "vhost-user support $vhost_user" > > echo "Trace backends $trace_backends" > > if have_backend "simple"; then > > echo "Trace output file $trace_file-<pid>" > > @@ -5696,6 +5711,9 @@ fi > > if test "$vhost_vsock" = "yes" ; then > > echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak > > fi > > +if test "$vhost_user" = "yes" ; then > > + echo "CONFIG_VHOST_USER=y" >> $config_host_mak > > +fi > > if test "$blobs" = "yes" ; then > > echo "INSTALL_BLOBS=yes" >> $config_host_mak > > fi > > @@ -6279,7 +6297,9 @@ if supported_kvm_target $target; then > > echo "CONFIG_KVM=y" >> $config_target_mak > > if test "$vhost_net" = "yes" ; then > > echo "CONFIG_VHOST_NET=y" >> $config_target_mak > > - echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak > > + if test "$vhost_user" = "yes" ; then > > + echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak > > + fi > > fi > > fi > > if supported_hax_target $target; then > > diff --git a/default-configs/pci.mak b/default-configs/pci.mak > > index 53ff10975c..708d7b19ad 100644 > > --- a/default-configs/pci.mak > > +++ b/default-configs/pci.mak > > @@ -43,4 +43,4 @@ CONFIG_VGA=y > > CONFIG_VGA_PCI=y > > CONFIG_IVSHMEM=$(CONFIG_EVENTFD) > > CONFIG_ROCKER=y > > -CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX) > > +CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) > > diff --git a/default-configs/s390x-softmmu.mak b/default-configs/s390x-softmmu.mak > > index b227a36179..bb870477f8 100644 > > --- a/default-configs/s390x-softmmu.mak > > +++ b/default-configs/s390x-softmmu.mak > > @@ -1,6 +1,6 @@ > > CONFIG_PCI=y > > CONFIG_VIRTIO_PCI=y > > -CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX) > > +CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) > > CONFIG_VIRTIO=y > > CONFIG_SCLPCONSOLE=y > > CONFIG_TERMINAL3270=y > > diff --git a/net/Makefile.objs b/net/Makefile.objs > > index 67ba5e26fb..7cac7ed1e4 100644 > > --- a/net/Makefile.objs > > +++ b/net/Makefile.objs > > @@ -3,7 +3,7 @@ common-obj-y += socket.o > > common-obj-y += dump.o > > common-obj-y += eth.o > > common-obj-$(CONFIG_L2TPV3) += l2tpv3.o > > -common-obj-$(CONFIG_POSIX) += vhost-user.o > > +common-obj-$(CONFIG_VHOST_USER) += vhost-user.o > > common-obj-$(CONFIG_SLIRP) += slirp.o > > common-obj-$(CONFIG_VDE) += vde.o > > common-obj-$(CONFIG_NETMAP) += netmap.o > > diff --git a/qemu-options.hx b/qemu-options.hx > > index 746b5fa75d..c2d4ae440f 100644 > > --- a/qemu-options.hx > > +++ b/qemu-options.hx > > @@ -1994,8 +1994,10 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev, > > " VALE port (created on the fly) called 'name' ('nmname' is name of the \n" > > " netmap device, defaults to '/dev/netmap')\n" > > #endif > > +#ifdef CONFIG_VHOST_USER > > "-netdev vhost-user,id=str,chardev=dev[,vhostforce=on|off]\n" > > " configure a vhost-user network, backed by a chardev 'dev'\n" > > +#endif > > "-netdev hubport,id=str,hubid=n\n" > > " configure a hub port on QEMU VLAN 'n'\n", QEMU_ARCH_ALL) > > DEF("net", HAS_ARG, QEMU_OPTION_net, > > @@ -2428,6 +2430,7 @@ The hubport netdev lets you connect a NIC to a QEMU "vlan" instead of a single > > netdev. @code{-net} and @code{-device} with parameter @option{vlan} create the > > required hub automatically. > > > > +#ifdef CONFIG_VHOST_USER > > @item -netdev vhost-user,chardev=@var{id}[,vhostforce=on|off][,queues=n] > > > > Establish a vhost-user netdev, backed by a chardev @var{id}. The chardev should > > @@ -2445,6 +2448,7 @@ qemu -m 512 -object memory-backend-file,id=mem,size=512M,mem-path=/hugetlbfs,sha > > -netdev type=vhost-user,id=net0,chardev=chr0 \ > > -device virtio-net-pci,netdev=net0 > > @end example > > +#endif > > > > @item -net dump[,vlan=@var{n}][,file=@var{file}][,len=@var{len}] > > Dump network traffic on VLAN @var{n} to file @var{file} (@file{qemu-vlan0.pcap} by default). > > diff --git a/tests/Makefile.include b/tests/Makefile.include > > index cfbb689e0e..6b9a0ce07e 100644 > > --- a/tests/Makefile.include > > +++ b/tests/Makefile.include > > @@ -252,9 +252,9 @@ check-qtest-i386-y += tests/pc-cpu-test$(EXESUF) > > check-qtest-i386-y += tests/q35-test$(EXESUF) > > check-qtest-i386-y += tests/vmgenid-test$(EXESUF) > > gcov-files-i386-y += hw/pci-host/q35.c > > -check-qtest-i386-$(CONFIG_VHOST_NET_TEST_i386) += tests/vhost-user-test$(EXESUF) > > -ifeq ($(CONFIG_VHOST_NET_TEST_i386),) > > -check-qtest-x86_64-$(CONFIG_VHOST_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF) > > +check-qtest-i386-$(CONFIG_VHOST_USER_NET_TEST_i386) += tests/vhost-user-test$(EXESUF) > > +ifeq ($(CONFIG_VHOST_USER_NET_TEST_i386),) > > +check-qtest-x86_64-$(CONFIG_VHOST_USER_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF) > > endif > > check-qtest-i386-y += tests/test-netfilter$(EXESUF) > > check-qtest-i386-y += tests/test-filter-mirror$(EXESUF) > > -- > > 2.14.0.rc0.1.g40ca67566 >
On Fri, Jul 28, 2017 at 01:31:31AM +0200, Marc-André Lureau wrote: > Hi > > On Wed, Jul 26, 2017 at 7:53 PM Michael S. Tsirkin <mst@redhat.com> wrote: > > > > On Tue, Jul 18, 2017 at 06:34:37PM +0200, Marc-André Lureau wrote: > > > Learn to compile out vhost-user. Keep it enabled by default on > > > non-mingw, that is assumed to be on POSIX. > > > > > > When trying to make a vhost-user netdev, it gives the following error: > > > > > > -netdev vhost-user,id=foo,chardev=chr-test: Parameter 'type' expects a netdev backend type > > > > > > And similar error with the HMP/QMP monitors. > > > > > > In the future, we may want to hide vhost-user from QAPI/introspection > > > with conditional compilation, although the design of this hasn't been > > > fully fleshed out yet and shouldn't prevent this patch from being > > > applied. > > > > > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > > > > After an offline discussion, looks like the idea is to be able to ship a > > cut down binary with less features (and e.g. smaller attack surface?). > > > > Besides failing build on freebsd, this patch has too much ifdefery for > > my taste. How about we patch just net/net.c? > > > > The point with --disable-vhost-user was to remove all vhost-user code. Does not seem to be worth the cost of all these ifdefs. > For netdev vhost-user only, Wouldn't we want to disable scsi as well? > it would be as simple as > removing/compiling out the line: > > [NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user, And I guess the help and tests as well? > Not sure it's worth a configure option in this case. Seems like a reasonable thing to do but up to you. > > > > > > > --- > > > hw/net/vhost_net.c | 12 ++++++++++-- > > > hw/net/virtio-net.c | 4 ++++ > > > hw/virtio/virtio-pci.c | 4 ++-- > > > net/hub.c | 2 ++ > > > net/net.c | 4 +++- > > > configure | 22 +++++++++++++++++++++- > > > default-configs/pci.mak | 2 +- > > > default-configs/s390x-softmmu.mak | 2 +- > > > net/Makefile.objs | 2 +- > > > qemu-options.hx | 4 ++++ > > > tests/Makefile.include | 6 +++--- > > > 11 files changed, 52 insertions(+), 12 deletions(-) > > > > > > diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c > > > index e037db63a3..565a1cc99d 100644 > > > --- a/hw/net/vhost_net.c > > > +++ b/hw/net/vhost_net.c > > > @@ -56,6 +56,7 @@ static const int kernel_feature_bits[] = { > > > VHOST_INVALID_FEATURE_BIT > > > }; > > > > > > +#ifdef CONFIG_VHOST_USER > > > /* Features supported by others. */ > > > static const int user_feature_bits[] = { > > > VIRTIO_F_NOTIFY_ON_EMPTY, > > > @@ -86,6 +87,7 @@ static const int user_feature_bits[] = { > > > > > > VHOST_INVALID_FEATURE_BIT > > > }; > > > +#endif > > > > > > static const int *vhost_net_get_feature_bits(struct vhost_net *net) > > > { > > > @@ -95,9 +97,11 @@ static const int *vhost_net_get_feature_bits(struct vhost_net *net) > > > case NET_CLIENT_DRIVER_TAP: > > > feature_bits = kernel_feature_bits; > > > break; > > > +#ifdef CONFIG_VHOST_USER > > > case NET_CLIENT_DRIVER_VHOST_USER: > > > feature_bits = user_feature_bits; > > > break; > > > +#endif > > > default: > > > error_report("Feature bits not defined for this type: %d", > > > net->nc->info->type); > > > @@ -193,6 +197,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > > > } > > > } > > > > > > +#ifdef CONFIG_VHOST_USER > > > /* Set sane init value. Override when guest acks. */ > > > if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > > > features = vhost_user_get_acked_features(net->nc); > > > @@ -203,7 +208,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *options) > > > goto fail; > > > } > > > } > > > - > > > +#endif > > > vhost_net_ack_features(net, features); > > > > > > return net; > > > @@ -309,6 +314,7 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, > > > net = get_vhost_net(ncs[i].peer); > > > vhost_net_set_vq_index(net, i * 2); > > > > > > +#ifdef CONFIG_VHOST_USER > > > /* Suppress the masking guest notifiers on vhost user > > > * because vhost user doesn't interrupt masking/unmasking > > > * properly. > > > @@ -316,8 +322,8 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, > > > if (net->nc->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > > > dev->use_guest_notifier_mask = false; > > > } > > > +#endif > > > } > > > - > > > r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true); > > > if (r < 0) { > > > error_report("Error binding guest notifier: %d", -r); > > > @@ -414,10 +420,12 @@ VHostNetState *get_vhost_net(NetClientState *nc) > > > case NET_CLIENT_DRIVER_TAP: > > > vhost_net = tap_get_vhost_net(nc); > > > break; > > > +#ifdef CONFIG_VHOST_USER > > > case NET_CLIENT_DRIVER_VHOST_USER: > > > vhost_net = vhost_user_get_vhost_net(nc); > > > assert(vhost_net); > > > break; > > > +#endif > > > default: > > > break; > > > } > > > diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c > > > index 148071a396..9bda4ab4f8 100644 > > > --- a/hw/net/virtio-net.c > > > +++ b/hw/net/virtio-net.c > > > @@ -524,9 +524,11 @@ static int peer_attach(VirtIONet *n, int index) > > > return 0; > > > } > > > > > > +#ifdef CONFIG_VHOST_USER > > > if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > > > vhost_set_vring_enable(nc->peer, 1); > > > } > > > +#endif > > > > > > if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) { > > > return 0; > > > @@ -547,9 +549,11 @@ static int peer_detach(VirtIONet *n, int index) > > > return 0; > > > } > > > > > > +#ifdef CONFIG_VHOST_USER > > > if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_USER) { > > > vhost_set_vring_enable(nc->peer, 0); > > > } > > > +#endif > > > > > > if (nc->peer->info->type != NET_CLIENT_DRIVER_TAP) { > > > return 0; > > > diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c > > > index 5d14bd66dc..85b82e6c94 100644 > > > --- a/hw/virtio/virtio-pci.c > > > +++ b/hw/virtio/virtio-pci.c > > > @@ -2135,7 +2135,7 @@ static const TypeInfo vhost_scsi_pci_info = { > > > }; > > > #endif > > > > > > -#ifdef CONFIG_LINUX > > > +#ifdef CONFIG_VHOST_USER > > > /* vhost-user-scsi-pci */ > > > static Property vhost_user_scsi_pci_properties[] = { > > > DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, > > > @@ -2665,7 +2665,7 @@ static void virtio_pci_register_types(void) > > > #ifdef CONFIG_VHOST_SCSI > > > type_register_static(&vhost_scsi_pci_info); > > > #endif > > > -#ifdef CONFIG_LINUX > > > +#ifdef CONFIG_VHOST_USER > > > type_register_static(&vhost_user_scsi_pci_info); > > > #endif > > > #ifdef CONFIG_VHOST_VSOCK > > > diff --git a/net/hub.c b/net/hub.c > > > index 32d8cf5cd4..ec06275ff6 100644 > > > --- a/net/hub.c > > > +++ b/net/hub.c > > > @@ -322,7 +322,9 @@ void net_hub_check_clients(void) > > > case NET_CLIENT_DRIVER_TAP: > > > case NET_CLIENT_DRIVER_SOCKET: > > > case NET_CLIENT_DRIVER_VDE: > > > +#ifdef CONFIG_VHOST_USER > > > case NET_CLIENT_DRIVER_VHOST_USER: > > > +#endif > > > has_host_dev = 1; > > > break; > > > default: > > > diff --git a/net/net.c b/net/net.c > > > index 0e28099554..d11909421c 100644 > > > --- a/net/net.c > > > +++ b/net/net.c > > > @@ -957,7 +957,7 @@ static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])( > > > [NET_CLIENT_DRIVER_BRIDGE] = net_init_bridge, > > > #endif > > > [NET_CLIENT_DRIVER_HUBPORT] = net_init_hubport, > > > -#ifdef CONFIG_VHOST_NET_USED > > > +#if defined(CONFIG_VHOST_NET_USED) && defined(CONFIG_VHOST_USER) > > > [NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user, > > > #endif > > > #ifdef CONFIG_L2TPV3 > > > @@ -1033,10 +1033,12 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp) > > > legacy.type = NET_CLIENT_DRIVER_NETMAP; > > > legacy.u.netmap = opts->u.netmap; > > > break; > > > +#ifdef CONFIG_VHOST_USER > > > case NET_LEGACY_OPTIONS_TYPE_VHOST_USER: > > > legacy.type = NET_CLIENT_DRIVER_VHOST_USER; > > > legacy.u.vhost_user = opts->u.vhost_user; > > > break; > > > +#endif > > > default: > > > abort(); > > > } > > > diff --git a/configure b/configure > > > index a3f0522e8f..defb9e9974 100755 > > > --- a/configure > > > +++ b/configure > > > @@ -306,6 +306,7 @@ tcg="yes" > > > vhost_net="no" > > > vhost_scsi="no" > > > vhost_vsock="no" > > > +vhost_user="" > > > kvm="no" > > > hax="no" > > > rdma="" > > > @@ -1283,6 +1284,10 @@ for opt do > > > ;; > > > --enable-vxhs) vxhs="yes" > > > ;; > > > + --disable-vhost-user) vhost_user="no" > > > + ;; > > > + --enable-vhost-user) vhost_user="yes" > > > + ;; > > > *) > > > echo "ERROR: unknown option $opt" > > > echo "Try '$0 --help' for more information" > > > @@ -1291,6 +1296,14 @@ for opt do > > > esac > > > done > > > > > > +if test "$vhost_user" = ""; then > > > + if test "$mingw32" = "yes" ; then > > > + vhost_user="no" > > > + else > > > + vhost_user="yes" > > > + fi > > > +fi > > > + > > > case "$cpu" in > > > ppc) > > > CPU_CFLAGS="-m32" > > > @@ -1518,6 +1531,7 @@ disabled with --disable-FEATURE, default is enabled if available: > > > qom-cast-debug cast debugging support > > > tools build qemu-io, qemu-nbd and qemu-image tools > > > vxhs Veritas HyperScale vDisk backend support > > > + vhost-user vhost-user support > > > > > > NOTE: The object files are built at the place where configure is launched > > > EOF > > > @@ -5278,6 +5292,7 @@ echo "libcap-ng support $cap_ng" > > > echo "vhost-net support $vhost_net" > > > echo "vhost-scsi support $vhost_scsi" > > > echo "vhost-vsock support $vhost_vsock" > > > +echo "vhost-user support $vhost_user" > > > echo "Trace backends $trace_backends" > > > if have_backend "simple"; then > > > echo "Trace output file $trace_file-<pid>" > > > @@ -5696,6 +5711,9 @@ fi > > > if test "$vhost_vsock" = "yes" ; then > > > echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak > > > fi > > > +if test "$vhost_user" = "yes" ; then > > > + echo "CONFIG_VHOST_USER=y" >> $config_host_mak > > > +fi > > > if test "$blobs" = "yes" ; then > > > echo "INSTALL_BLOBS=yes" >> $config_host_mak > > > fi > > > @@ -6279,7 +6297,9 @@ if supported_kvm_target $target; then > > > echo "CONFIG_KVM=y" >> $config_target_mak > > > if test "$vhost_net" = "yes" ; then > > > echo "CONFIG_VHOST_NET=y" >> $config_target_mak > > > - echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak > > > + if test "$vhost_user" = "yes" ; then > > > + echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak > > > + fi > > > fi > > > fi > > > if supported_hax_target $target; then > > > diff --git a/default-configs/pci.mak b/default-configs/pci.mak > > > index 53ff10975c..708d7b19ad 100644 > > > --- a/default-configs/pci.mak > > > +++ b/default-configs/pci.mak > > > @@ -43,4 +43,4 @@ CONFIG_VGA=y > > > CONFIG_VGA_PCI=y > > > CONFIG_IVSHMEM=$(CONFIG_EVENTFD) > > > CONFIG_ROCKER=y > > > -CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX) > > > +CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) > > > diff --git a/default-configs/s390x-softmmu.mak b/default-configs/s390x-softmmu.mak > > > index b227a36179..bb870477f8 100644 > > > --- a/default-configs/s390x-softmmu.mak > > > +++ b/default-configs/s390x-softmmu.mak > > > @@ -1,6 +1,6 @@ > > > CONFIG_PCI=y > > > CONFIG_VIRTIO_PCI=y > > > -CONFIG_VHOST_USER_SCSI=$(CONFIG_LINUX) > > > +CONFIG_VHOST_USER_SCSI=$(CONFIG_VHOST_USER) > > > CONFIG_VIRTIO=y > > > CONFIG_SCLPCONSOLE=y > > > CONFIG_TERMINAL3270=y > > > diff --git a/net/Makefile.objs b/net/Makefile.objs > > > index 67ba5e26fb..7cac7ed1e4 100644 > > > --- a/net/Makefile.objs > > > +++ b/net/Makefile.objs > > > @@ -3,7 +3,7 @@ common-obj-y += socket.o > > > common-obj-y += dump.o > > > common-obj-y += eth.o > > > common-obj-$(CONFIG_L2TPV3) += l2tpv3.o > > > -common-obj-$(CONFIG_POSIX) += vhost-user.o > > > +common-obj-$(CONFIG_VHOST_USER) += vhost-user.o > > > common-obj-$(CONFIG_SLIRP) += slirp.o > > > common-obj-$(CONFIG_VDE) += vde.o > > > common-obj-$(CONFIG_NETMAP) += netmap.o > > > diff --git a/qemu-options.hx b/qemu-options.hx > > > index 746b5fa75d..c2d4ae440f 100644 > > > --- a/qemu-options.hx > > > +++ b/qemu-options.hx > > > @@ -1994,8 +1994,10 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev, > > > " VALE port (created on the fly) called 'name' ('nmname' is name of the \n" > > > " netmap device, defaults to '/dev/netmap')\n" > > > #endif > > > +#ifdef CONFIG_VHOST_USER > > > "-netdev vhost-user,id=str,chardev=dev[,vhostforce=on|off]\n" > > > " configure a vhost-user network, backed by a chardev 'dev'\n" > > > +#endif > > > "-netdev hubport,id=str,hubid=n\n" > > > " configure a hub port on QEMU VLAN 'n'\n", QEMU_ARCH_ALL) > > > DEF("net", HAS_ARG, QEMU_OPTION_net, > > > @@ -2428,6 +2430,7 @@ The hubport netdev lets you connect a NIC to a QEMU "vlan" instead of a single > > > netdev. @code{-net} and @code{-device} with parameter @option{vlan} create the > > > required hub automatically. > > > > > > +#ifdef CONFIG_VHOST_USER > > > @item -netdev vhost-user,chardev=@var{id}[,vhostforce=on|off][,queues=n] > > > > > > Establish a vhost-user netdev, backed by a chardev @var{id}. The chardev should > > > @@ -2445,6 +2448,7 @@ qemu -m 512 -object memory-backend-file,id=mem,size=512M,mem-path=/hugetlbfs,sha > > > -netdev type=vhost-user,id=net0,chardev=chr0 \ > > > -device virtio-net-pci,netdev=net0 > > > @end example > > > +#endif > > > > > > @item -net dump[,vlan=@var{n}][,file=@var{file}][,len=@var{len}] > > > Dump network traffic on VLAN @var{n} to file @var{file} (@file{qemu-vlan0.pcap} by default). > > > diff --git a/tests/Makefile.include b/tests/Makefile.include > > > index cfbb689e0e..6b9a0ce07e 100644 > > > --- a/tests/Makefile.include > > > +++ b/tests/Makefile.include > > > @@ -252,9 +252,9 @@ check-qtest-i386-y += tests/pc-cpu-test$(EXESUF) > > > check-qtest-i386-y += tests/q35-test$(EXESUF) > > > check-qtest-i386-y += tests/vmgenid-test$(EXESUF) > > > gcov-files-i386-y += hw/pci-host/q35.c > > > -check-qtest-i386-$(CONFIG_VHOST_NET_TEST_i386) += tests/vhost-user-test$(EXESUF) > > > -ifeq ($(CONFIG_VHOST_NET_TEST_i386),) > > > -check-qtest-x86_64-$(CONFIG_VHOST_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF) > > > +check-qtest-i386-$(CONFIG_VHOST_USER_NET_TEST_i386) += tests/vhost-user-test$(EXESUF) > > > +ifeq ($(CONFIG_VHOST_USER_NET_TEST_i386),) > > > +check-qtest-x86_64-$(CONFIG_VHOST_USER_NET_TEST_x86_64) += tests/vhost-user-test$(EXESUF) > > > endif > > > check-qtest-i386-y += tests/test-netfilter$(EXESUF) > > > check-qtest-i386-y += tests/test-filter-mirror$(EXESUF) > > > -- > > > 2.14.0.rc0.1.g40ca67566 > >
On 07/26/2017 02:52 PM, Michael S. Tsirkin wrote: > On Tue, Jul 18, 2017 at 06:34:37PM +0200, Marc-André Lureau wrote: ... >> In the future, we may want to hide vhost-user from QAPI/introspection >> with conditional compilation, although the design of this hasn't been >> fully fleshed out yet and shouldn't prevent this patch from being >> applied. >> >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > > After an offline discussion, looks like the idea is to be able to ship a > cut down binary with less features (and e.g. smaller attack surface?). I think it deserves it own thread, there will be many ideas about it. I liked this idea a first because it speeds up compilation time (so the CI build system can run more tests, cover more of less code...) but then we have this unreadable unmanageable ifdefery very hard to maintain, you end up not compiling this piece of code, then move things around, refactor a bit, change some API and zombie code survives around until someone who has this lib try to compile the obsolete code. This is also why I now prefer to build via docker images (the qemu:debian-amd64 try to come with as many dev packages as possible to increase code coverage). There is some dream about having one monolithic QEMU binary able to run all cpus/machines/devices. I think this way do reduce attack surface by exposing all the surface. This is a bit what is happening during release candidate testing when /master is closed, people start to use QEMU [differently than while adding features], more surface is stressed, then many issues appear and get resolved. Thomas Huth did some effort adding more poisoned macros and move common objects to common-obj, we can do more here, we may need to split more sources to move more common code. Another experience is I'm trying to model a 32-bit big endian ARM board then got bugged with 64-bit code this board will never use, or issue with PCI and AHCI, so I started to comment those objects using obj-$(CONFIG_X) but then CONFIG_X also depends of CONFIG_Y and so, then it become hardly scalable, see [1]: +CONFIG_LAN9118=$(or $(CONFIG_REALVIEW),$(CONFIG_EXYNOS4),$(CONFIG_FSL_IMX31)) +CONFIG_SMC91C111=$(or $(CONFIG_PXA2XX),$(CONFIG_MAINSTONE),$(CONFIG_REALVIEW)) +CONFIG_ARM_MPTIMER=$(or $(CONFIG_A9MPCORE),$(CONFIG_ARM11MPCORE),$(CONFIG_A15MPCORE)) +CONFIG_HIGHBANK=$(and $(CONFIG_A9MPCORE),$(CONFIG_A15MPCORE)) we already have: crypto-obj-$(if $(CONFIG_NETTLE),n,$(if $(CONFIG_GCRYPT_HMAC),n,y)) += hmac-glib.o crypto/Makefile.objs:23:crypto-obj-$(if $(CONFIG_GCRYPT),n,$(if $(CONFIG_GNUTLS_RND),n,y)) += random-platform.o I ended dropping this branch, I was thinking about using kconfig to manage dependencies... The obj-$(CONFIG_XYZ) is useful when kept tiny, at most 1 bitwise operation. I wanted to share my experience and thoughts about it, I hope it's still understandable because it's very late :S Regards, Phil. > Besides failing build on freebsd, this patch has too much ifdefery for > my taste. How about we patch just net/net.c? [1] https://github.com/philmd/qemu/commit/2c1c515345d626f47d0968821980f9389d4588b2#diff-6006132695caf8d409e781fbf3d4401f
© 2016 - 2024 Red Hat, Inc.