Hi Jay / Stefan, We've got a non-determinsitic hang in QEMU CI since this series merged, which we tracked down to a libvfio-user test that is flakey:
https://gitlab.com/qemu-project/qemu/-/issues/1114 John Levon has proposed a PR to libvfio-user to turn off the test, but we'll need one of you to update the git submodule for libvfio-user on the QEMU side, as I can't find a nice way to selectively skip the test from QEMU side alone. With regards Daniel On Wed, Jun 15, 2022 at 04:51:17PM +0100, Stefan Hajnoczi wrote: > From: Jagannathan Raman <jag.ra...@oracle.com> > > add the libvfio-user library as a submodule. build it as a meson > subproject. > > libvfio-user is distributed with BSD 3-Clause license and > json-c with MIT (Expat) license > > Signed-off-by: Elena Ufimtseva <elena.ufimts...@oracle.com> > Signed-off-by: John G Johnson <john.g.john...@oracle.com> > Signed-off-by: Jagannathan Raman <jag.ra...@oracle.com> > Reviewed-by: Stefan Hajnoczi <stefa...@redhat.com> > Message-id: > c2adec87958b081d1dc8775d4aa05c897912f025.1655151679.git.jag.ra...@oracle.com > > [Changed submodule URL to QEMU's libvfio-user mirror on GitLab. The QEMU > project mirrors its dependencies so that it can provide full source code > even in the event that its dependencies become unavailable. Note that > the mirror repo is manually updated, so please contact me to make newer > libvfio-user commits available. If I become a bottleneck we can set up a > cronjob. > > Updated scripts/meson-buildoptions.sh to match the meson_options.txt > change. Failure to do so can result in scripts/meson-buildoptions.sh > being modified by the build system later on and you end up with a dirty > working tree. > --Stefan] > > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > --- > MAINTAINERS | 1 + > meson_options.txt | 2 ++ > configure | 17 +++++++++++++++++ > meson.build | 23 ++++++++++++++++++++++- > .gitlab-ci.d/buildtest.yml | 1 + > .gitmodules | 3 +++ > Kconfig.host | 4 ++++ > hw/remote/Kconfig | 4 ++++ > hw/remote/meson.build | 2 ++ > scripts/meson-buildoptions.sh | 4 ++++ > subprojects/libvfio-user | 1 + > tests/docker/dockerfiles/centos8.docker | 2 ++ > 12 files changed, 63 insertions(+), 1 deletion(-) > create mode 160000 subprojects/libvfio-user > > diff --git a/MAINTAINERS b/MAINTAINERS > index 5ba93348aa..d0fcaf0edb 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -3642,6 +3642,7 @@ F: hw/remote/proxy-memory-listener.c > F: include/hw/remote/proxy-memory-listener.h > F: hw/remote/iohub.c > F: include/hw/remote/iohub.h > +F: subprojects/libvfio-user > > EBPF: > M: Jason Wang <jasow...@redhat.com> > diff --git a/meson_options.txt b/meson_options.txt > index 0e8197386b..f3e2f22c1e 100644 > --- a/meson_options.txt > +++ b/meson_options.txt > @@ -88,6 +88,8 @@ option('cfi_debug', type: 'boolean', value: 'false', > description: 'Verbose errors in case of CFI violation') > option('multiprocess', type: 'feature', value: 'auto', > description: 'Out of process device emulation support') > +option('vfio_user_server', type: 'feature', value: 'disabled', > + description: 'vfio-user server support') > option('dbus_display', type: 'feature', value: 'auto', > description: '-display dbus support') > option('tpm', type : 'feature', value : 'auto', > diff --git a/configure b/configure > index 4b12a8094c..c14e7f590a 100755 > --- a/configure > +++ b/configure > @@ -315,6 +315,7 @@ meson_args="" > ninja="" > bindir="bin" > skip_meson=no > +vfio_user_server="disabled" > > # The following Meson options are handled manually (still they > # are included in the automatically generated help message) > @@ -909,6 +910,10 @@ for opt do > ;; > --disable-blobs) meson_option_parse --disable-install-blobs "" > ;; > + --enable-vfio-user-server) vfio_user_server="enabled" > + ;; > + --disable-vfio-user-server) vfio_user_server="disabled" > + ;; > --enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc > ;; > --enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc > @@ -2132,6 +2137,17 @@ write_container_target_makefile() { > > > > +########################################## > +# check for vfio_user_server > + > +case "$vfio_user_server" in > + enabled ) > + if test "$git_submodules_action" != "ignore"; then > + git_submodules="${git_submodules} subprojects/libvfio-user" > + fi > + ;; > +esac > + > ########################################## > # End of CC checks > # After here, no more $cc or $ld runs > @@ -2672,6 +2688,7 @@ if test "$skip_meson" = no; then > test "$slirp" != auto && meson_option_add "-Dslirp=$slirp" > test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd" > test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg" > + test "$vfio_user_server" != auto && meson_option_add > "-Dvfio_user_server=$vfio_user_server" > run_meson() { > NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" > "$source_path" > } > diff --git a/meson.build b/meson.build > index 9e65cc5367..ca19ddc30c 100644 > --- a/meson.build > +++ b/meson.build > @@ -308,6 +308,10 @@ multiprocess_allowed = get_option('multiprocess') \ > .require(targetos == 'linux', error_message: 'Multiprocess QEMU is > supported only on Linux') \ > .allowed() > > +vfio_user_server_allowed = get_option('vfio_user_server') \ > + .require(targetos == 'linux', error_message: 'vfio-user server is > supported only on Linux') \ > + .allowed() > + > have_tpm = get_option('tpm') \ > .require(targetos != 'windows', error_message: 'TPM emulation only > available on POSIX systems') \ > .allowed() > @@ -2380,7 +2384,8 @@ host_kconfig = \ > (have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \ > ('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \ > (have_pvrdma ? ['CONFIG_PVRDMA=y'] : []) + \ > - (multiprocess_allowed ? ['CONFIG_MULTIPROCESS_ALLOWED=y'] : []) > + (multiprocess_allowed ? ['CONFIG_MULTIPROCESS_ALLOWED=y'] : []) + \ > + (vfio_user_server_allowed ? ['CONFIG_VFIO_USER_SERVER_ALLOWED=y'] : []) > > ignored = [ 'TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_ARCH' ] > > @@ -2672,6 +2677,21 @@ if have_system > endif > endif > > +libvfio_user_dep = not_found > +if have_system and vfio_user_server_allowed > + have_internal = fs.exists(meson.current_source_dir() / > 'subprojects/libvfio-user/meson.build') > + > + if not have_internal > + error('libvfio-user source not found - please pull git submodule') > + endif > + > + libvfio_user_proj = subproject('libvfio-user') > + > + libvfio_user_lib = libvfio_user_proj.get_variable('libvfio_user_dep') > + > + libvfio_user_dep = declare_dependency(dependencies: [libvfio_user_lib]) > +endif > + > fdt = not_found > if have_system > fdt_opt = get_option('fdt') > @@ -3790,6 +3810,7 @@ summary_info += {'target list': ' > '.join(target_dirs)} > if have_system > summary_info += {'default devices': get_option('default_devices')} > summary_info += {'out of process emulation': multiprocess_allowed} > + summary_info += {'vfio-user server': vfio_user_server_allowed} > endif > summary(summary_info, bool_yn: true, section: 'Targets and accelerators') > > diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml > index cb7cad44b5..8a4353ef93 100644 > --- a/.gitlab-ci.d/buildtest.yml > +++ b/.gitlab-ci.d/buildtest.yml > @@ -168,6 +168,7 @@ build-system-centos: > IMAGE: centos8 > CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system > --enable-modules --enable-trace-backends=dtrace --enable-docs > + --enable-vfio-user-server > TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu > x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu > MAKE_CHECK_ARGS: check-build > diff --git a/.gitmodules b/.gitmodules > index b8bff47df8..aedd9a03d4 100644 > --- a/.gitmodules > +++ b/.gitmodules > @@ -64,3 +64,6 @@ > [submodule "tests/lcitool/libvirt-ci"] > path = tests/lcitool/libvirt-ci > url = https://gitlab.com/libvirt/libvirt-ci.git > +[submodule "subprojects/libvfio-user"] > + path = subprojects/libvfio-user > + url = https://gitlab.com/qemu-project/libvfio-user.git > diff --git a/Kconfig.host b/Kconfig.host > index 1165c4eacd..d763d89269 100644 > --- a/Kconfig.host > +++ b/Kconfig.host > @@ -42,3 +42,7 @@ config MULTIPROCESS_ALLOWED > config FUZZ > bool > select SPARSE_MEM > + > +config VFIO_USER_SERVER_ALLOWED > + bool > + imply VFIO_USER_SERVER > diff --git a/hw/remote/Kconfig b/hw/remote/Kconfig > index 08c16e235f..2d6b4f4cf4 100644 > --- a/hw/remote/Kconfig > +++ b/hw/remote/Kconfig > @@ -2,3 +2,7 @@ config MULTIPROCESS > bool > depends on PCI && PCI_EXPRESS && KVM > select REMOTE_PCIHOST > + > +config VFIO_USER_SERVER > + bool > + depends on MULTIPROCESS > diff --git a/hw/remote/meson.build b/hw/remote/meson.build > index e6a5574242..7da83350c8 100644 > --- a/hw/remote/meson.build > +++ b/hw/remote/meson.build > @@ -7,6 +7,8 @@ remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: > files('remote-obj.c')) > remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy.c')) > remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('iohub.c')) > > +remote_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_true: libvfio_user_dep) > + > specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('memory.c')) > specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: > files('proxy-memory-listener.c')) > > diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh > index 1fc1d2e2c3..24eb5f35ea 100644 > --- a/scripts/meson-buildoptions.sh > +++ b/scripts/meson-buildoptions.sh > @@ -153,6 +153,8 @@ meson_options_help() { > printf "%s\n" ' usb-redir libusbredir support' > printf "%s\n" ' vde vde network backend support' > printf "%s\n" ' vdi vdi image format support' > + printf "%s\n" ' vfio-user-server' > + printf "%s\n" ' vfio-user server support' > printf "%s\n" ' vhost-crypto vhost-user crypto backend support' > printf "%s\n" ' vhost-kernel vhost kernel backend support' > printf "%s\n" ' vhost-net vhost-net kernel acceleration support' > @@ -415,6 +417,8 @@ _meson_option_parse() { > --disable-vde) printf "%s" -Dvde=disabled ;; > --enable-vdi) printf "%s" -Dvdi=enabled ;; > --disable-vdi) printf "%s" -Dvdi=disabled ;; > + --enable-vfio-user-server) printf "%s" -Dvfio_user_server=enabled ;; > + --disable-vfio-user-server) printf "%s" -Dvfio_user_server=disabled ;; > --enable-vhost-crypto) printf "%s" -Dvhost_crypto=enabled ;; > --disable-vhost-crypto) printf "%s" -Dvhost_crypto=disabled ;; > --enable-vhost-kernel) printf "%s" -Dvhost_kernel=enabled ;; > diff --git a/subprojects/libvfio-user b/subprojects/libvfio-user > new file mode 160000 > index 0000000000..0b28d20557 > --- /dev/null > +++ b/subprojects/libvfio-user > @@ -0,0 +1 @@ > +Subproject commit 0b28d205572c80b568a1003db2c8f37ca333e4d7 > diff --git a/tests/docker/dockerfiles/centos8.docker > b/tests/docker/dockerfiles/centos8.docker > index 4b20925bbf..10618bfa83 100644 > --- a/tests/docker/dockerfiles/centos8.docker > +++ b/tests/docker/dockerfiles/centos8.docker > @@ -51,6 +51,7 @@ RUN dnf update -y && \ > libbpf-devel \ > libcacard-devel \ > libcap-ng-devel \ > + libcmocka-devel \ > libcurl-devel \ > libdrm-devel \ > libepoxy-devel \ > @@ -59,6 +60,7 @@ RUN dnf update -y && \ > libgcrypt-devel \ > libiscsi-devel \ > libjpeg-devel \ > + json-c-devel \ > libnfs-devel \ > libpmem-devel \ > libpng-devel \ > -- > 2.36.1 > With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|