Message ID | 20200206115731.13552-3-n54@gmx.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Implements the NetBSD Virtual Machine Monitor accelerator | expand |
Tested-by: Jared McNeill <jmcneill@invisible.ca> On Thu, 6 Feb 2020, Kamil Rytarowski wrote: > From: Maxime Villard <max@m00nbsd.net> > > Introduces the configure support for the new NetBSD Virtual Machine Monitor that > allows for hypervisor acceleration from usermode components on the NetBSD > platform. > > Signed-off-by: Maxime Villard <max@m00nbsd.net> > Signed-off-by: Kamil Rytarowski <n54@gmx.com> > Reviewed-by: Sergio Lopez <slp@redhat.com> > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > configure | 37 +++++++++++++++++++++++++++++++++++++ > qemu-options.hx | 16 ++++++++-------- > 2 files changed, 45 insertions(+), 8 deletions(-) > > diff --git a/configure b/configure > index 115dc38085..d4a837cf9d 100755 > --- a/configure > +++ b/configure > @@ -241,6 +241,17 @@ supported_whpx_target() { > return 1 > } > > +supported_nvmm_target() { > + test "$nvmm" = "yes" || return 1 > + glob "$1" "*-softmmu" || return 1 > + case "${1%-softmmu}" in > + i386|x86_64) > + return 0 > + ;; > + esac > + return 1 > +} > + > supported_target() { > case "$1" in > *-softmmu) > @@ -268,6 +279,7 @@ supported_target() { > supported_hax_target "$1" && return 0 > supported_hvf_target "$1" && return 0 > supported_whpx_target "$1" && return 0 > + supported_nvmm_target "$1" && return 0 > print_error "TCG disabled, but hardware accelerator not available for '$target'" > return 1 > } > @@ -388,6 +400,7 @@ kvm="no" > hax="no" > hvf="no" > whpx="no" > +nvmm="no" > rdma="" > pvrdma="" > gprof="no" > @@ -823,6 +836,7 @@ DragonFly) > NetBSD) > bsd="yes" > hax="yes" > + nvmm="yes" > make="${MAKE-gmake}" > audio_drv_list="oss try-sdl" > audio_possible_drivers="oss sdl" > @@ -1169,6 +1183,10 @@ for opt do > ;; > --enable-whpx) whpx="yes" > ;; > + --disable-nvmm) nvmm="no" > + ;; > + --enable-nvmm) nvmm="yes" > + ;; > --disable-tcg-interpreter) tcg_interpreter="no" > ;; > --enable-tcg-interpreter) tcg_interpreter="yes" > @@ -1773,6 +1791,7 @@ disabled with --disable-FEATURE, default is enabled if available: > hax HAX acceleration support > hvf Hypervisor.framework acceleration support > whpx Windows Hypervisor Platform acceleration support > + nvmm NetBSD Virtual Machine Monitor acceleration support > rdma Enable RDMA-based migration > pvrdma Enable PVRDMA support > vde support for vde network > @@ -2764,6 +2783,20 @@ if test "$whpx" != "no" ; then > fi > fi > > +########################################## > +# NetBSD Virtual Machine Monitor (NVMM) accelerator check > +if test "$nvmm" != "no" ; then > + if check_include "nvmm.h" ; then > + nvmm="yes" > + LIBS="-lnvmm $LIBS" > + else > + if test "$nvmm" = "yes"; then > + feature_not_found "NVMM" "NVMM is not available" > + fi > + nvmm="no" > + fi > +fi > + > ########################################## > # Sparse probe > if test "$sparse" != "no" ; then > @@ -6543,6 +6576,7 @@ echo "KVM support $kvm" > echo "HAX support $hax" > echo "HVF support $hvf" > echo "WHPX support $whpx" > +echo "NVMM support $nvmm" > echo "TCG support $tcg" > if test "$tcg" = "yes" ; then > echo "TCG debug enabled $debug_tcg" > @@ -7828,6 +7862,9 @@ fi > if test "$target_aligned_only" = "yes" ; then > echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak > fi > +if supported_nvmm_target $target; then > + echo "CONFIG_NVMM=y" >> $config_target_mak > +fi > if test "$target_bigendian" = "yes" ; then > echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak > fi > diff --git a/qemu-options.hx b/qemu-options.hx > index 224a8e8712..10c046c916 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -31,7 +31,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ > "-machine [type=]name[,prop[=value][,...]]\n" > " selects emulated machine ('-machine help' for list)\n" > " property accel=accel1[:accel2[:...]] selects accelerator\n" > - " supported accelerators are kvm, xen, hax, hvf, whpx or tcg (default: tcg)\n" > + " supported accelerators are kvm, xen, hax, hvf, nvmm, whpx or tcg (default: tcg)\n" > " vmport=on|off|auto controls emulation of vmport (default: auto)\n" > " dump-guest-core=on|off include guest memory in a core dump (default=on)\n" > " mem-merge=on|off controls memory merge support (default: on)\n" > @@ -64,9 +64,9 @@ Supported machine properties are: > @table @option > @item accel=@var{accels1}[:@var{accels2}[:...]] > This is used to enable an accelerator. Depending on the target architecture, > -kvm, xen, hax, hvf, whpx or tcg can be available. By default, tcg is used. If there is > -more than one accelerator specified, the next one is used if the previous one > -fails to initialize. > +kvm, xen, hax, hvf, nvmm, whpx or tcg can be available. By default, tcg is used. > +If there is more than one accelerator specified, the next one is used if the > +previous one fails to initialize. > @item vmport=on|off|auto > Enables emulation of VMWare IO port, for vmmouse etc. auto says to select the > value based on accel. For accel=xen the default is off otherwise the default > @@ -114,7 +114,7 @@ ETEXI > > DEF("accel", HAS_ARG, QEMU_OPTION_accel, > "-accel [accel=]accelerator[,prop[=value][,...]]\n" > - " select accelerator (kvm, xen, hax, hvf, whpx or tcg; use 'help' for a list)\n" > + " select accelerator (kvm, xen, hax, hvf, nvmm, whpx or tcg; use 'help' for a list)\n" > " igd-passthru=on|off (enable Xen integrated Intel graphics passthrough, default=off)\n" > " kernel-irqchip=on|off|split controls accelerated irqchip support (default=on)\n" > " kvm-shadow-mem=size of KVM shadow MMU in bytes\n" > @@ -124,9 +124,9 @@ STEXI > @item -accel @var{name}[,prop=@var{value}[,...]] > @findex -accel > This is used to enable an accelerator. Depending on the target architecture, > -kvm, xen, hax, hvf, whpx or tcg can be available. By default, tcg is used. If there is > -more than one accelerator specified, the next one is used if the previous one > -fails to initialize. > +kvm, xen, hax, hvf, nvmm, whpx or tcg can be available. By default, tcg is used. > +If there is more than one accelerator specified, the next one is used if the > +previous one fails to initialize. > @table @option > @item igd-passthru=on|off > When Xen is in use, this option controls whether Intel integrated graphics > -- > 2.25.0 > >
diff --git a/configure b/configure index 115dc38085..d4a837cf9d 100755 --- a/configure +++ b/configure @@ -241,6 +241,17 @@ supported_whpx_target() { return 1 } +supported_nvmm_target() { + test "$nvmm" = "yes" || return 1 + glob "$1" "*-softmmu" || return 1 + case "${1%-softmmu}" in + i386|x86_64) + return 0 + ;; + esac + return 1 +} + supported_target() { case "$1" in *-softmmu) @@ -268,6 +279,7 @@ supported_target() { supported_hax_target "$1" && return 0 supported_hvf_target "$1" && return 0 supported_whpx_target "$1" && return 0 + supported_nvmm_target "$1" && return 0 print_error "TCG disabled, but hardware accelerator not available for '$target'" return 1 } @@ -388,6 +400,7 @@ kvm="no" hax="no" hvf="no" whpx="no" +nvmm="no" rdma="" pvrdma="" gprof="no" @@ -823,6 +836,7 @@ DragonFly) NetBSD) bsd="yes" hax="yes" + nvmm="yes" make="${MAKE-gmake}" audio_drv_list="oss try-sdl" audio_possible_drivers="oss sdl" @@ -1169,6 +1183,10 @@ for opt do ;; --enable-whpx) whpx="yes" ;; + --disable-nvmm) nvmm="no" + ;; + --enable-nvmm) nvmm="yes" + ;; --disable-tcg-interpreter) tcg_interpreter="no" ;; --enable-tcg-interpreter) tcg_interpreter="yes" @@ -1773,6 +1791,7 @@ disabled with --disable-FEATURE, default is enabled if available: hax HAX acceleration support hvf Hypervisor.framework acceleration support whpx Windows Hypervisor Platform acceleration support + nvmm NetBSD Virtual Machine Monitor acceleration support rdma Enable RDMA-based migration pvrdma Enable PVRDMA support vde support for vde network @@ -2764,6 +2783,20 @@ if test "$whpx" != "no" ; then fi fi +########################################## +# NetBSD Virtual Machine Monitor (NVMM) accelerator check +if test "$nvmm" != "no" ; then + if check_include "nvmm.h" ; then + nvmm="yes" + LIBS="-lnvmm $LIBS" + else + if test "$nvmm" = "yes"; then + feature_not_found "NVMM" "NVMM is not available" + fi + nvmm="no" + fi +fi + ########################################## # Sparse probe if test "$sparse" != "no" ; then @@ -6543,6 +6576,7 @@ echo "KVM support $kvm" echo "HAX support $hax" echo "HVF support $hvf" echo "WHPX support $whpx" +echo "NVMM support $nvmm" echo "TCG support $tcg" if test "$tcg" = "yes" ; then echo "TCG debug enabled $debug_tcg" @@ -7828,6 +7862,9 @@ fi if test "$target_aligned_only" = "yes" ; then echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak fi +if supported_nvmm_target $target; then + echo "CONFIG_NVMM=y" >> $config_target_mak +fi if test "$target_bigendian" = "yes" ; then echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak fi diff --git a/qemu-options.hx b/qemu-options.hx index 224a8e8712..10c046c916 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -31,7 +31,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ "-machine [type=]name[,prop[=value][,...]]\n" " selects emulated machine ('-machine help' for list)\n" " property accel=accel1[:accel2[:...]] selects accelerator\n" - " supported accelerators are kvm, xen, hax, hvf, whpx or tcg (default: tcg)\n" + " supported accelerators are kvm, xen, hax, hvf, nvmm, whpx or tcg (default: tcg)\n" " vmport=on|off|auto controls emulation of vmport (default: auto)\n" " dump-guest-core=on|off include guest memory in a core dump (default=on)\n" " mem-merge=on|off controls memory merge support (default: on)\n" @@ -64,9 +64,9 @@ Supported machine properties are: @table @option @item accel=@var{accels1}[:@var{accels2}[:...]] This is used to enable an accelerator. Depending on the target architecture, -kvm, xen, hax, hvf, whpx or tcg can be available. By default, tcg is used. If there is -more than one accelerator specified, the next one is used if the previous one -fails to initialize. +kvm, xen, hax, hvf, nvmm, whpx or tcg can be available. By default, tcg is used. +If there is more than one accelerator specified, the next one is used if the +previous one fails to initialize. @item vmport=on|off|auto Enables emulation of VMWare IO port, for vmmouse etc. auto says to select the value based on accel. For accel=xen the default is off otherwise the default @@ -114,7 +114,7 @@ ETEXI DEF("accel", HAS_ARG, QEMU_OPTION_accel, "-accel [accel=]accelerator[,prop[=value][,...]]\n" - " select accelerator (kvm, xen, hax, hvf, whpx or tcg; use 'help' for a list)\n" + " select accelerator (kvm, xen, hax, hvf, nvmm, whpx or tcg; use 'help' for a list)\n" " igd-passthru=on|off (enable Xen integrated Intel graphics passthrough, default=off)\n" " kernel-irqchip=on|off|split controls accelerated irqchip support (default=on)\n" " kvm-shadow-mem=size of KVM shadow MMU in bytes\n" @@ -124,9 +124,9 @@ STEXI @item -accel @var{name}[,prop=@var{value}[,...]] @findex -accel This is used to enable an accelerator. Depending on the target architecture, -kvm, xen, hax, hvf, whpx or tcg can be available. By default, tcg is used. If there is -more than one accelerator specified, the next one is used if the previous one -fails to initialize. +kvm, xen, hax, hvf, nvmm, whpx or tcg can be available. By default, tcg is used. +If there is more than one accelerator specified, the next one is used if the +previous one fails to initialize. @table @option @item igd-passthru=on|off When Xen is in use, this option controls whether Intel integrated graphics