mirror of https://github.com/xqemu/xqemu.git
Add the Windows Hypervisor Platform accelerator.
Introduces the configure support for the new Windows Hypervisor Platform that allows for hypervisor acceleration from usermode components on the Windows platform. Signed-off-by: Justin Terry (VM) <juterry@microsoft.com> Message-Id: <1516655269-1785-2-git-send-email-juterry@microsoft.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
8f6d701044
commit
d661d9a42b
|
@ -222,6 +222,17 @@ supported_hvf_target() {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
supported_whpx_target() {
|
||||||
|
test "$whpx" = "yes" || return 1
|
||||||
|
glob "$1" "*-softmmu" || return 1
|
||||||
|
case "${1%-softmmu}" in
|
||||||
|
i386|x86_64)
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
supported_target() {
|
supported_target() {
|
||||||
case "$1" in
|
case "$1" in
|
||||||
*-softmmu)
|
*-softmmu)
|
||||||
|
@ -248,6 +259,7 @@ supported_target() {
|
||||||
supported_xen_target "$1" && return 0
|
supported_xen_target "$1" && return 0
|
||||||
supported_hax_target "$1" && return 0
|
supported_hax_target "$1" && return 0
|
||||||
supported_hvf_target "$1" && return 0
|
supported_hvf_target "$1" && return 0
|
||||||
|
supported_whpx_target "$1" && return 0
|
||||||
print_error "TCG disabled, but hardware accelerator not available for '$target'"
|
print_error "TCG disabled, but hardware accelerator not available for '$target'"
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -338,6 +350,7 @@ vhost_user=""
|
||||||
kvm="no"
|
kvm="no"
|
||||||
hax="no"
|
hax="no"
|
||||||
hvf="no"
|
hvf="no"
|
||||||
|
whpx="no"
|
||||||
rdma=""
|
rdma=""
|
||||||
gprof="no"
|
gprof="no"
|
||||||
debug_tcg="no"
|
debug_tcg="no"
|
||||||
|
@ -1058,6 +1071,10 @@ for opt do
|
||||||
;;
|
;;
|
||||||
--enable-hvf) hvf="yes"
|
--enable-hvf) hvf="yes"
|
||||||
;;
|
;;
|
||||||
|
--disable-whpx) whpx="no"
|
||||||
|
;;
|
||||||
|
--enable-whpx) whpx="yes"
|
||||||
|
;;
|
||||||
--disable-tcg-interpreter) tcg_interpreter="no"
|
--disable-tcg-interpreter) tcg_interpreter="no"
|
||||||
;;
|
;;
|
||||||
--enable-tcg-interpreter) tcg_interpreter="yes"
|
--enable-tcg-interpreter) tcg_interpreter="yes"
|
||||||
|
@ -1557,6 +1574,7 @@ disabled with --disable-FEATURE, default is enabled if available:
|
||||||
kvm KVM acceleration support
|
kvm KVM acceleration support
|
||||||
hax HAX acceleration support
|
hax HAX acceleration support
|
||||||
hvf Hypervisor.framework acceleration support
|
hvf Hypervisor.framework acceleration support
|
||||||
|
whpx Windows Hypervisor Platform acceleration support
|
||||||
rdma RDMA-based migration support
|
rdma RDMA-based migration support
|
||||||
vde support for vde network
|
vde support for vde network
|
||||||
netmap support for netmap network
|
netmap support for netmap network
|
||||||
|
@ -2455,6 +2473,30 @@ if test "$xen_pv_domain_build" = "yes" &&
|
||||||
"which requires Xen support."
|
"which requires Xen support."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# Windows Hypervisor Platform accelerator (WHPX) check
|
||||||
|
if test "$whpx" != "no" ; then
|
||||||
|
cat > $TMPC << EOF
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winhvplatform.h>
|
||||||
|
#include <winhvemulation.h>
|
||||||
|
int main(void) {
|
||||||
|
WHV_CAPABILITY whpx_cap;
|
||||||
|
WHvGetCapability(WHvCapabilityCodeFeatures, &whpx_cap, sizeof(whpx_cap));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
if compile_prog "" "-lwinhvplatform -lwinhvemulation" ; then
|
||||||
|
libs_softmmu="$libs_softmmu -lwinhvplatform -lwinhvemulation"
|
||||||
|
whpx="yes"
|
||||||
|
else
|
||||||
|
if test "$whpx" = "yes"; then
|
||||||
|
feature_not_found "winhvplatform" "winhvemulation is not installed"
|
||||||
|
fi
|
||||||
|
whpx="no"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
# Sparse probe
|
# Sparse probe
|
||||||
if test "$sparse" != "no" ; then
|
if test "$sparse" != "no" ; then
|
||||||
|
@ -5648,6 +5690,7 @@ echo "Install blobs $blobs"
|
||||||
echo "KVM support $kvm"
|
echo "KVM support $kvm"
|
||||||
echo "HAX support $hax"
|
echo "HAX support $hax"
|
||||||
echo "HVF support $hvf"
|
echo "HVF support $hvf"
|
||||||
|
echo "WHPX support $whpx"
|
||||||
echo "TCG support $tcg"
|
echo "TCG support $tcg"
|
||||||
if test "$tcg" = "yes" ; then
|
if test "$tcg" = "yes" ; then
|
||||||
echo "TCG debug enabled $debug_tcg"
|
echo "TCG debug enabled $debug_tcg"
|
||||||
|
@ -5815,7 +5858,7 @@ if test "$mingw32" = "yes" ; then
|
||||||
echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
|
echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$guest_agent_msi" = "yes"; then
|
if test "$guest_agent_msi" = "yes"; then
|
||||||
echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
|
echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
|
||||||
echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
|
echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
|
||||||
echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
|
echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
|
||||||
echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
|
echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
|
||||||
|
@ -6748,6 +6791,9 @@ fi
|
||||||
if supported_hvf_target $target; then
|
if supported_hvf_target $target; then
|
||||||
echo "CONFIG_HVF=y" >> $config_target_mak
|
echo "CONFIG_HVF=y" >> $config_target_mak
|
||||||
fi
|
fi
|
||||||
|
if supported_whpx_target $target; then
|
||||||
|
echo "CONFIG_WHPX=y" >> $config_target_mak
|
||||||
|
fi
|
||||||
if test "$target_bigendian" = "yes" ; then
|
if test "$target_bigendian" = "yes" ; then
|
||||||
echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
|
echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -31,7 +31,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
|
||||||
"-machine [type=]name[,prop[=value][,...]]\n"
|
"-machine [type=]name[,prop[=value][,...]]\n"
|
||||||
" selects emulated machine ('-machine help' for list)\n"
|
" selects emulated machine ('-machine help' for list)\n"
|
||||||
" property accel=accel1[:accel2[:...]] selects accelerator\n"
|
" property accel=accel1[:accel2[:...]] selects accelerator\n"
|
||||||
" supported accelerators are kvm, xen, hax, hvf or tcg (default: tcg)\n"
|
" supported accelerators are kvm, xen, hax, hvf, whpx or tcg (default: tcg)\n"
|
||||||
" kernel_irqchip=on|off|split controls accelerated irqchip support (default=off)\n"
|
" kernel_irqchip=on|off|split controls accelerated irqchip support (default=off)\n"
|
||||||
" vmport=on|off|auto controls emulation of vmport (default: auto)\n"
|
" vmport=on|off|auto controls emulation of vmport (default: auto)\n"
|
||||||
" kvm_shadow_mem=size of KVM shadow MMU in bytes\n"
|
" kvm_shadow_mem=size of KVM shadow MMU in bytes\n"
|
||||||
|
@ -66,7 +66,7 @@ Supported machine properties are:
|
||||||
@table @option
|
@table @option
|
||||||
@item accel=@var{accels1}[:@var{accels2}[:...]]
|
@item accel=@var{accels1}[:@var{accels2}[:...]]
|
||||||
This is used to enable an accelerator. Depending on the target architecture,
|
This is used to enable an accelerator. Depending on the target architecture,
|
||||||
kvm, xen, hax, hvf or tcg can be available. By default, tcg is used. If there is
|
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
|
more than one accelerator specified, the next one is used if the previous one
|
||||||
fails to initialize.
|
fails to initialize.
|
||||||
@item kernel_irqchip=on|off
|
@item kernel_irqchip=on|off
|
||||||
|
@ -126,13 +126,13 @@ ETEXI
|
||||||
|
|
||||||
DEF("accel", HAS_ARG, QEMU_OPTION_accel,
|
DEF("accel", HAS_ARG, QEMU_OPTION_accel,
|
||||||
"-accel [accel=]accelerator[,thread=single|multi]\n"
|
"-accel [accel=]accelerator[,thread=single|multi]\n"
|
||||||
" select accelerator (kvm, xen, hax, hvf or tcg; use 'help' for a list)\n"
|
" select accelerator (kvm, xen, hax, hvf, whpx or tcg; use 'help' for a list)\n"
|
||||||
" thread=single|multi (enable multi-threaded TCG)", QEMU_ARCH_ALL)
|
" thread=single|multi (enable multi-threaded TCG)", QEMU_ARCH_ALL)
|
||||||
STEXI
|
STEXI
|
||||||
@item -accel @var{name}[,prop=@var{value}[,...]]
|
@item -accel @var{name}[,prop=@var{value}[,...]]
|
||||||
@findex -accel
|
@findex -accel
|
||||||
This is used to enable an accelerator. Depending on the target architecture,
|
This is used to enable an accelerator. Depending on the target architecture,
|
||||||
kvm, xen, hax, hvf or tcg can be available. By default, tcg is used. If there is
|
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
|
more than one accelerator specified, the next one is used if the previous one
|
||||||
fails to initialize.
|
fails to initialize.
|
||||||
@table @option
|
@table @option
|
||||||
|
|
Loading…
Reference in New Issue