* UI configury cleanups and Meson conversion
* scripts/gdb improvements * WHPX cleanups and fixes * cirrus win32 CI improvements * meson gnutls workaround -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAl/9yL8UHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroOl8wgAjryxhmkNRYFDrhtLqB3OirurvQlS eZEwFIE88rcv6KvE2Acw+n+0cvk40mKVE5u265VjmKgItbEQKBsmA+vo9NVY+ZDT Yz5p27AzYUM/dNgtajcUzkainzcseYMCyoXV3+7+1X67i15gxJsa7/y0jAVRyrW/ z8RJOYQC1oP9dRbhH7Y5nw6XRLpB2+CEMX2nQ/g58bM/X/vNeNxhFKAZlnm6cy4q ClX8pZYewGg/w+LKNPCUZvnSyYeErdYqoX0bKZjawp71a8/6/Qth2NDU6r1VoaKa e3zF2XRdQcSPohGAwmmCMFV1rP7DplFcKO4bQ2Q0BuI5E79MykhQeLztLA== =yW7F -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging * UI configury cleanups and Meson conversion * scripts/gdb improvements * WHPX cleanups and fixes * cirrus win32 CI improvements * meson gnutls workaround # gpg: Signature made Tue 12 Jan 2021 16:05:19 GMT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini-gitlab/tags/for-upstream: target/i386: Use X86Seg enum for segment registers configure: quote command line arguments in config.status configure: move Cocoa incompatibility checks to Meson configure: move GTK+ detection to Meson configure: move X11 detection to Meson gtk: remove CONFIG_GTK_GL cocoa: do not enable coreaudio automatically virtio-scsi: trace events meson: Propagate gnutls dependency Docs/RCU: Correct sample code of qatomic_rcu_set scripts/gdb: implement 'qemu bt' scripts/gdb: fix 'qemu coroutine' when users selects a non topmost stack frame meson: fix Cocoa option in summary whpx: move whpx_lapic_state from header to c file maintainers: Add me as Windows Hosted Continuous Integration maintainer cirrus/msys2: Cache msys2 mingw in a better way. cirrus/msys2: Exit powershell with $LastExitCode whpx: move internal definitions to whpx-internal.h whpx: rename whp-dispatch to whpx-internal.h meson: do not use CONFIG_VIRTFS Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
6b63d12612
119
.cirrus.yml
119
.cirrus.yml
@ -64,23 +64,61 @@ windows_msys2_task:
|
||||
CIRRUS_SHELL: powershell
|
||||
MSYS: winsymlinks:nativestrict
|
||||
MSYSTEM: MINGW64
|
||||
MSYS2_URL: https://github.com/msys2/msys2-installer/releases/download/2021-01-05/msys2-base-x86_64-20210105.sfx.exe
|
||||
MSYS2_FINGERPRINT: 0
|
||||
MSYS2_PACKAGES: "
|
||||
diffutils git grep make pkg-config sed
|
||||
mingw-w64-x86_64-python
|
||||
mingw-w64-x86_64-python-sphinx
|
||||
mingw-w64-x86_64-toolchain
|
||||
mingw-w64-x86_64-SDL2
|
||||
mingw-w64-x86_64-SDL2_image
|
||||
mingw-w64-x86_64-gtk3
|
||||
mingw-w64-x86_64-glib2
|
||||
mingw-w64-x86_64-ninja
|
||||
mingw-w64-x86_64-jemalloc
|
||||
mingw-w64-x86_64-lzo2
|
||||
mingw-w64-x86_64-zstd
|
||||
mingw-w64-x86_64-libjpeg-turbo
|
||||
mingw-w64-x86_64-pixman
|
||||
mingw-w64-x86_64-libgcrypt
|
||||
mingw-w64-x86_64-libpng
|
||||
mingw-w64-x86_64-libssh
|
||||
mingw-w64-x86_64-libxml2
|
||||
mingw-w64-x86_64-snappy
|
||||
mingw-w64-x86_64-libusb
|
||||
mingw-w64-x86_64-usbredir
|
||||
mingw-w64-x86_64-libtasn1
|
||||
mingw-w64-x86_64-nettle
|
||||
mingw-w64-x86_64-cyrus-sasl
|
||||
mingw-w64-x86_64-curl
|
||||
mingw-w64-x86_64-gnutls
|
||||
mingw-w64-x86_64-libnfs
|
||||
"
|
||||
CHERE_INVOKING: 1
|
||||
setup_script:
|
||||
- choco install -y --no-progress 7zip
|
||||
- Write-Output $env:PATH
|
||||
msys2_cache:
|
||||
folder: C:\tools\archive
|
||||
reupload_on_changes: false
|
||||
fingerprint_script: cat .cirrus.yml
|
||||
# These env variables are used to generate fingerprint to trigger the cache procedure
|
||||
# If wanna to force re-populate msys2, increase MSYS2_FINGERPRINT
|
||||
fingerprint_script:
|
||||
- |
|
||||
echo $env:CIRRUS_TASK_NAME
|
||||
echo $env:MSYS2_URL
|
||||
echo $env:MSYS2_FINGERPRINT
|
||||
echo $env:MSYS2_PACKAGES
|
||||
populate_script:
|
||||
- |
|
||||
md C:\tools
|
||||
md C:\tools\archive
|
||||
md -Force C:\tools\archive\pkg
|
||||
$start_time = Get-Date
|
||||
bitsadmin /transfer msys_download /dynamic /download /priority FOREGROUND $env:MSYS2_URL C:\tools\archive\base.exe
|
||||
Write-Output "Download time taken: $((Get-Date).Subtract($start_time))"
|
||||
cd C:\tools
|
||||
bitsadmin /transfer msys_download /dynamic /download /priority FOREGROUND https://github.com/msys2/msys2-installer/releases/download/2020-09-03/msys2-base-x86_64-20200903.sfx.exe C:\tools\base.exe
|
||||
Write-Output "Download time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
|
||||
C:\tools\base.exe -y
|
||||
C:\tools\archive\base.exe -y
|
||||
del -Force C:\tools\archive\base.exe
|
||||
Write-Output "Base install time taken: $((Get-Date).Subtract($start_time))"
|
||||
$start_time = Get-Date
|
||||
|
||||
((Get-Content -path C:\tools\msys64\etc\\post-install\\07-pacman-key.post -Raw) -replace '--refresh-keys', '--version') | Set-Content -Path C:\tools\msys64\etc\\post-install\\07-pacman-key.post
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "sed -i 's/^CheckSpace/#CheckSpace/g' /etc/pacman.conf"
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "export"
|
||||
@ -90,52 +128,35 @@ windows_msys2_task:
|
||||
tasklist
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "mv -f /etc/pacman.conf.pacnew /etc/pacman.conf || true"
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -Suu --overwrite=*"
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S --needed \
|
||||
diffutils git grep make pkg-config sed \
|
||||
mingw-w64-x86_64-python \
|
||||
mingw-w64-x86_64-toolchain \
|
||||
mingw-w64-x86_64-SDL2 \
|
||||
mingw-w64-x86_64-SDL2_image \
|
||||
mingw-w64-x86_64-gtk3 \
|
||||
mingw-w64-x86_64-glib2 \
|
||||
mingw-w64-x86_64-ninja \
|
||||
mingw-w64-x86_64-jemalloc \
|
||||
mingw-w64-x86_64-lzo2 \
|
||||
mingw-w64-x86_64-zstd \
|
||||
mingw-w64-x86_64-libjpeg-turbo \
|
||||
mingw-w64-x86_64-pixman \
|
||||
mingw-w64-x86_64-libgcrypt \
|
||||
mingw-w64-x86_64-libpng \
|
||||
mingw-w64-x86_64-libssh \
|
||||
mingw-w64-x86_64-libxml2 \
|
||||
mingw-w64-x86_64-snappy \
|
||||
mingw-w64-x86_64-libusb \
|
||||
mingw-w64-x86_64-usbredir \
|
||||
mingw-w64-x86_64-libtasn1 \
|
||||
mingw-w64-x86_64-nettle \
|
||||
mingw-w64-x86_64-cyrus-sasl \
|
||||
mingw-w64-x86_64-curl \
|
||||
mingw-w64-x86_64-gnutls \
|
||||
mingw-w64-x86_64-libnfs \
|
||||
"
|
||||
bitsadmin /transfer msys_download /dynamic /download /priority FOREGROUND `
|
||||
https://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-python-sphinx-2.3.1-1-any.pkg.tar.xz `
|
||||
C:\tools\mingw-w64-x86_64-python-sphinx-2.3.1-1-any.pkg.tar.xz
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -U /c/tools/mingw-w64-x86_64-python-sphinx-2.3.1-1-any.pkg.tar.xz"
|
||||
del C:\tools\mingw-w64-x86_64-python-sphinx-2.3.1-1-any.pkg.tar.xz
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "rm -rf /var/cache/pacman/pkg/*"
|
||||
cd C:\tools\msys64
|
||||
echo "Start archive"
|
||||
cmd /C "7z a -ttar . -so | 7z a -txz -simsys2-x86_64.tar C:\tools\archive\msys2-x86_64.tar.xz"
|
||||
Write-Output "Core install time taken: $((Get-Date).Subtract($start_time))"
|
||||
$start_time = Get-Date
|
||||
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S --needed $env:MSYS2_PACKAGES"
|
||||
Write-Output "Package install time taken: $((Get-Date).Subtract($start_time))"
|
||||
$start_time = Get-Date
|
||||
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\etc\mtab
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\dev\fd
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\dev\stderr
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\dev\stdin
|
||||
del -Force -ErrorAction SilentlyContinue C:\tools\msys64\dev\stdout
|
||||
del -Force -Recurse -ErrorAction SilentlyContinue C:\tools\msys64\var\cache\pacman\pkg
|
||||
tar cf C:\tools\archive\msys64.tar -C C:\tools\ msys64
|
||||
|
||||
Write-Output "Package archive time taken: $((Get-Date).Subtract($start_time))"
|
||||
del -Force -Recurse -ErrorAction SilentlyContinue c:\tools\msys64
|
||||
install_script:
|
||||
- |
|
||||
$start_time = Get-Date
|
||||
cd C:\tools
|
||||
cmd /C "7z x C:\tools\archive\msys2-x86_64.tar.xz -so | 7z x -aoa -simsys2-x86_64.tar -ttar -omsys64"
|
||||
C:\tools\msys64\usr\bin\bash.exe -lc "export"
|
||||
|
||||
ls C:\tools\archive\msys64.tar
|
||||
tar xf C:\tools\archive\msys64.tar
|
||||
Write-Output "Extract msys2 time taken: $((Get-Date).Subtract($start_time))"
|
||||
script:
|
||||
- C:\tools\msys64\usr\bin\bash.exe -lc "mkdir build"
|
||||
- C:\tools\msys64\usr\bin\bash.exe -lc "cd build && ../configure --python=python3"
|
||||
- C:\tools\msys64\usr\bin\bash.exe -lc "cd build && make -j8"
|
||||
- exit $LastExitCode
|
||||
test_script:
|
||||
- C:\tools\msys64\usr\bin\bash.exe -lc "cd build && make V=1 check"
|
||||
- exit $LastExitCode
|
||||
|
@ -3198,6 +3198,12 @@ S: Maintained
|
||||
F: .cirrus.yml
|
||||
W: https://cirrus-ci.com/github/qemu/qemu
|
||||
|
||||
Windows Hosted Continuous Integration
|
||||
M: Yonggang Luo <luoyonggang@gmail.com>
|
||||
S: Maintained
|
||||
F: .cirrus.yml
|
||||
W: https://cirrus-ci.com/github/qemu/qemu
|
||||
|
||||
GitLab Continuous Integration
|
||||
M: Thomas Huth <thuth@redhat.com>
|
||||
M: Philippe Mathieu-Daudé <philmd@redhat.com>
|
||||
|
@ -40,7 +40,7 @@ block_ss.add(files(
|
||||
'vmdk.c',
|
||||
'vpc.c',
|
||||
'write-threshold.c',
|
||||
), zstd, zlib)
|
||||
), zstd, zlib, gnutls)
|
||||
|
||||
softmmu_ss.add(when: 'CONFIG_TCG', if_true: files('blkreplay.c'))
|
||||
|
||||
|
93
configure
vendored
93
configure
vendored
@ -89,6 +89,10 @@ printf " '%s'" "$0" "$@" >> config.log
|
||||
echo >> config.log
|
||||
echo "#" >> config.log
|
||||
|
||||
quote_sh() {
|
||||
printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
(echo
|
||||
echo "ERROR: $1"
|
||||
@ -414,8 +418,7 @@ cfi="false"
|
||||
cfi_debug="false"
|
||||
seccomp="auto"
|
||||
glusterfs="auto"
|
||||
gtk="$default_feature"
|
||||
gtk_gl="no"
|
||||
gtk="auto"
|
||||
tls_priority="NORMAL"
|
||||
gnutls="$default_feature"
|
||||
nettle="$default_feature"
|
||||
@ -773,7 +776,6 @@ Darwin)
|
||||
QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
|
||||
QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
|
||||
fi
|
||||
cocoa="enabled"
|
||||
audio_drv_list="coreaudio try-sdl"
|
||||
audio_possible_drivers="coreaudio sdl"
|
||||
QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
|
||||
@ -1149,9 +1151,7 @@ for opt do
|
||||
;;
|
||||
--disable-cocoa) cocoa="disabled"
|
||||
;;
|
||||
--enable-cocoa)
|
||||
cocoa="enabled" ;
|
||||
audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
|
||||
--enable-cocoa) cocoa="enabled"
|
||||
;;
|
||||
--disable-system) softmmu="no"
|
||||
;;
|
||||
@ -1380,9 +1380,9 @@ for opt do
|
||||
--enable-uuid|--disable-uuid)
|
||||
echo "$0: $opt is obsolete, UUID support is always built" >&2
|
||||
;;
|
||||
--disable-gtk) gtk="no"
|
||||
--disable-gtk) gtk="disabled"
|
||||
;;
|
||||
--enable-gtk) gtk="yes"
|
||||
--enable-gtk) gtk="enabled"
|
||||
;;
|
||||
--tls-priority=*) tls_priority="$optarg"
|
||||
;;
|
||||
@ -2325,20 +2325,6 @@ if test -z "$want_tools"; then
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# cocoa implies not SDL or GTK
|
||||
# (the cocoa UI code currently assumes it is always the active UI
|
||||
# and doesn't interact well with other UI frontend code)
|
||||
if test "$cocoa" = "enabled"; then
|
||||
if test "$sdl" = "enabled"; then
|
||||
error_exit "Cocoa and SDL UIs cannot both be enabled at once"
|
||||
fi
|
||||
if test "$gtk" = "yes"; then
|
||||
error_exit "Cocoa and GTK UIs cannot both be enabled at once"
|
||||
fi
|
||||
gtk=no
|
||||
sdl=disabled
|
||||
fi
|
||||
|
||||
# Some versions of Mac OS X incorrectly define SIZE_MAX
|
||||
cat > $TMPC << EOF
|
||||
#include <stdint.h>
|
||||
@ -2762,39 +2748,6 @@ EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# X11 probe
|
||||
if $pkg_config --exists "x11"; then
|
||||
have_x11=yes
|
||||
x11_cflags=$($pkg_config --cflags x11)
|
||||
x11_libs=$($pkg_config --libs x11)
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# GTK probe
|
||||
|
||||
if test "$gtk" != "no"; then
|
||||
gtkpackage="gtk+-3.0"
|
||||
gtkx11package="gtk+-x11-3.0"
|
||||
gtkversion="3.22.0"
|
||||
if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
|
||||
gtk_cflags=$($pkg_config --cflags $gtkpackage)
|
||||
gtk_libs=$($pkg_config --libs $gtkpackage)
|
||||
gtk_version=$($pkg_config --modversion $gtkpackage)
|
||||
if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
|
||||
need_x11=yes
|
||||
gtk_cflags="$gtk_cflags $x11_cflags"
|
||||
gtk_libs="$gtk_libs $x11_libs"
|
||||
fi
|
||||
gtk="yes"
|
||||
elif test "$gtk" = "yes"; then
|
||||
feature_not_found "gtk" "Install gtk3-devel"
|
||||
else
|
||||
gtk="no"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
##########################################
|
||||
# GNUTLS probe
|
||||
|
||||
@ -3628,9 +3581,6 @@ if test "$opengl" != "no" ; then
|
||||
opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
|
||||
opengl_libs="$($pkg_config --libs $opengl_pkgs)"
|
||||
opengl=yes
|
||||
if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
|
||||
gtk_gl="yes"
|
||||
fi
|
||||
else
|
||||
if test "$opengl" = "yes" ; then
|
||||
feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
|
||||
@ -3654,16 +3604,6 @@ EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
|
||||
for target in $target_list; do
|
||||
case $target in
|
||||
lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
|
||||
need_x11=yes
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# libxml2 probe
|
||||
if test "$libxml2" != "no" ; then
|
||||
@ -5687,11 +5627,6 @@ fi
|
||||
if test "$module_upgrades" = "yes"; then
|
||||
echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
|
||||
fi
|
||||
if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
|
||||
echo "CONFIG_X11=y" >> $config_host_mak
|
||||
echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
|
||||
echo "X11_LIBS=$x11_libs" >> $config_host_mak
|
||||
fi
|
||||
if test "$pipe2" = "yes" ; then
|
||||
echo "CONFIG_PIPE2=y" >> $config_host_mak
|
||||
fi
|
||||
@ -5779,14 +5714,6 @@ fi
|
||||
if test "$bswap_h" = "yes" ; then
|
||||
echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
|
||||
fi
|
||||
if test "$gtk" = "yes" ; then
|
||||
echo "CONFIG_GTK=y" >> $config_host_mak
|
||||
echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
|
||||
echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
|
||||
if test "$gtk_gl" = "yes" ; then
|
||||
echo "CONFIG_GTK_GL=y" >> $config_host_mak
|
||||
fi
|
||||
fi
|
||||
if test "$gio" = "yes" ; then
|
||||
echo "CONFIG_GIO=y" >> $config_host_mak
|
||||
echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
|
||||
@ -6520,7 +6447,7 @@ NINJA=$ninja $meson setup \
|
||||
-Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
|
||||
-Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
|
||||
-Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
|
||||
-Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
|
||||
-Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
|
||||
-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
|
||||
-Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
|
||||
-Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
|
||||
@ -6596,7 +6523,7 @@ preserve_env WINDRES
|
||||
|
||||
printf "exec" >>config.status
|
||||
for i in "$0" "$@"; do
|
||||
test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
|
||||
test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
|
||||
done
|
||||
echo ' "$@"' >>config.status
|
||||
chmod +x config.status
|
||||
|
@ -392,7 +392,7 @@ Instead, we store the size of the array with the array itself:
|
||||
|
||||
/* Removal phase. */
|
||||
old_array = global_array;
|
||||
qatomic_rcu_set(&new_array->data, new_array);
|
||||
qatomic_rcu_set(&global_array, new_array);
|
||||
synchronize_rcu();
|
||||
|
||||
/* Reclamation phase. */
|
||||
|
@ -8,7 +8,7 @@ fsdev_ss.add(when: ['CONFIG_FSDEV_9P'], if_true: files(
|
||||
), if_false: files('qemu-fsdev-dummy.c'))
|
||||
softmmu_ss.add_all(when: 'CONFIG_LINUX', if_true: fsdev_ss)
|
||||
|
||||
have_virtfs_proxy_helper = have_tools and libattr.found() and libcap_ng.found() and 'CONFIG_VIRTFS' in config_host
|
||||
have_virtfs_proxy_helper = have_tools and libattr.found() and libcap_ng.found() and have_virtfs
|
||||
if have_virtfs_proxy_helper
|
||||
executable('virtfs-proxy-helper',
|
||||
files('virtfs-proxy-helper.c', '9p-marshal.c', '9p-iov-marshal.c'),
|
||||
|
@ -294,6 +294,15 @@ lsi_awoken(void) "Woken by SIGP"
|
||||
lsi_reg_read(const char *name, int offset, uint8_t ret) "Read reg %s 0x%x = 0x%02x"
|
||||
lsi_reg_write(const char *name, int offset, uint8_t val) "Write reg %s 0x%x = 0x%02x"
|
||||
|
||||
# virtio-scsi.c
|
||||
virtio_scsi_cmd_req(int lun, uint32_t tag, uint8_t cmd) "virtio_scsi_cmd_req lun=%u tag=0x%x cmd=0x%x"
|
||||
virtio_scsi_cmd_resp(int lun, uint32_t tag, int response, uint8_t status) "virtio_scsi_cmd_resp lun=%u tag=0x%x response=%d status=0x%x"
|
||||
virtio_scsi_tmf_req(int lun, uint32_t tag, int subtype) "virtio_scsi_tmf_req lun=%u tag=0x%x subtype=%d"
|
||||
virtio_scsi_tmf_resp(int lun, uint32_t tag, int response) "virtio_scsi_tmf_resp lun=%u tag=0x%x response=%d"
|
||||
virtio_scsi_an_req(int lun, uint32_t event_requested) "virtio_scsi_an_req lun=%u event_requested=0x%x"
|
||||
virtio_scsi_an_resp(int lun, int response) "virtio_scsi_an_resp lun=%u response=%d"
|
||||
virtio_scsi_event(int lun, int event, int reason) "virtio_scsi_event lun=%u event=%d reason=%d"
|
||||
|
||||
# scsi-disk.c
|
||||
scsi_disk_check_condition(uint32_t tag, uint8_t key, uint8_t asc, uint8_t ascq) "Command complete tag=0x%x sense=%d/%d/%d"
|
||||
scsi_disk_read_complete(uint32_t tag, size_t size) "Data ready tag=0x%x len=%zd"
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "scsi/constants.h"
|
||||
#include "hw/virtio/virtio-bus.h"
|
||||
#include "hw/virtio/virtio-access.h"
|
||||
#include "trace.h"
|
||||
|
||||
static inline int virtio_scsi_get_lun(uint8_t *lun)
|
||||
{
|
||||
@ -239,7 +240,11 @@ static void virtio_scsi_cancel_notify(Notifier *notifier, void *data)
|
||||
notifier);
|
||||
|
||||
if (--n->tmf_req->remaining == 0) {
|
||||
virtio_scsi_complete_req(n->tmf_req);
|
||||
VirtIOSCSIReq *req = n->tmf_req;
|
||||
|
||||
trace_virtio_scsi_tmf_resp(virtio_scsi_get_lun(req->req.tmf.lun),
|
||||
req->req.tmf.tag, req->resp.tmf.response);
|
||||
virtio_scsi_complete_req(req);
|
||||
}
|
||||
g_free(n);
|
||||
}
|
||||
@ -273,6 +278,9 @@ static int virtio_scsi_do_tmf(VirtIOSCSI *s, VirtIOSCSIReq *req)
|
||||
req->req.tmf.subtype =
|
||||
virtio_tswap32(VIRTIO_DEVICE(s), req->req.tmf.subtype);
|
||||
|
||||
trace_virtio_scsi_tmf_req(virtio_scsi_get_lun(req->req.tmf.lun),
|
||||
req->req.tmf.tag, req->req.tmf.subtype);
|
||||
|
||||
switch (req->req.tmf.subtype) {
|
||||
case VIRTIO_SCSI_T_TMF_ABORT_TASK:
|
||||
case VIRTIO_SCSI_T_TMF_QUERY_TASK:
|
||||
@ -429,11 +437,23 @@ static void virtio_scsi_handle_ctrl_req(VirtIOSCSI *s, VirtIOSCSIReq *req)
|
||||
virtio_scsi_bad_req(req);
|
||||
return;
|
||||
} else {
|
||||
req->req.an.event_requested =
|
||||
virtio_tswap32(VIRTIO_DEVICE(s), req->req.an.event_requested);
|
||||
trace_virtio_scsi_an_req(virtio_scsi_get_lun(req->req.an.lun),
|
||||
req->req.an.event_requested);
|
||||
req->resp.an.event_actual = 0;
|
||||
req->resp.an.response = VIRTIO_SCSI_S_OK;
|
||||
}
|
||||
}
|
||||
if (r == 0) {
|
||||
if (type == VIRTIO_SCSI_T_TMF)
|
||||
trace_virtio_scsi_tmf_resp(virtio_scsi_get_lun(req->req.tmf.lun),
|
||||
req->req.tmf.tag,
|
||||
req->resp.tmf.response);
|
||||
else if (type == VIRTIO_SCSI_T_AN_QUERY ||
|
||||
type == VIRTIO_SCSI_T_AN_SUBSCRIBE)
|
||||
trace_virtio_scsi_an_resp(virtio_scsi_get_lun(req->req.an.lun),
|
||||
req->resp.an.response);
|
||||
virtio_scsi_complete_req(req);
|
||||
} else {
|
||||
assert(r == -EINPROGRESS);
|
||||
@ -469,6 +489,10 @@ static void virtio_scsi_handle_ctrl(VirtIODevice *vdev, VirtQueue *vq)
|
||||
|
||||
static void virtio_scsi_complete_cmd_req(VirtIOSCSIReq *req)
|
||||
{
|
||||
trace_virtio_scsi_cmd_resp(virtio_scsi_get_lun(req->req.cmd.lun),
|
||||
req->req.cmd.tag,
|
||||
req->resp.cmd.response,
|
||||
req->resp.cmd.status);
|
||||
/* Sense data is not in req->resp and is copied separately
|
||||
* in virtio_scsi_command_complete.
|
||||
*/
|
||||
@ -566,6 +590,8 @@ static int virtio_scsi_handle_cmd_req_prepare(VirtIOSCSI *s, VirtIOSCSIReq *req)
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
trace_virtio_scsi_cmd_req(virtio_scsi_get_lun(req->req.cmd.lun),
|
||||
req->req.cmd.tag, req->req.cmd.cdb[0]);
|
||||
|
||||
d = virtio_scsi_device_get(s, req->req.cmd.lun);
|
||||
if (!d) {
|
||||
@ -767,6 +793,8 @@ void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev,
|
||||
}
|
||||
evt->lun[3] = dev->lun & 0xFF;
|
||||
}
|
||||
trace_virtio_scsi_event(virtio_scsi_get_lun(evt->lun), event, reason);
|
||||
|
||||
virtio_scsi_complete_req(req);
|
||||
}
|
||||
|
||||
|
@ -15,28 +15,8 @@
|
||||
|
||||
#ifdef CONFIG_WHPX
|
||||
|
||||
#include "whp-dispatch.h"
|
||||
|
||||
struct whpx_state {
|
||||
uint64_t mem_quota;
|
||||
WHV_PARTITION_HANDLE partition;
|
||||
bool kernel_irqchip_allowed;
|
||||
bool kernel_irqchip_required;
|
||||
bool apic_in_platform;
|
||||
};
|
||||
|
||||
struct whpx_lapic_state {
|
||||
struct {
|
||||
uint32_t data;
|
||||
uint32_t padding[3];
|
||||
} fields[256];
|
||||
};
|
||||
|
||||
extern struct whpx_state whpx_global;
|
||||
int whpx_enabled(void);
|
||||
|
||||
void whpx_apic_get(DeviceState *s);
|
||||
#define whpx_apic_in_platform() (whpx_global.apic_in_platform)
|
||||
bool whpx_apic_in_platform(void);
|
||||
|
||||
#else /* CONFIG_WHPX */
|
||||
|
||||
|
@ -12,4 +12,4 @@ io_ss.add(files(
|
||||
'dns-resolver.c',
|
||||
'net-listener.c',
|
||||
'task.c',
|
||||
))
|
||||
), gnutls)
|
||||
|
57
meson.build
57
meson.build
@ -169,7 +169,6 @@ version_res = []
|
||||
coref = []
|
||||
iokit = []
|
||||
emulator_link_args = []
|
||||
cocoa = not_found
|
||||
hvf = not_found
|
||||
if targetos == 'windows'
|
||||
socket = cc.find_library('ws2_32')
|
||||
@ -182,7 +181,6 @@ if targetos == 'windows'
|
||||
elif targetos == 'darwin'
|
||||
coref = dependency('appleframeworks', modules: 'CoreFoundation')
|
||||
iokit = dependency('appleframeworks', modules: 'IOKit')
|
||||
cocoa = dependency('appleframeworks', modules: 'Cocoa', required: get_option('cocoa'))
|
||||
elif targetos == 'sunos'
|
||||
socket = [cc.find_library('socket'),
|
||||
cc.find_library('nsl'),
|
||||
@ -256,9 +254,6 @@ if not have_xen_pci_passthrough and get_option('xen_pci_passthrough').enabled()
|
||||
error('Xen PCI passthrough requested but Xen not enabled')
|
||||
endif
|
||||
endif
|
||||
if not cocoa.found() and get_option('cocoa').enabled()
|
||||
error('Cocoa not available on this platform')
|
||||
endif
|
||||
|
||||
################
|
||||
# Dependencies #
|
||||
@ -362,6 +357,14 @@ if not get_option('attr').disabled()
|
||||
endif
|
||||
endif
|
||||
|
||||
cocoa = dependency('appleframeworks', modules: 'Cocoa', required: get_option('cocoa'))
|
||||
if cocoa.found() and get_option('sdl').enabled()
|
||||
error('Cocoa and SDL cannot be enabled at the same time')
|
||||
endif
|
||||
if cocoa.found() and get_option('gtk').enabled()
|
||||
error('Cocoa and GTK+ cannot be enabled at the same time')
|
||||
endif
|
||||
|
||||
seccomp = not_found
|
||||
if not get_option('seccomp').auto() or have_system or have_tools
|
||||
seccomp = dependency('libseccomp', version: '>=2.3.0',
|
||||
@ -647,7 +650,7 @@ if not get_option('brlapi').auto() or have_system
|
||||
endif
|
||||
|
||||
sdl = not_found
|
||||
if have_system
|
||||
if not get_option('sdl').auto() or (have_system and not cocoa.found())
|
||||
sdl = dependency('sdl2', required: get_option('sdl'), static: enable_static)
|
||||
sdl_image = not_found
|
||||
endif
|
||||
@ -776,20 +779,32 @@ if 'CONFIG_OPENGL' in config_host
|
||||
opengl = declare_dependency(compile_args: config_host['OPENGL_CFLAGS'].split(),
|
||||
link_args: config_host['OPENGL_LIBS'].split())
|
||||
endif
|
||||
|
||||
gtk = not_found
|
||||
if 'CONFIG_GTK' in config_host
|
||||
gtk = declare_dependency(compile_args: config_host['GTK_CFLAGS'].split(),
|
||||
link_args: config_host['GTK_LIBS'].split())
|
||||
gtkx11 = not_found
|
||||
if not get_option('gtk').auto() or (have_system and not cocoa.found())
|
||||
gtk = dependency('gtk+-3.0', version: '>=3.22.0',
|
||||
method: 'pkg-config',
|
||||
required: get_option('gtk'),
|
||||
static: enable_static)
|
||||
if gtk.found()
|
||||
gtkx11 = dependency('gtk+-x11-3.0', version: '>=3.22.0',
|
||||
method: 'pkg-config',
|
||||
required: false,
|
||||
static: enable_static)
|
||||
gtk = declare_dependency(dependencies: [gtk, gtkx11])
|
||||
endif
|
||||
endif
|
||||
|
||||
vte = not_found
|
||||
if 'CONFIG_VTE' in config_host
|
||||
vte = declare_dependency(compile_args: config_host['VTE_CFLAGS'].split(),
|
||||
link_args: config_host['VTE_LIBS'].split())
|
||||
endif
|
||||
x11 = not_found
|
||||
if 'CONFIG_X11' in config_host
|
||||
x11 = declare_dependency(compile_args: config_host['X11_CFLAGS'].split(),
|
||||
link_args: config_host['X11_LIBS'].split())
|
||||
if gtkx11.found() or 'lm32-softmmu' in target_dirs
|
||||
x11 = dependency('x11', method: 'pkg-config', required: gtkx11.found(),
|
||||
static: enable_static)
|
||||
endif
|
||||
vnc = not_found
|
||||
png = not_found
|
||||
@ -1062,6 +1077,7 @@ if glusterfs.found()
|
||||
config_host_data.set('CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT', glusterfs_ftruncate_has_stat)
|
||||
config_host_data.set('CONFIG_GLUSTERFS_IOCB_HAS_STAT', glusterfs_iocb_has_stat)
|
||||
endif
|
||||
config_host_data.set('CONFIG_GTK', gtk.found())
|
||||
config_host_data.set('CONFIG_LIBATTR', have_old_libattr)
|
||||
config_host_data.set('CONFIG_LIBCAP_NG', libcap_ng.found())
|
||||
config_host_data.set('CONFIG_LIBISCSI', libiscsi.found())
|
||||
@ -1085,6 +1101,7 @@ config_host_data.set('CONFIG_STATX', has_statx)
|
||||
config_host_data.set('CONFIG_ZSTD', zstd.found())
|
||||
config_host_data.set('CONFIG_FUSE', fuse.found())
|
||||
config_host_data.set('CONFIG_FUSE_LSEEK', fuse_lseek.found())
|
||||
config_host_data.set('CONFIG_X11', x11.found())
|
||||
config_host_data.set('CONFIG_CFI', get_option('cfi'))
|
||||
config_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
|
||||
config_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0])
|
||||
@ -1171,7 +1188,7 @@ host_kconfig = \
|
||||
('CONFIG_SPICE' in config_host ? ['CONFIG_SPICE=y'] : []) + \
|
||||
('CONFIG_IVSHMEM' in config_host ? ['CONFIG_IVSHMEM=y'] : []) + \
|
||||
('CONFIG_OPENGL' in config_host ? ['CONFIG_OPENGL=y'] : []) + \
|
||||
('CONFIG_X11' in config_host ? ['CONFIG_X11=y'] : []) + \
|
||||
(x11.found() ? ['CONFIG_X11=y'] : []) + \
|
||||
('CONFIG_VHOST_USER' in config_host ? ['CONFIG_VHOST_USER=y'] : []) + \
|
||||
('CONFIG_VHOST_VDPA' in config_host ? ['CONFIG_VHOST_VDPA=y'] : []) + \
|
||||
('CONFIG_VHOST_KERNEL' in config_host ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
|
||||
@ -1815,7 +1832,7 @@ blockdev_ss.add(files(
|
||||
'blockdev-nbd.c',
|
||||
'iothread.c',
|
||||
'job-qmp.c',
|
||||
))
|
||||
), gnutls)
|
||||
|
||||
# os-posix.c contains POSIX-specific functions used by qemu-storage-daemon,
|
||||
# os-win32.c does not
|
||||
@ -1971,6 +1988,7 @@ qmp = declare_dependency(link_whole: [libqmp])
|
||||
|
||||
libchardev = static_library('chardev', chardev_ss.sources() + genh,
|
||||
name_suffix: 'fa',
|
||||
dependencies: [gnutls],
|
||||
build_by_default: false)
|
||||
|
||||
chardev = declare_dependency(link_whole: libchardev)
|
||||
@ -2189,7 +2207,7 @@ if have_tools
|
||||
qemu_io = executable('qemu-io', files('qemu-io.c'),
|
||||
dependencies: [block, qemuutil], install: true)
|
||||
qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'),
|
||||
dependencies: [blockdev, qemuutil], install: true)
|
||||
dependencies: [blockdev, qemuutil, gnutls], install: true)
|
||||
|
||||
subdir('storage-daemon')
|
||||
subdir('contrib/rdmacm-mux')
|
||||
@ -2229,7 +2247,7 @@ subdir('tools')
|
||||
subdir('pc-bios')
|
||||
subdir('docs')
|
||||
subdir('tests')
|
||||
if 'CONFIG_GTK' in config_host
|
||||
if gtk.found()
|
||||
subdir('po')
|
||||
endif
|
||||
|
||||
@ -2246,7 +2264,7 @@ if host_machine.system() == 'windows'
|
||||
if build_docs
|
||||
nsis_cmd += '-DCONFIG_DOCUMENTATION=y'
|
||||
endif
|
||||
if 'CONFIG_GTK' in config_host
|
||||
if gtk.found()
|
||||
nsis_cmd += '-DCONFIG_GTK=y'
|
||||
endif
|
||||
|
||||
@ -2331,14 +2349,13 @@ summary_info += {'profiler': config_host.has_key('CONFIG_PROFILER')}
|
||||
summary_info += {'link-time optimization (LTO)': get_option('b_lto')}
|
||||
summary_info += {'static build': config_host.has_key('CONFIG_STATIC')}
|
||||
if targetos == 'darwin'
|
||||
summary_info += {'Cocoa support': config_host.has_key('CONFIG_COCOA')}
|
||||
summary_info += {'Cocoa support': cocoa.found()}
|
||||
endif
|
||||
# TODO: add back version
|
||||
summary_info += {'SDL support': sdl.found()}
|
||||
summary_info += {'SDL image support': sdl_image.found()}
|
||||
# TODO: add back version
|
||||
summary_info += {'GTK support': config_host.has_key('CONFIG_GTK')}
|
||||
summary_info += {'GTK GL support': config_host.has_key('CONFIG_GTK_GL')}
|
||||
summary_info += {'GTK support': gtk.found()}
|
||||
summary_info += {'pixman': pixman.found()}
|
||||
# TODO: add back version
|
||||
summary_info += {'VTE support': config_host.has_key('CONFIG_VTE')}
|
||||
|
@ -74,6 +74,8 @@ option('lzo', type : 'feature', value : 'auto',
|
||||
description: 'lzo compression support')
|
||||
option('rbd', type : 'feature', value : 'auto',
|
||||
description: 'Ceph block device driver')
|
||||
option('gtk', type : 'feature', value : 'auto',
|
||||
description: 'GTK+ user interface')
|
||||
option('sdl', type : 'feature', value : 'auto',
|
||||
description: 'SDL user interface')
|
||||
option('sdl_image', type : 'feature', value : 'auto',
|
||||
|
@ -40,6 +40,7 @@ timers.TimersCommand()
|
||||
|
||||
coroutine.CoroutineSPFunction()
|
||||
coroutine.CoroutinePCFunction()
|
||||
coroutine.CoroutineBt()
|
||||
|
||||
# Default to silently passing through SIGUSR1, because QEMU sends it
|
||||
# to itself a lot.
|
||||
|
@ -70,6 +70,11 @@ def bt_jmpbuf(jmpbuf):
|
||||
regs = get_jmpbuf_regs(jmpbuf)
|
||||
old = dict()
|
||||
|
||||
# remember current stack frame and select the topmost
|
||||
# so that register modifications don't wreck it
|
||||
selected_frame = gdb.selected_frame()
|
||||
gdb.newest_frame().select()
|
||||
|
||||
for i in regs:
|
||||
old[i] = gdb.parse_and_eval('(uint64_t)$%s' % i)
|
||||
|
||||
@ -81,8 +86,13 @@ def bt_jmpbuf(jmpbuf):
|
||||
for i in regs:
|
||||
gdb.execute('set $%s = %s' % (i, old[i]))
|
||||
|
||||
selected_frame.select()
|
||||
|
||||
def co_cast(co):
|
||||
return co.cast(gdb.lookup_type('CoroutineUContext').pointer())
|
||||
|
||||
def coroutine_to_jmpbuf(co):
|
||||
coroutine_pointer = co.cast(gdb.lookup_type('CoroutineUContext').pointer())
|
||||
coroutine_pointer = co_cast(co)
|
||||
return coroutine_pointer['env']['__jmpbuf']
|
||||
|
||||
|
||||
@ -100,6 +110,29 @@ class CoroutineCommand(gdb.Command):
|
||||
|
||||
bt_jmpbuf(coroutine_to_jmpbuf(gdb.parse_and_eval(argv[0])))
|
||||
|
||||
class CoroutineBt(gdb.Command):
|
||||
'''Display backtrace including coroutine switches'''
|
||||
def __init__(self):
|
||||
gdb.Command.__init__(self, 'qemu bt', gdb.COMMAND_STACK,
|
||||
gdb.COMPLETE_NONE)
|
||||
|
||||
def invoke(self, arg, from_tty):
|
||||
|
||||
gdb.execute("bt")
|
||||
|
||||
if gdb.parse_and_eval("qemu_in_coroutine()") == False:
|
||||
return
|
||||
|
||||
co_ptr = gdb.parse_and_eval("qemu_coroutine_self()")
|
||||
|
||||
while True:
|
||||
co = co_cast(co_ptr)
|
||||
co_ptr = co["base"]["caller"]
|
||||
if co_ptr == 0:
|
||||
break
|
||||
gdb.write("Coroutine at " + str(co_ptr) + ":\n")
|
||||
bt_jmpbuf(coroutine_to_jmpbuf(co_ptr))
|
||||
|
||||
class CoroutineSPFunction(gdb.Function):
|
||||
def __init__(self):
|
||||
gdb.Function.__init__(self, 'qemu_coroutine_sp')
|
||||
|
@ -1,6 +1,6 @@
|
||||
qsd_ss = ss.source_set()
|
||||
qsd_ss.add(files('qemu-storage-daemon.c'))
|
||||
qsd_ss.add(blockdev, chardev, qmp, qom, qemuutil)
|
||||
qsd_ss.add(blockdev, chardev, qmp, qom, qemuutil, gnutls)
|
||||
|
||||
subdir('qapi')
|
||||
|
||||
|
@ -1807,7 +1807,7 @@ void cpu_sync_bndcs_hflags(CPUX86State *env);
|
||||
/* this function must always be used to load data in the segment
|
||||
cache: it synchronizes the hflags with the segment cache values */
|
||||
static inline void cpu_x86_load_seg_cache(CPUX86State *env,
|
||||
int seg_reg, unsigned int selector,
|
||||
X86Seg seg_reg, unsigned int selector,
|
||||
target_ulong base,
|
||||
unsigned int limit,
|
||||
unsigned int flags)
|
||||
@ -1896,7 +1896,7 @@ int cpu_x86_get_descr_debug(CPUX86State *env, unsigned int selector,
|
||||
/* cpu-exec.c */
|
||||
/* the following helpers are only usable in user mode simulation as
|
||||
they can trigger unexpected exceptions */
|
||||
void cpu_x86_load_seg(CPUX86State *s, int seg_reg, int selector);
|
||||
void cpu_x86_load_seg(CPUX86State *s, X86Seg seg_reg, int selector);
|
||||
void cpu_x86_fsave(CPUX86State *s, target_ulong ptr, int data32);
|
||||
void cpu_x86_frstor(CPUX86State *s, target_ulong ptr, int data32);
|
||||
void cpu_x86_fxsave(CPUX86State *s, target_ulong ptr);
|
||||
|
@ -232,7 +232,7 @@ int x86_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int x86_cpu_gdb_load_seg(X86CPU *cpu, int sreg, uint8_t *mem_buf)
|
||||
static int x86_cpu_gdb_load_seg(X86CPU *cpu, X86Seg sreg, uint8_t *mem_buf)
|
||||
{
|
||||
CPUX86State *env = &cpu->env;
|
||||
uint16_t selector = ldl_p(mem_buf);
|
||||
|
@ -176,8 +176,8 @@ static inline void get_ss_esp_from_tss(CPUX86State *env, uint32_t *ss_ptr,
|
||||
}
|
||||
}
|
||||
|
||||
static void tss_load_seg(CPUX86State *env, int seg_reg, int selector, int cpl,
|
||||
uintptr_t retaddr)
|
||||
static void tss_load_seg(CPUX86State *env, X86Seg seg_reg, int selector,
|
||||
int cpl, uintptr_t retaddr)
|
||||
{
|
||||
uint32_t e1, e2;
|
||||
int rpl, dpl;
|
||||
@ -2098,7 +2098,7 @@ void helper_iret_real(CPUX86State *env, int shift)
|
||||
env->hflags2 &= ~HF2_NMI_MASK;
|
||||
}
|
||||
|
||||
static inline void validate_seg(CPUX86State *env, int seg_reg, int cpl)
|
||||
static inline void validate_seg(CPUX86State *env, X86Seg seg_reg, int cpl)
|
||||
{
|
||||
int dpl;
|
||||
uint32_t e2;
|
||||
@ -2623,7 +2623,7 @@ void helper_verw(CPUX86State *env, target_ulong selector1)
|
||||
}
|
||||
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
void cpu_x86_load_seg(CPUX86State *env, int seg_reg, int selector)
|
||||
void cpu_x86_load_seg(CPUX86State *env, X86Seg seg_reg, int selector)
|
||||
{
|
||||
if (!(env->cr[0] & CR0_PE_MASK) || (env->eflags & VM_MASK)) {
|
||||
int dpl = (env->eflags & VM_MASK) ? 3 : 0;
|
||||
|
@ -2287,13 +2287,13 @@ static void gen_cmovcc1(CPUX86State *env, DisasContext *s, MemOp ot, int b,
|
||||
}
|
||||
}
|
||||
|
||||
static inline void gen_op_movl_T0_seg(DisasContext *s, int seg_reg)
|
||||
static inline void gen_op_movl_T0_seg(DisasContext *s, X86Seg seg_reg)
|
||||
{
|
||||
tcg_gen_ld32u_tl(s->T0, cpu_env,
|
||||
offsetof(CPUX86State,segs[seg_reg].selector));
|
||||
}
|
||||
|
||||
static inline void gen_op_movl_seg_T0_vm(DisasContext *s, int seg_reg)
|
||||
static inline void gen_op_movl_seg_T0_vm(DisasContext *s, X86Seg seg_reg)
|
||||
{
|
||||
tcg_gen_ext16u_tl(s->T0, s->T0);
|
||||
tcg_gen_st32_tl(s->T0, cpu_env,
|
||||
@ -2303,7 +2303,7 @@ static inline void gen_op_movl_seg_T0_vm(DisasContext *s, int seg_reg)
|
||||
|
||||
/* move T0 to seg_reg and compute if the CPU state may change. Never
|
||||
call this function with seg_reg == R_CS */
|
||||
static void gen_movl_seg_T0(DisasContext *s, int seg_reg)
|
||||
static void gen_movl_seg_T0(DisasContext *s, X86Seg seg_reg)
|
||||
{
|
||||
if (s->pe && !s->vm86) {
|
||||
tcg_gen_trunc_tl_i32(s->tmp2_i32, s->T0);
|
||||
|
@ -26,13 +26,10 @@
|
||||
#include "qapi/qapi-types-common.h"
|
||||
#include "qapi/qapi-visit-common.h"
|
||||
#include "migration/blocker.h"
|
||||
#include "whp-dispatch.h"
|
||||
#include <winerror.h>
|
||||
|
||||
#include "whpx-cpus.h"
|
||||
|
||||
#include <WinHvPlatform.h>
|
||||
#include <WinHvEmulation.h>
|
||||
#include "whpx-internal.h"
|
||||
|
||||
#define HYPERV_APIC_BUS_FREQUENCY (200000000ULL)
|
||||
|
||||
@ -1869,6 +1866,10 @@ int whpx_enabled(void)
|
||||
return whpx_allowed;
|
||||
}
|
||||
|
||||
bool whpx_apic_in_platform(void) {
|
||||
return whpx_global.apic_in_platform;
|
||||
}
|
||||
|
||||
static void whpx_accel_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
AccelClass *ac = ACCEL_CLASS(oc);
|
||||
|
@ -18,7 +18,14 @@
|
||||
#include "hw/pci/msi.h"
|
||||
#include "sysemu/hw_accel.h"
|
||||
#include "sysemu/whpx.h"
|
||||
#include "whp-dispatch.h"
|
||||
#include "whpx-internal.h"
|
||||
|
||||
struct whpx_lapic_state {
|
||||
struct {
|
||||
uint32_t data;
|
||||
uint32_t padding[3];
|
||||
} fields[256];
|
||||
};
|
||||
|
||||
static void whpx_put_apic_state(APICCommonState *s,
|
||||
struct whpx_lapic_state *kapic)
|
||||
|
@ -15,11 +15,9 @@
|
||||
#include "qemu/guest-random.h"
|
||||
|
||||
#include "sysemu/whpx.h"
|
||||
#include "whpx-internal.h"
|
||||
#include "whpx-cpus.h"
|
||||
|
||||
#include <WinHvPlatform.h>
|
||||
#include <WinHvEmulation.h>
|
||||
|
||||
static void *whpx_cpu_thread_fn(void *arg)
|
||||
{
|
||||
CPUState *cpu = arg;
|
||||
|
@ -1,10 +1,21 @@
|
||||
#ifndef WHP_DISPATCH_H
|
||||
#define WHP_DISPATCH_H
|
||||
#ifndef WHP_INTERNAL_H
|
||||
#define WHP_INTERNAL_H
|
||||
|
||||
#include <windows.h>
|
||||
#include <WinHvPlatform.h>
|
||||
#include <WinHvEmulation.h>
|
||||
|
||||
struct whpx_state {
|
||||
uint64_t mem_quota;
|
||||
WHV_PARTITION_HANDLE partition;
|
||||
bool kernel_irqchip_allowed;
|
||||
bool kernel_irqchip_required;
|
||||
bool apic_in_platform;
|
||||
};
|
||||
|
||||
extern struct whpx_state whpx_global;
|
||||
void whpx_apic_get(DeviceState *s);
|
||||
|
||||
#define WHV_E_UNKNOWN_CAPABILITY 0x80370300L
|
||||
|
||||
#define LIST_WINHVPLATFORM_FUNCTIONS(X) \
|
||||
@ -72,4 +83,4 @@ typedef enum WHPFunctionList {
|
||||
WINHV_PLATFORM_FNS_SUPPLEMENTAL
|
||||
} WHPFunctionList;
|
||||
|
||||
#endif /* WHP_DISPATCH_H */
|
||||
#endif /* WHP_INTERNAL_H */
|
@ -159,11 +159,11 @@ if have_block
|
||||
'CONFIG_POSIX' in config_host
|
||||
tests += {
|
||||
'test-crypto-tlscredsx509': ['crypto-tls-x509-helpers.c', 'pkix_asn1_tab.c',
|
||||
tasn1, crypto],
|
||||
tasn1, crypto, gnutls],
|
||||
'test-crypto-tlssession': ['crypto-tls-x509-helpers.c', 'pkix_asn1_tab.c', 'crypto-tls-psk-helpers.c',
|
||||
tasn1, crypto],
|
||||
tasn1, crypto, gnutls],
|
||||
'test-io-channel-tls': ['io-channel-helpers.c', 'crypto-tls-x509-helpers.c', 'pkix_asn1_tab.c',
|
||||
tasn1, io, crypto]}
|
||||
tasn1, io, crypto, gnutls]}
|
||||
endif
|
||||
if 'CONFIG_AUTH_PAM' in config_host
|
||||
tests += {'test-authz-pam': [authz]}
|
||||
|
@ -201,7 +201,9 @@ qos_test_ss.add(
|
||||
'virtio-serial-test.c',
|
||||
'vmxnet3-test.c',
|
||||
)
|
||||
qos_test_ss.add(when: 'CONFIG_VIRTFS', if_true: files('virtio-9p-test.c'))
|
||||
if have_virtfs
|
||||
qos_test_ss.add(files('virtio-9p-test.c'))
|
||||
endif
|
||||
qos_test_ss.add(when: 'CONFIG_VHOST_USER', if_true: files('vhost-user-test.c'))
|
||||
|
||||
tpmemu_files = ['tpm-emu.c', 'tpm-util.c', 'tpm-tests.c']
|
||||
|
16
ui/gtk.c
16
ui/gtk.c
@ -396,7 +396,7 @@ static void gd_update_full_redraw(VirtualConsole *vc)
|
||||
int ww, wh;
|
||||
ww = gdk_window_get_width(gtk_widget_get_window(area));
|
||||
wh = gdk_window_get_height(gtk_widget_get_window(area));
|
||||
#if defined(CONFIG_GTK_GL)
|
||||
#if defined(CONFIG_OPENGL)
|
||||
if (vc->gfx.gls && gtk_use_gl_area) {
|
||||
gtk_gl_area_queue_render(GTK_GL_AREA(vc->gfx.drawing_area));
|
||||
return;
|
||||
@ -625,7 +625,7 @@ static const DisplayChangeListenerOps dcl_ops = {
|
||||
|
||||
/** DisplayState Callbacks (opengl version) **/
|
||||
|
||||
#if defined(CONFIG_GTK_GL)
|
||||
#if defined(CONFIG_OPENGL)
|
||||
|
||||
static const DisplayChangeListenerOps dcl_gl_area_ops = {
|
||||
.dpy_name = "gtk-egl",
|
||||
@ -644,7 +644,7 @@ static const DisplayChangeListenerOps dcl_gl_area_ops = {
|
||||
.dpy_gl_update = gd_gl_area_scanout_flush,
|
||||
};
|
||||
|
||||
#endif /* CONFIG_GTK_GL */
|
||||
#endif /* CONFIG_OPENGL */
|
||||
|
||||
static const DisplayChangeListenerOps dcl_egl_ops = {
|
||||
.dpy_name = "gtk-egl",
|
||||
@ -725,7 +725,7 @@ static void gd_set_ui_info(VirtualConsole *vc, gint width, gint height)
|
||||
dpy_set_ui_info(vc->gfx.dcl.con, &info);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_GTK_GL)
|
||||
#if defined(CONFIG_OPENGL)
|
||||
|
||||
static gboolean gd_render_event(GtkGLArea *area, GdkGLContext *context,
|
||||
void *opaque)
|
||||
@ -1865,7 +1865,7 @@ static void gd_connect_vc_gfx_signals(VirtualConsole *vc)
|
||||
{
|
||||
g_signal_connect(vc->gfx.drawing_area, "draw",
|
||||
G_CALLBACK(gd_draw_event), vc);
|
||||
#if defined(CONFIG_GTK_GL)
|
||||
#if defined(CONFIG_OPENGL)
|
||||
if (gtk_use_gl_area) {
|
||||
/* wire up GtkGlArea events */
|
||||
g_signal_connect(vc->gfx.drawing_area, "render",
|
||||
@ -1992,12 +1992,12 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc,
|
||||
|
||||
#if defined(CONFIG_OPENGL)
|
||||
if (display_opengl) {
|
||||
#if defined(CONFIG_GTK_GL)
|
||||
#if defined(CONFIG_OPENGL)
|
||||
if (gtk_use_gl_area) {
|
||||
vc->gfx.drawing_area = gtk_gl_area_new();
|
||||
vc->gfx.dcl.ops = &dcl_gl_area_ops;
|
||||
} else
|
||||
#endif /* CONFIG_GTK_GL */
|
||||
#endif /* CONFIG_OPENGL */
|
||||
{
|
||||
vc->gfx.drawing_area = gtk_drawing_area_new();
|
||||
/*
|
||||
@ -2314,7 +2314,7 @@ static void early_gtk_display_init(DisplayOptions *opts)
|
||||
assert(opts->type == DISPLAY_TYPE_GTK);
|
||||
if (opts->has_gl && opts->gl != DISPLAYGL_MODE_OFF) {
|
||||
#if defined(CONFIG_OPENGL)
|
||||
#if defined(CONFIG_GTK_GL) && defined(GDK_WINDOWING_WAYLAND)
|
||||
#if defined(GDK_WINDOWING_WAYLAND)
|
||||
if (GDK_IS_WAYLAND_DISPLAY(gdk_display_get_default())) {
|
||||
gtk_use_gl_area = true;
|
||||
gtk_gl_area_init();
|
||||
|
@ -29,7 +29,7 @@ vnc_ss.add(files(
|
||||
'vnc-ws.c',
|
||||
'vnc-jobs.c',
|
||||
))
|
||||
vnc_ss.add(zlib, png, jpeg)
|
||||
vnc_ss.add(zlib, png, jpeg, gnutls)
|
||||
vnc_ss.add(when: sasl, if_true: files('vnc-auth-sasl.c'))
|
||||
softmmu_ss.add_all(when: vnc, if_true: vnc_ss)
|
||||
softmmu_ss.add(when: vnc, if_false: files('vnc-stubs.c'))
|
||||
@ -57,14 +57,13 @@ if config_host.has_key('CONFIG_OPENGL_DMABUF')
|
||||
ui_modules += {'egl-headless' : egl_headless_ss}
|
||||
endif
|
||||
|
||||
if config_host.has_key('CONFIG_GTK')
|
||||
if gtk.found()
|
||||
softmmu_ss.add(when: 'CONFIG_WIN32', if_true: files('win32-kbd-hook.c'))
|
||||
|
||||
gtk_ss = ss.source_set()
|
||||
gtk_ss.add(gtk, vte, pixman, files('gtk.c'))
|
||||
gtk_ss.add(when: [x11, 'CONFIG_X11'], if_true: files('x_keymap.c'))
|
||||
gtk_ss.add(when: [opengl, 'CONFIG_OPENGL'], if_true: files('gtk-egl.c'))
|
||||
gtk_ss.add(when: [opengl, 'CONFIG_GTK_GL'], if_true: files('gtk-gl-area.c'))
|
||||
gtk_ss.add(when: x11, if_true: files('x_keymap.c'))
|
||||
gtk_ss.add(when: [opengl, 'CONFIG_OPENGL'], if_true: files('gtk-egl.c', 'gtk-gl-area.c'))
|
||||
ui_modules += {'gtk' : gtk_ss}
|
||||
endif
|
||||
|
||||
@ -78,7 +77,7 @@ if sdl.found()
|
||||
'sdl2.c',
|
||||
))
|
||||
sdl_ss.add(when: [opengl, 'CONFIG_OPENGL'], if_true: files('sdl2-gl.c'))
|
||||
sdl_ss.add(when: [x11, 'CONFIG_X11'], if_true: files('x_keymap.c'))
|
||||
sdl_ss.add(when: x11, if_true: files('x_keymap.c'))
|
||||
ui_modules += {'sdl' : sdl_ss}
|
||||
endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user