[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PULL 06/18] vfio-user: build library
From: |
Daniel P . Berrangé |
Subject: |
Re: [PULL 06/18] vfio-user: build library |
Date: |
Thu, 21 Jul 2022 11:25:13 +0100 |
User-agent: |
Mutt/2.2.6 (2022-06-05) |
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.raman@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.ufimtseva@oracle.com>
> Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> Message-id:
> c2adec87958b081d1dc8775d4aa05c897912f025.1655151679.git.jag.raman@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 <stefanha@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 <jasowang@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 :|