* s390x PCI fixes and improvements (for the ISM device)
* Fix emulated MVCP and MVCS s390x instructions * Clean-ups for the e1000e qtest * Enable qtests on Windows * Update FreeBSD CI to version 12.4 * Check --disable-tcg for ppc64 in the CI * Improve scripts/make-releases a little bit * Many other misc small clean-ups and fixes here and there -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmObN8gRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbVzWQ/+OzpXQODK/Xp0UUwre4kxm1Ju15tHdIPr lb5GqxcxZQay2hH1OIr5RjCEODDCzO+uPPq9VPh+a8qrx+nypcJDXlNDX4y9e7yK wz8pZ8G8E6OmflHjojbKESTUbdDkCY3c+Ge86Jdot0UMtvwSkmU8VZ9EiFRW+9MF i6NDgEhpHeiur8834+7BMyYc5YDE5TPaNsbzpSulKZQUsPJ6gntKwA15YPgZobXX s2CnCV6E48zUaxhtZs5plFQKIkUS2TAl15Zvr4OVKjAXpSk86ysBUWKZjZDQup/l G6dh8yF1Y724l4oq7rpVcEG02vXQSlsUIZlpUWWmGyNzt6npJ71aWQbPN2we9C1j pa3hZDak/g9B8wDlWJQMYNcKKHUtp6LW+qqJxxujKUjzGlsXWgflpBjeXBH8TE3z vAi+iTXsQJSEwvhMboHzogZjLpyG1PXcrlksRyRPvgKyW00CzVTjclz58Yd+m/cm Bfc2T/PWr+OsxYXRZBZPu0RebQW1s3XnG0bx8jctcEty3ZsPs0eyPNvYTkT+sEnl e1BkXN6C1ImB214psH4mDzgtQx0/zz4vVMH+4JeeX5Wrfmc+FTjr083oiWsFJRsn JE+CkRbK74iN3fY6HhH9XiD60OwVMOgNe/NMhjH9eIokez8D15lOeKFMuR1vPwqi Rcuip8uENZk= =u/jz -----END PGP SIGNATURE----- Merge tag 'pull-request-2022-12-15' of https://gitlab.com/thuth/qemu into staging * s390x PCI fixes and improvements (for the ISM device) * Fix emulated MVCP and MVCS s390x instructions * Clean-ups for the e1000e qtest * Enable qtests on Windows * Update FreeBSD CI to version 12.4 * Check --disable-tcg for ppc64 in the CI * Improve scripts/make-releases a little bit * Many other misc small clean-ups and fixes here and there # gpg: Signature made Thu 15 Dec 2022 15:05:44 GMT # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * tag 'pull-request-2022-12-15' of https://gitlab.com/thuth/qemu: (23 commits) tests/qtest/vhost-user-blk-test: don't abort all qtests on missing envar .gitlab/issue_templates: Move suggestions into comments gitlab-ci: Check building ppc64 without TCG FreeBSD: Upgrade to 12.4 release tests/qtest: Enable qtest build on Windows .gitlab-ci.d/windows.yml: Exclude qTests from 64-bit CI job for now .gitlab-ci.d/windows.yml: Keep 64-bit and 32-bit build scripts consistent .gitlab-ci.d/windows.yml: Unify the prerequisite packages tests/qtest/libqos/e1000e: Correctly group register accesses tests/qtest/e1000e-test: De-duplicate constants tests/qtest/libqos/e1000e: Remove "other" interrupts hw: Include the VMWare devices only in the x86 targets MAINTAINERS: Add documentation files to the corresponding sections util/oslib-win32: Remove obsolete reference to g_poll code util/qemu-config: Fix "query-command-line-options" to provide the right values scripts/make-release: Only clone single branches to speed up the script scripts/make-release: Add a simple help text for the script monitor/misc: Remove superfluous include statements target/s390x: The MVCP and MVCS instructions are not privileged target/s390x/tcg/mem_helper: Test the right bits in psw_key_valid() ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
4208e6ae11
@ -50,7 +50,7 @@ x64-freebsd-12-build:
|
|||||||
NAME: freebsd-12
|
NAME: freebsd-12
|
||||||
CIRRUS_VM_INSTANCE_TYPE: freebsd_instance
|
CIRRUS_VM_INSTANCE_TYPE: freebsd_instance
|
||||||
CIRRUS_VM_IMAGE_SELECTOR: image_family
|
CIRRUS_VM_IMAGE_SELECTOR: image_family
|
||||||
CIRRUS_VM_IMAGE_NAME: freebsd-12-3
|
CIRRUS_VM_IMAGE_NAME: freebsd-12-4
|
||||||
CIRRUS_VM_CPUS: 8
|
CIRRUS_VM_CPUS: 8
|
||||||
CIRRUS_VM_RAM: 8G
|
CIRRUS_VM_RAM: 8G
|
||||||
UPDATE_COMMAND: pkg update
|
UPDATE_COMMAND: pkg update
|
||||||
|
@ -112,6 +112,14 @@ cross-ppc64el-user:
|
|||||||
variables:
|
variables:
|
||||||
IMAGE: debian-ppc64el-cross
|
IMAGE: debian-ppc64el-cross
|
||||||
|
|
||||||
|
cross-ppc64el-kvm-only:
|
||||||
|
extends: .cross_accel_build_job
|
||||||
|
needs:
|
||||||
|
job: ppc64el-debian-cross-container
|
||||||
|
variables:
|
||||||
|
IMAGE: debian-ppc64el-cross
|
||||||
|
EXTRA_CONFIGURE_OPTS: --disable-tcg --without-default-devices
|
||||||
|
|
||||||
# The riscv64 cross-builds currently use a 'sid' container to get
|
# The riscv64 cross-builds currently use a 'sid' container to get
|
||||||
# compilers and libraries. Until something more stable is found we
|
# compilers and libraries. Until something more stable is found we
|
||||||
# allow_failure so as not to block CI.
|
# allow_failure so as not to block CI.
|
||||||
|
@ -41,11 +41,15 @@ msys2-64bit:
|
|||||||
mingw-w64-x86_64-gcc
|
mingw-w64-x86_64-gcc
|
||||||
mingw-w64-x86_64-glib2
|
mingw-w64-x86_64-glib2
|
||||||
mingw-w64-x86_64-gnutls
|
mingw-w64-x86_64-gnutls
|
||||||
|
mingw-w64-x86_64-gtk3
|
||||||
|
mingw-w64-x86_64-libgcrypt
|
||||||
|
mingw-w64-x86_64-libjpeg-turbo
|
||||||
mingw-w64-x86_64-libnfs
|
mingw-w64-x86_64-libnfs
|
||||||
mingw-w64-x86_64-libpng
|
mingw-w64-x86_64-libpng
|
||||||
mingw-w64-x86_64-libssh
|
mingw-w64-x86_64-libssh
|
||||||
mingw-w64-x86_64-libtasn1
|
mingw-w64-x86_64-libtasn1
|
||||||
mingw-w64-x86_64-libusb
|
mingw-w64-x86_64-libusb
|
||||||
|
mingw-w64-x86_64-lzo2
|
||||||
mingw-w64-x86_64-nettle
|
mingw-w64-x86_64-nettle
|
||||||
mingw-w64-x86_64-ninja
|
mingw-w64-x86_64-ninja
|
||||||
mingw-w64-x86_64-pixman
|
mingw-w64-x86_64-pixman
|
||||||
@ -57,12 +61,21 @@ msys2-64bit:
|
|||||||
mingw-w64-x86_64-usbredir
|
mingw-w64-x86_64-usbredir
|
||||||
mingw-w64-x86_64-zstd "
|
mingw-w64-x86_64-zstd "
|
||||||
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
|
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
|
||||||
- $env:MSYSTEM = 'MINGW64' # Start a 64 bit Mingw environment
|
- $env:MSYSTEM = 'MINGW64' # Start a 64-bit MinGW environment
|
||||||
- $env:MSYS = 'winsymlinks:native' # Enable native Windows symlink
|
- $env:MSYS = 'winsymlinks:native' # Enable native Windows symlink
|
||||||
- .\msys64\usr\bin\bash -lc './configure --target-list=x86_64-softmmu
|
- mkdir output
|
||||||
--enable-capstone --without-default-devices'
|
- cd output
|
||||||
- .\msys64\usr\bin\bash -lc 'make'
|
# Note: do not remove "--without-default-devices"!
|
||||||
- .\msys64\usr\bin\bash -lc 'make check || { cat build/meson-logs/testlog.txt; exit 1; } ;'
|
# commit 9f8e6cad65a6 ("gitlab-ci: Speed up the msys2-64bit job by using --without-default-devices"
|
||||||
|
# changed to compile QEMU with the --without-default-devices switch
|
||||||
|
# for the msys2 64-bit job, due to the build could not complete within
|
||||||
|
# the project timeout.
|
||||||
|
- ..\msys64\usr\bin\bash -lc '../configure --target-list=x86_64-softmmu
|
||||||
|
--without-default-devices'
|
||||||
|
- ..\msys64\usr\bin\bash -lc 'make'
|
||||||
|
# qTests don't run successfully with "--without-default-devices",
|
||||||
|
# so let's exclude the qtests from CI for now.
|
||||||
|
- ..\msys64\usr\bin\bash -lc 'make check MTESTARGS=\"--no-suite qtest\" || { cat meson-logs/testlog.txt; exit 1; } ;'
|
||||||
|
|
||||||
msys2-32bit:
|
msys2-32bit:
|
||||||
extends: .shared_msys2_builder
|
extends: .shared_msys2_builder
|
||||||
@ -79,21 +92,27 @@ msys2-32bit:
|
|||||||
mingw-w64-i686-gtk3
|
mingw-w64-i686-gtk3
|
||||||
mingw-w64-i686-libgcrypt
|
mingw-w64-i686-libgcrypt
|
||||||
mingw-w64-i686-libjpeg-turbo
|
mingw-w64-i686-libjpeg-turbo
|
||||||
|
mingw-w64-i686-libnfs
|
||||||
|
mingw-w64-i686-libpng
|
||||||
mingw-w64-i686-libssh
|
mingw-w64-i686-libssh
|
||||||
mingw-w64-i686-libtasn1
|
mingw-w64-i686-libtasn1
|
||||||
mingw-w64-i686-libusb
|
mingw-w64-i686-libusb
|
||||||
mingw-w64-i686-lzo2
|
mingw-w64-i686-lzo2
|
||||||
|
mingw-w64-i686-nettle
|
||||||
mingw-w64-i686-ninja
|
mingw-w64-i686-ninja
|
||||||
mingw-w64-i686-pixman
|
mingw-w64-i686-pixman
|
||||||
mingw-w64-i686-pkgconf
|
mingw-w64-i686-pkgconf
|
||||||
mingw-w64-i686-python
|
mingw-w64-i686-python
|
||||||
|
mingw-w64-i686-SDL2
|
||||||
|
mingw-w64-i686-SDL2_image
|
||||||
mingw-w64-i686-snappy
|
mingw-w64-i686-snappy
|
||||||
mingw-w64-i686-usbredir "
|
mingw-w64-i686-usbredir
|
||||||
|
mingw-w64-i686-zstd "
|
||||||
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
|
- $env:CHERE_INVOKING = 'yes' # Preserve the current working directory
|
||||||
- $env:MSYSTEM = 'MINGW32' # Start a 32-bit MinG environment
|
- $env:MSYSTEM = 'MINGW32' # Start a 32-bit MinGW environment
|
||||||
- $env:MSYS = 'winsymlinks:native' # Enable native Windows symlink
|
- $env:MSYS = 'winsymlinks:native' # Enable native Windows symlink
|
||||||
- mkdir output
|
- mkdir output
|
||||||
- cd output
|
- cd output
|
||||||
- ..\msys64\usr\bin\bash -lc "../configure --target-list=ppc64-softmmu"
|
- ..\msys64\usr\bin\bash -lc '../configure --target-list=ppc64-softmmu'
|
||||||
- ..\msys64\usr\bin\bash -lc 'make'
|
- ..\msys64\usr\bin\bash -lc 'make'
|
||||||
- ..\msys64\usr\bin\bash -lc 'make check || { cat meson-logs/testlog.txt; exit 1; } ;'
|
- ..\msys64\usr\bin\bash -lc 'make check || { cat meson-logs/testlog.txt; exit 1; } ;'
|
||||||
|
@ -18,11 +18,11 @@ https://www.qemu.org/contribute/security-process/
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
## Host environment
|
## Host environment
|
||||||
- Operating system: (Windows 10 21H1, Fedora 34, etc.)
|
- Operating system: <!-- Windows 10 21H1, Fedora 37, etc. -->
|
||||||
- OS/kernel version: (For POSIX hosts, use `uname -a`)
|
- OS/kernel version: <!-- For POSIX hosts, use `uname -a` -->
|
||||||
- Architecture: (x86, ARM, s390x, etc.)
|
- Architecture: <!-- x86, ARM, s390x, etc. -->
|
||||||
- QEMU flavor: (qemu-system-x86_64, qemu-aarch64, qemu-img, etc.)
|
- QEMU flavor: <!-- qemu-system-x86_64, qemu-aarch64, qemu-img, etc. -->
|
||||||
- QEMU version: (e.g. `qemu-system-x86_64 --version`)
|
- QEMU version: <!-- e.g. `qemu-system-x86_64 --version` -->
|
||||||
- QEMU command line:
|
- QEMU command line:
|
||||||
<!--
|
<!--
|
||||||
Give the smallest, complete command line that exhibits the problem.
|
Give the smallest, complete command line that exhibits the problem.
|
||||||
@ -35,9 +35,9 @@ https://www.qemu.org/contribute/security-process/
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Emulated/Virtualized environment
|
## Emulated/Virtualized environment
|
||||||
- Operating system: (Windows 10 21H1, Fedora 34, etc.)
|
- Operating system: <!-- Windows 10 21H1, Fedora 37, etc. -->
|
||||||
- OS/kernel version: (For POSIX guests, use `uname -a`.)
|
- OS/kernel version: <!-- For POSIX guests, use `uname -a`. -->
|
||||||
- Architecture: (x86, ARM, s390x, etc.)
|
- Architecture: <!-- x86, ARM, s390x, etc. -->
|
||||||
|
|
||||||
|
|
||||||
## Description of problem
|
## Description of problem
|
||||||
|
20
MAINTAINERS
20
MAINTAINERS
@ -78,6 +78,7 @@ M: Laurent Vivier <laurent@vivier.eu>
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
L: qemu-trivial@nongnu.org
|
L: qemu-trivial@nongnu.org
|
||||||
K: ^Subject:.*(?i)trivial
|
K: ^Subject:.*(?i)trivial
|
||||||
|
F: docs/devel/trivial-patches.rst
|
||||||
T: git git://git.corpit.ru/qemu.git trivial-patches
|
T: git git://git.corpit.ru/qemu.git trivial-patches
|
||||||
T: git https://github.com/vivier/qemu.git trivial-patches
|
T: git https://github.com/vivier/qemu.git trivial-patches
|
||||||
|
|
||||||
@ -129,6 +130,7 @@ F: util/cacheinfo.c
|
|||||||
F: util/cacheflush.c
|
F: util/cacheflush.c
|
||||||
F: scripts/decodetree.py
|
F: scripts/decodetree.py
|
||||||
F: docs/devel/decodetree.rst
|
F: docs/devel/decodetree.rst
|
||||||
|
F: docs/devel/tcg*
|
||||||
F: include/exec/cpu*.h
|
F: include/exec/cpu*.h
|
||||||
F: include/exec/exec-all.h
|
F: include/exec/exec-all.h
|
||||||
F: include/exec/helper*.h
|
F: include/exec/helper*.h
|
||||||
@ -254,6 +256,7 @@ F: tests/docker/dockerfiles/debian-nios2-cross.d/build-toolchain.sh
|
|||||||
OpenRISC TCG CPUs
|
OpenRISC TCG CPUs
|
||||||
M: Stafford Horne <shorne@gmail.com>
|
M: Stafford Horne <shorne@gmail.com>
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
|
F: docs/system/openrisc/cpu-features.rst
|
||||||
F: target/openrisc/
|
F: target/openrisc/
|
||||||
F: hw/openrisc/
|
F: hw/openrisc/
|
||||||
F: tests/tcg/openrisc/
|
F: tests/tcg/openrisc/
|
||||||
@ -332,6 +335,7 @@ F: target/i386/tcg/
|
|||||||
F: tests/tcg/i386/
|
F: tests/tcg/i386/
|
||||||
F: tests/tcg/x86_64/
|
F: tests/tcg/x86_64/
|
||||||
F: hw/i386/
|
F: hw/i386/
|
||||||
|
F: docs/system/i386/cpu.rst
|
||||||
F: docs/system/cpu-models-x86*
|
F: docs/system/cpu-models-x86*
|
||||||
T: git https://gitlab.com/ehabkost/qemu.git x86-next
|
T: git https://gitlab.com/ehabkost/qemu.git x86-next
|
||||||
|
|
||||||
@ -873,6 +877,7 @@ M: Peter Maydell <peter.maydell@linaro.org>
|
|||||||
R: Jean-Christophe Dubois <jcd@tribudubois.net>
|
R: Jean-Christophe Dubois <jcd@tribudubois.net>
|
||||||
L: qemu-arm@nongnu.org
|
L: qemu-arm@nongnu.org
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
|
F: docs/system/arm/sabrelite.rst
|
||||||
F: hw/arm/sabrelite.c
|
F: hw/arm/sabrelite.c
|
||||||
F: hw/arm/fsl-imx6.c
|
F: hw/arm/fsl-imx6.c
|
||||||
F: hw/misc/imx6_*.c
|
F: hw/misc/imx6_*.c
|
||||||
@ -1273,6 +1278,7 @@ OpenRISC Machines
|
|||||||
or1k-sim
|
or1k-sim
|
||||||
M: Jia Liu <proljc@gmail.com>
|
M: Jia Liu <proljc@gmail.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: docs/system/openrisc/or1k-sim.rst
|
||||||
F: hw/openrisc/openrisc_sim.c
|
F: hw/openrisc/openrisc_sim.c
|
||||||
|
|
||||||
PowerPC Machines
|
PowerPC Machines
|
||||||
@ -2016,6 +2022,7 @@ F: hw/virtio/trace-events
|
|||||||
F: qapi/virtio.json
|
F: qapi/virtio.json
|
||||||
F: net/vhost-user.c
|
F: net/vhost-user.c
|
||||||
F: include/hw/virtio/
|
F: include/hw/virtio/
|
||||||
|
F: docs/devel/virtio*
|
||||||
|
|
||||||
virtio-balloon
|
virtio-balloon
|
||||||
M: Michael S. Tsirkin <mst@redhat.com>
|
M: Michael S. Tsirkin <mst@redhat.com>
|
||||||
@ -2108,7 +2115,7 @@ F: tests/qtest/virtio-rng-test.c
|
|||||||
vhost-user-rng
|
vhost-user-rng
|
||||||
M: Mathieu Poirier <mathieu.poirier@linaro.org>
|
M: Mathieu Poirier <mathieu.poirier@linaro.org>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: docs/tools/vhost-user-rng.rst
|
F: docs/system/devices/vhost-user-rng.rst
|
||||||
F: hw/virtio/vhost-user-rng.c
|
F: hw/virtio/vhost-user-rng.c
|
||||||
F: hw/virtio/vhost-user-rng-pci.c
|
F: hw/virtio/vhost-user-rng-pci.c
|
||||||
F: include/hw/virtio/vhost-user-rng.h
|
F: include/hw/virtio/vhost-user-rng.h
|
||||||
@ -2146,7 +2153,7 @@ S: Supported
|
|||||||
F: hw/nvme/*
|
F: hw/nvme/*
|
||||||
F: include/block/nvme.h
|
F: include/block/nvme.h
|
||||||
F: tests/qtest/nvme-test.c
|
F: tests/qtest/nvme-test.c
|
||||||
F: docs/system/nvme.rst
|
F: docs/system/devices/nvme.rst
|
||||||
T: git git://git.infradead.org/qemu-nvme.git nvme-next
|
T: git git://git.infradead.org/qemu-nvme.git nvme-next
|
||||||
|
|
||||||
megasas
|
megasas
|
||||||
@ -2696,6 +2703,7 @@ GDB stub
|
|||||||
M: Alex Bennée <alex.bennee@linaro.org>
|
M: Alex Bennée <alex.bennee@linaro.org>
|
||||||
R: Philippe Mathieu-Daudé <philmd@linaro.org>
|
R: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: docs/system/gdb.rst
|
||||||
F: gdbstub/*
|
F: gdbstub/*
|
||||||
F: include/exec/gdbstub.h
|
F: include/exec/gdbstub.h
|
||||||
F: gdb-xml/
|
F: gdb-xml/
|
||||||
@ -2753,6 +2761,7 @@ F: ui/
|
|||||||
F: include/ui/
|
F: include/ui/
|
||||||
F: qapi/ui.json
|
F: qapi/ui.json
|
||||||
F: util/drm.c
|
F: util/drm.c
|
||||||
|
F: docs/devel/ui.rst
|
||||||
|
|
||||||
Cocoa graphics
|
Cocoa graphics
|
||||||
M: Peter Maydell <peter.maydell@linaro.org>
|
M: Peter Maydell <peter.maydell@linaro.org>
|
||||||
@ -2930,6 +2939,7 @@ M: Paolo Bonzini <pbonzini@redhat.com>
|
|||||||
R: Daniel P. Berrange <berrange@redhat.com>
|
R: Daniel P. Berrange <berrange@redhat.com>
|
||||||
R: Eduardo Habkost <eduardo@habkost.net>
|
R: Eduardo Habkost <eduardo@habkost.net>
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: docs/devel/qom.rst
|
||||||
F: docs/qdev-device-use.txt
|
F: docs/qdev-device-use.txt
|
||||||
F: hw/core/qdev*
|
F: hw/core/qdev*
|
||||||
F: hw/core/bus.c
|
F: hw/core/bus.c
|
||||||
@ -2978,6 +2988,7 @@ F: softmmu/qtest.c
|
|||||||
F: accel/qtest/
|
F: accel/qtest/
|
||||||
F: tests/qtest/
|
F: tests/qtest/
|
||||||
F: docs/devel/qgraph.rst
|
F: docs/devel/qgraph.rst
|
||||||
|
F: docs/devel/qtest.rst
|
||||||
X: tests/qtest/bios-tables-test*
|
X: tests/qtest/bios-tables-test*
|
||||||
|
|
||||||
Device Fuzzing
|
Device Fuzzing
|
||||||
@ -3044,6 +3055,7 @@ F: include/sysemu/tpm*
|
|||||||
F: qapi/tpm.json
|
F: qapi/tpm.json
|
||||||
F: backends/tpm/
|
F: backends/tpm/
|
||||||
F: tests/qtest/*tpm*
|
F: tests/qtest/*tpm*
|
||||||
|
F: docs/specs/tpm.rst
|
||||||
T: git https://github.com/stefanberger/qemu-tpm.git tpm-next
|
T: git https://github.com/stefanberger/qemu-tpm.git tpm-next
|
||||||
|
|
||||||
Checkpatch
|
Checkpatch
|
||||||
@ -3195,7 +3207,8 @@ F: replay/*
|
|||||||
F: block/blkreplay.c
|
F: block/blkreplay.c
|
||||||
F: net/filter-replay.c
|
F: net/filter-replay.c
|
||||||
F: include/sysemu/replay.h
|
F: include/sysemu/replay.h
|
||||||
F: docs/replay.txt
|
F: docs/devel/replay.rst
|
||||||
|
F: docs/system/replay.rst
|
||||||
F: stubs/replay.c
|
F: stubs/replay.c
|
||||||
F: tests/avocado/replay_kernel.py
|
F: tests/avocado/replay_kernel.py
|
||||||
F: tests/avocado/replay_linux.py
|
F: tests/avocado/replay_linux.py
|
||||||
@ -3719,6 +3732,7 @@ F: tests/docker/
|
|||||||
F: tests/vm/
|
F: tests/vm/
|
||||||
F: tests/lcitool/
|
F: tests/lcitool/
|
||||||
F: scripts/archive-source.sh
|
F: scripts/archive-source.sh
|
||||||
|
F: docs/devel/testing.rst
|
||||||
W: https://gitlab.com/qemu-project/qemu/pipelines
|
W: https://gitlab.com/qemu-project/qemu/pipelines
|
||||||
W: https://travis-ci.org/qemu/qemu
|
W: https://travis-ci.org/qemu/qemu
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ config VGA_MMIO
|
|||||||
|
|
||||||
config VMWARE_VGA
|
config VMWARE_VGA
|
||||||
bool
|
bool
|
||||||
default y if PCI_DEVICES
|
default y if PCI_DEVICES && PC_PCI
|
||||||
depends on PCI
|
depends on PCI
|
||||||
select VGA
|
select VGA
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ config RTL8139_PCI
|
|||||||
|
|
||||||
config VMXNET3_PCI
|
config VMXNET3_PCI
|
||||||
bool
|
bool
|
||||||
default y if PCI_DEVICES
|
default y if PCI_DEVICES && PC_PCI
|
||||||
depends on PCI
|
depends on PCI
|
||||||
|
|
||||||
config SMC91C111
|
config SMC91C111
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
#include "hw/pci/msi.h"
|
#include "hw/pci/msi.h"
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
|
#include "sysemu/reset.h"
|
||||||
|
#include "sysemu/runstate.h"
|
||||||
|
|
||||||
#ifndef DEBUG_S390PCI_BUS
|
#ifndef DEBUG_S390PCI_BUS
|
||||||
#define DEBUG_S390PCI_BUS 0
|
#define DEBUG_S390PCI_BUS 0
|
||||||
@ -150,10 +152,30 @@ out:
|
|||||||
psccb->header.response_code = cpu_to_be16(rc);
|
psccb->header.response_code = cpu_to_be16(rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void s390_pci_shutdown_notifier(Notifier *n, void *opaque)
|
||||||
|
{
|
||||||
|
S390PCIBusDevice *pbdev = container_of(n, S390PCIBusDevice,
|
||||||
|
shutdown_notifier);
|
||||||
|
|
||||||
|
pci_device_reset(pbdev->pdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void s390_pci_reset_cb(void *opaque)
|
||||||
|
{
|
||||||
|
S390PCIBusDevice *pbdev = opaque;
|
||||||
|
|
||||||
|
pci_device_reset(pbdev->pdev);
|
||||||
|
}
|
||||||
|
|
||||||
static void s390_pci_perform_unplug(S390PCIBusDevice *pbdev)
|
static void s390_pci_perform_unplug(S390PCIBusDevice *pbdev)
|
||||||
{
|
{
|
||||||
HotplugHandler *hotplug_ctrl;
|
HotplugHandler *hotplug_ctrl;
|
||||||
|
|
||||||
|
if (pbdev->pft == ZPCI_PFT_ISM) {
|
||||||
|
notifier_remove(&pbdev->shutdown_notifier);
|
||||||
|
qemu_unregister_reset(s390_pci_reset_cb, pbdev);
|
||||||
|
}
|
||||||
|
|
||||||
/* Unplug the PCI device */
|
/* Unplug the PCI device */
|
||||||
if (pbdev->pdev) {
|
if (pbdev->pdev) {
|
||||||
DeviceState *pdev = DEVICE(pbdev->pdev);
|
DeviceState *pdev = DEVICE(pbdev->pdev);
|
||||||
@ -1111,6 +1133,12 @@ static void s390_pcihost_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
|
|||||||
pbdev->fh |= FH_SHM_VFIO;
|
pbdev->fh |= FH_SHM_VFIO;
|
||||||
pbdev->forwarding_assist = false;
|
pbdev->forwarding_assist = false;
|
||||||
}
|
}
|
||||||
|
/* Register shutdown notifier and reset callback for ISM devices */
|
||||||
|
if (pbdev->pft == ZPCI_PFT_ISM) {
|
||||||
|
pbdev->shutdown_notifier.notify = s390_pci_shutdown_notifier;
|
||||||
|
qemu_register_shutdown_notifier(&pbdev->shutdown_notifier);
|
||||||
|
qemu_register_reset(s390_pci_reset_cb, pbdev);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
pbdev->fh |= FH_SHM_EMUL;
|
pbdev->fh |= FH_SHM_EMUL;
|
||||||
/* Always intercept emulated devices */
|
/* Always intercept emulated devices */
|
||||||
|
@ -640,6 +640,8 @@ static uint32_t s390_pci_update_iotlb(S390PCIIOMMU *iommu,
|
|||||||
}
|
}
|
||||||
g_hash_table_remove(iommu->iotlb, &entry->iova);
|
g_hash_table_remove(iommu->iotlb, &entry->iova);
|
||||||
inc_dma_avail(iommu);
|
inc_dma_avail(iommu);
|
||||||
|
/* Don't notify the iommu yet, maybe we can bundle contiguous unmaps */
|
||||||
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
if (cache) {
|
if (cache) {
|
||||||
if (cache->perm == entry->perm &&
|
if (cache->perm == entry->perm &&
|
||||||
@ -663,15 +665,44 @@ static uint32_t s390_pci_update_iotlb(S390PCIIOMMU *iommu,
|
|||||||
dec_dma_avail(iommu);
|
dec_dma_avail(iommu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* All associated iotlb entries have already been cleared, trigger the
|
||||||
|
* unmaps.
|
||||||
|
*/
|
||||||
memory_region_notify_iommu(&iommu->iommu_mr, 0, event);
|
memory_region_notify_iommu(&iommu->iommu_mr, 0, event);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
return iommu->dma_limit ? iommu->dma_limit->avail : 1;
|
return iommu->dma_limit ? iommu->dma_limit->avail : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void s390_pci_batch_unmap(S390PCIIOMMU *iommu, uint64_t iova,
|
||||||
|
uint64_t len)
|
||||||
|
{
|
||||||
|
uint64_t remain = len, start = iova, end = start + len - 1, mask, size;
|
||||||
|
IOMMUTLBEvent event = {
|
||||||
|
.type = IOMMU_NOTIFIER_UNMAP,
|
||||||
|
.entry = {
|
||||||
|
.target_as = &address_space_memory,
|
||||||
|
.translated_addr = 0,
|
||||||
|
.perm = IOMMU_NONE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
while (remain >= TARGET_PAGE_SIZE) {
|
||||||
|
mask = dma_aligned_pow2_mask(start, end, 64);
|
||||||
|
size = mask + 1;
|
||||||
|
event.entry.iova = start;
|
||||||
|
event.entry.addr_mask = mask;
|
||||||
|
memory_region_notify_iommu(&iommu->iommu_mr, 0, event);
|
||||||
|
start += size;
|
||||||
|
remain -= size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int rpcit_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
|
int rpcit_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
|
||||||
{
|
{
|
||||||
CPUS390XState *env = &cpu->env;
|
CPUS390XState *env = &cpu->env;
|
||||||
|
uint64_t iova, coalesce = 0;
|
||||||
uint32_t fh;
|
uint32_t fh;
|
||||||
uint16_t error = 0;
|
uint16_t error = 0;
|
||||||
S390PCIBusDevice *pbdev;
|
S390PCIBusDevice *pbdev;
|
||||||
@ -742,6 +773,21 @@ int rpcit_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If this is an unmap of a PTE, let's try to coalesce multiple unmaps
|
||||||
|
* into as few notifier events as possible.
|
||||||
|
*/
|
||||||
|
if (entry.perm == IOMMU_NONE && entry.len == TARGET_PAGE_SIZE) {
|
||||||
|
if (coalesce == 0) {
|
||||||
|
iova = entry.iova;
|
||||||
|
}
|
||||||
|
coalesce += entry.len;
|
||||||
|
} else if (coalesce > 0) {
|
||||||
|
/* Unleash the coalesced unmap before processing a new map */
|
||||||
|
s390_pci_batch_unmap(iommu, iova, coalesce);
|
||||||
|
coalesce = 0;
|
||||||
|
}
|
||||||
|
|
||||||
start += entry.len;
|
start += entry.len;
|
||||||
while (entry.iova < start && entry.iova < end) {
|
while (entry.iova < start && entry.iova < end) {
|
||||||
if (dma_avail > 0 || entry.perm == IOMMU_NONE) {
|
if (dma_avail > 0 || entry.perm == IOMMU_NONE) {
|
||||||
@ -759,6 +805,11 @@ int rpcit_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (coalesce) {
|
||||||
|
/* Unleash the coalesced unmap before finishing rpcit */
|
||||||
|
s390_pci_batch_unmap(iommu, iova, coalesce);
|
||||||
|
coalesce = 0;
|
||||||
|
}
|
||||||
if (again && dma_avail > 0)
|
if (again && dma_avail > 0)
|
||||||
goto retry;
|
goto retry;
|
||||||
err:
|
err:
|
||||||
|
@ -84,6 +84,7 @@ S390PCIDMACount *s390_pci_start_dma_count(S390pciState *s,
|
|||||||
cnt->users = 1;
|
cnt->users = 1;
|
||||||
cnt->avail = avail;
|
cnt->avail = avail;
|
||||||
QTAILQ_INSERT_TAIL(&s->zpci_dma_limit, cnt, link);
|
QTAILQ_INSERT_TAIL(&s->zpci_dma_limit, cnt, link);
|
||||||
|
pbdev->iommu->max_dma_limit = avail;
|
||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,6 +104,7 @@ static void s390_pci_read_base(S390PCIBusDevice *pbdev,
|
|||||||
struct vfio_info_cap_header *hdr;
|
struct vfio_info_cap_header *hdr;
|
||||||
struct vfio_device_info_cap_zpci_base *cap;
|
struct vfio_device_info_cap_zpci_base *cap;
|
||||||
VFIOPCIDevice *vpci = container_of(pbdev->pdev, VFIOPCIDevice, pdev);
|
VFIOPCIDevice *vpci = container_of(pbdev->pdev, VFIOPCIDevice, pdev);
|
||||||
|
uint64_t vfio_size;
|
||||||
|
|
||||||
hdr = vfio_get_device_info_cap(info, VFIO_DEVICE_INFO_CAP_ZPCI_BASE);
|
hdr = vfio_get_device_info_cap(info, VFIO_DEVICE_INFO_CAP_ZPCI_BASE);
|
||||||
|
|
||||||
@ -122,6 +124,17 @@ static void s390_pci_read_base(S390PCIBusDevice *pbdev,
|
|||||||
/* The following values remain 0 until we support other FMB formats */
|
/* The following values remain 0 until we support other FMB formats */
|
||||||
pbdev->zpci_fn.fmbl = 0;
|
pbdev->zpci_fn.fmbl = 0;
|
||||||
pbdev->zpci_fn.pft = 0;
|
pbdev->zpci_fn.pft = 0;
|
||||||
|
/* Store function type separately for type-specific behavior */
|
||||||
|
pbdev->pft = cap->pft;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If appropriate, reduce the size of the supported DMA aperture reported
|
||||||
|
* to the guest based upon the vfio DMA limit.
|
||||||
|
*/
|
||||||
|
vfio_size = pbdev->iommu->max_dma_limit << TARGET_PAGE_BITS;
|
||||||
|
if (vfio_size < (cap->end_dma - cap->start_dma + 1)) {
|
||||||
|
pbdev->zpci_fn.edma = cap->start_dma + vfio_size - 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool get_host_fh(S390PCIBusDevice *pbdev, struct vfio_device_info *info,
|
static bool get_host_fh(S390PCIBusDevice *pbdev, struct vfio_device_info *info,
|
||||||
|
@ -39,6 +39,9 @@
|
|||||||
#define UID_CHECKING_ENABLED 0x01
|
#define UID_CHECKING_ENABLED 0x01
|
||||||
#define ZPCI_DTSM 0x40
|
#define ZPCI_DTSM 0x40
|
||||||
|
|
||||||
|
/* zPCI Function Types */
|
||||||
|
#define ZPCI_PFT_ISM 5
|
||||||
|
|
||||||
OBJECT_DECLARE_SIMPLE_TYPE(S390pciState, S390_PCI_HOST_BRIDGE)
|
OBJECT_DECLARE_SIMPLE_TYPE(S390pciState, S390_PCI_HOST_BRIDGE)
|
||||||
OBJECT_DECLARE_SIMPLE_TYPE(S390PCIBus, S390_PCI_BUS)
|
OBJECT_DECLARE_SIMPLE_TYPE(S390PCIBus, S390_PCI_BUS)
|
||||||
OBJECT_DECLARE_SIMPLE_TYPE(S390PCIBusDevice, S390_PCI_DEVICE)
|
OBJECT_DECLARE_SIMPLE_TYPE(S390PCIBusDevice, S390_PCI_DEVICE)
|
||||||
@ -278,6 +281,7 @@ struct S390PCIIOMMU {
|
|||||||
uint64_t g_iota;
|
uint64_t g_iota;
|
||||||
uint64_t pba;
|
uint64_t pba;
|
||||||
uint64_t pal;
|
uint64_t pal;
|
||||||
|
uint64_t max_dma_limit;
|
||||||
GHashTable *iotlb;
|
GHashTable *iotlb;
|
||||||
S390PCIDMACount *dma_limit;
|
S390PCIDMACount *dma_limit;
|
||||||
};
|
};
|
||||||
@ -343,6 +347,7 @@ struct S390PCIBusDevice {
|
|||||||
uint16_t noi;
|
uint16_t noi;
|
||||||
uint16_t maxstbl;
|
uint16_t maxstbl;
|
||||||
uint8_t sum;
|
uint8_t sum;
|
||||||
|
uint8_t pft;
|
||||||
S390PCIGroup *pci_group;
|
S390PCIGroup *pci_group;
|
||||||
ClpRspQueryPci zpci_fn;
|
ClpRspQueryPci zpci_fn;
|
||||||
S390MsixInfo msix;
|
S390MsixInfo msix;
|
||||||
@ -351,6 +356,7 @@ struct S390PCIBusDevice {
|
|||||||
MemoryRegion msix_notify_mr;
|
MemoryRegion msix_notify_mr;
|
||||||
IndAddr *summary_ind;
|
IndAddr *summary_ind;
|
||||||
IndAddr *indicator;
|
IndAddr *indicator;
|
||||||
|
Notifier shutdown_notifier;
|
||||||
bool pci_unplug_request_processed;
|
bool pci_unplug_request_processed;
|
||||||
bool unplug_requested;
|
bool unplug_requested;
|
||||||
bool interp;
|
bool interp;
|
||||||
|
@ -25,10 +25,8 @@
|
|||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "monitor-internal.h"
|
#include "monitor-internal.h"
|
||||||
#include "monitor/qdev.h"
|
#include "monitor/qdev.h"
|
||||||
#include "hw/usb.h"
|
|
||||||
#include "hw/pci/pci.h"
|
#include "hw/pci/pci.h"
|
||||||
#include "sysemu/watchdog.h"
|
#include "sysemu/watchdog.h"
|
||||||
#include "hw/loader.h"
|
|
||||||
#include "exec/gdbstub.h"
|
#include "exec/gdbstub.h"
|
||||||
#include "net/net.h"
|
#include "net/net.h"
|
||||||
#include "net/slirp.h"
|
#include "net/slirp.h"
|
||||||
@ -39,16 +37,13 @@
|
|||||||
#include "ui/input.h"
|
#include "ui/input.h"
|
||||||
#include "audio/audio.h"
|
#include "audio/audio.h"
|
||||||
#include "disas/disas.h"
|
#include "disas/disas.h"
|
||||||
#include "sysemu/balloon.h"
|
|
||||||
#include "qemu/timer.h"
|
#include "qemu/timer.h"
|
||||||
#include "qemu/log.h"
|
#include "qemu/log.h"
|
||||||
#include "sysemu/hw_accel.h"
|
#include "sysemu/hw_accel.h"
|
||||||
#include "sysemu/runstate.h"
|
#include "sysemu/runstate.h"
|
||||||
#include "authz/list.h"
|
#include "authz/list.h"
|
||||||
#include "qapi/util.h"
|
#include "qapi/util.h"
|
||||||
#include "sysemu/blockdev.h"
|
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "sysemu/tpm.h"
|
|
||||||
#include "sysemu/device_tree.h"
|
#include "sysemu/device_tree.h"
|
||||||
#include "qapi/qmp/qdict.h"
|
#include "qapi/qmp/qdict.h"
|
||||||
#include "qapi/qmp/qerror.h"
|
#include "qapi/qmp/qerror.h"
|
||||||
@ -77,7 +72,6 @@
|
|||||||
#include "qapi/qapi-init-commands.h"
|
#include "qapi/qapi-init-commands.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qapi/qmp-event.h"
|
#include "qapi/qmp-event.h"
|
||||||
#include "sysemu/cpus.h"
|
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
|
|
||||||
#if defined(TARGET_S390X)
|
#if defined(TARGET_S390X)
|
||||||
|
@ -10,14 +10,22 @@
|
|||||||
# This work is licensed under the terms of the GNU GPLv2 or later.
|
# This work is licensed under the terms of the GNU GPLv2 or later.
|
||||||
# See the COPYING file in the top-level directory.
|
# See the COPYING file in the top-level directory.
|
||||||
|
|
||||||
|
if [ $# -ne 2 ]; then
|
||||||
|
echo "Usage:"
|
||||||
|
echo " $0 gitrepo version"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
src="$1"
|
src="$1"
|
||||||
version="$2"
|
version="$2"
|
||||||
destination=qemu-${version}
|
destination=qemu-${version}
|
||||||
|
|
||||||
git clone "${src}" ${destination}
|
git clone --single-branch -b "v${version}" -c advice.detachedHead=false \
|
||||||
|
"${src}" ${destination}
|
||||||
|
|
||||||
pushd ${destination}
|
pushd ${destination}
|
||||||
git checkout "v${version}"
|
|
||||||
git submodule update --init
|
git submodule update --init --single-branch
|
||||||
(cd roms/seabios && git describe --tags --long --dirty > .version)
|
(cd roms/seabios && git describe --tags --long --dirty > .version)
|
||||||
(cd roms/skiboot && ./make_version.sh > .version)
|
(cd roms/skiboot && ./make_version.sh > .version)
|
||||||
# Fetch edk2 submodule's submodules, since it won't have access to them via
|
# Fetch edk2 submodule's submodules, since it won't have access to them via
|
||||||
@ -28,7 +36,7 @@ git submodule update --init
|
|||||||
# submodule dependencies, so we continue to handle these on a case-by-case
|
# submodule dependencies, so we continue to handle these on a case-by-case
|
||||||
# basis for now.
|
# basis for now.
|
||||||
(cd roms/edk2 && \
|
(cd roms/edk2 && \
|
||||||
git submodule update --init -- \
|
git submodule update --init --depth 1 -- \
|
||||||
ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 \
|
ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 \
|
||||||
BaseTools/Source/C/BrotliCompress/brotli \
|
BaseTools/Source/C/BrotliCompress/brotli \
|
||||||
CryptoPkg/Library/OpensslLib/openssl \
|
CryptoPkg/Library/OpensslLib/openssl \
|
||||||
|
@ -353,8 +353,8 @@ DEF_HELPER_FLAGS_3(tprot, TCG_CALL_NO_WG, i32, env, i64, i64)
|
|||||||
DEF_HELPER_2(iske, i64, env, i64)
|
DEF_HELPER_2(iske, i64, env, i64)
|
||||||
DEF_HELPER_3(sske, void, env, i64, i64)
|
DEF_HELPER_3(sske, void, env, i64, i64)
|
||||||
DEF_HELPER_2(rrbe, i32, env, i64)
|
DEF_HELPER_2(rrbe, i32, env, i64)
|
||||||
DEF_HELPER_4(mvcs, i32, env, i64, i64, i64)
|
DEF_HELPER_5(mvcs, i32, env, i64, i64, i64, i64)
|
||||||
DEF_HELPER_4(mvcp, i32, env, i64, i64, i64)
|
DEF_HELPER_5(mvcp, i32, env, i64, i64, i64, i64)
|
||||||
DEF_HELPER_4(sigp, i32, env, i64, i32, i32)
|
DEF_HELPER_4(sigp, i32, env, i64, i32, i32)
|
||||||
DEF_HELPER_FLAGS_2(sacf, TCG_CALL_NO_WG, void, env, i64)
|
DEF_HELPER_FLAGS_2(sacf, TCG_CALL_NO_WG, void, env, i64)
|
||||||
DEF_HELPER_FLAGS_4(idte, TCG_CALL_NO_RWG, void, env, i64, i64, i32)
|
DEF_HELPER_FLAGS_4(idte, TCG_CALL_NO_RWG, void, env, i64, i64, i32)
|
||||||
|
@ -1355,9 +1355,9 @@
|
|||||||
E(0xb24b, LURA, RRE, Z, 0, ra2, new, r1_32, lura, 0, MO_TEUL, IF_PRIV)
|
E(0xb24b, LURA, RRE, Z, 0, ra2, new, r1_32, lura, 0, MO_TEUL, IF_PRIV)
|
||||||
E(0xb905, LURAG, RRE, Z, 0, ra2, r1, 0, lura, 0, MO_TEUQ, IF_PRIV)
|
E(0xb905, LURAG, RRE, Z, 0, ra2, r1, 0, lura, 0, MO_TEUQ, IF_PRIV)
|
||||||
/* MOVE TO PRIMARY */
|
/* MOVE TO PRIMARY */
|
||||||
F(0xda00, MVCP, SS_d, Z, la1, a2, 0, 0, mvcp, 0, IF_PRIV)
|
C(0xda00, MVCP, SS_d, Z, la1, a2, 0, 0, mvcp, 0)
|
||||||
/* MOVE TO SECONDARY */
|
/* MOVE TO SECONDARY */
|
||||||
F(0xdb00, MVCS, SS_d, Z, la1, a2, 0, 0, mvcs, 0, IF_PRIV)
|
C(0xdb00, MVCS, SS_d, Z, la1, a2, 0, 0, mvcs, 0)
|
||||||
/* PURGE TLB */
|
/* PURGE TLB */
|
||||||
F(0xb20d, PTLB, S, Z, 0, 0, 0, 0, ptlb, 0, IF_PRIV)
|
F(0xb20d, PTLB, S, Z, 0, 0, 0, 0, ptlb, 0, IF_PRIV)
|
||||||
/* RESET REFERENCE BIT EXTENDED */
|
/* RESET REFERENCE BIT EXTENDED */
|
||||||
|
@ -51,7 +51,7 @@ static inline bool psw_key_valid(CPUS390XState *env, uint8_t psw_key)
|
|||||||
|
|
||||||
if (env->psw.mask & PSW_MASK_PSTATE) {
|
if (env->psw.mask & PSW_MASK_PSTATE) {
|
||||||
/* PSW key has range 0..15, it is valid if the bit is 1 in the PKM */
|
/* PSW key has range 0..15, it is valid if the bit is 1 in the PKM */
|
||||||
return pkm & (0x80 >> psw_key);
|
return pkm & (0x8000 >> psw_key);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2295,7 +2295,8 @@ uint32_t HELPER(rrbe)(CPUS390XState *env, uint64_t r2)
|
|||||||
return re >> 1;
|
return re >> 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t HELPER(mvcs)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
|
uint32_t HELPER(mvcs)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2,
|
||||||
|
uint64_t key)
|
||||||
{
|
{
|
||||||
const uint8_t psw_as = (env->psw.mask & PSW_MASK_ASC) >> PSW_SHIFT_ASC;
|
const uint8_t psw_as = (env->psw.mask & PSW_MASK_ASC) >> PSW_SHIFT_ASC;
|
||||||
S390Access srca, desta;
|
S390Access srca, desta;
|
||||||
@ -2310,6 +2311,10 @@ uint32_t HELPER(mvcs)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
|
|||||||
s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
|
s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!psw_key_valid(env, (key >> 4) & 0xf)) {
|
||||||
|
s390_program_interrupt(env, PGM_PRIVILEGED, ra);
|
||||||
|
}
|
||||||
|
|
||||||
l = wrap_length32(env, l);
|
l = wrap_length32(env, l);
|
||||||
if (l > 256) {
|
if (l > 256) {
|
||||||
/* max 256 */
|
/* max 256 */
|
||||||
@ -2319,14 +2324,14 @@ uint32_t HELPER(mvcs)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
|
|||||||
return cc;
|
return cc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Access key handling */
|
|
||||||
srca = access_prepare(env, a2, l, MMU_DATA_LOAD, MMU_PRIMARY_IDX, ra);
|
srca = access_prepare(env, a2, l, MMU_DATA_LOAD, MMU_PRIMARY_IDX, ra);
|
||||||
desta = access_prepare(env, a1, l, MMU_DATA_STORE, MMU_SECONDARY_IDX, ra);
|
desta = access_prepare(env, a1, l, MMU_DATA_STORE, MMU_SECONDARY_IDX, ra);
|
||||||
access_memmove(env, &desta, &srca, ra);
|
access_memmove(env, &desta, &srca, ra);
|
||||||
return cc;
|
return cc;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t HELPER(mvcp)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
|
uint32_t HELPER(mvcp)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2,
|
||||||
|
uint64_t key)
|
||||||
{
|
{
|
||||||
const uint8_t psw_as = (env->psw.mask & PSW_MASK_ASC) >> PSW_SHIFT_ASC;
|
const uint8_t psw_as = (env->psw.mask & PSW_MASK_ASC) >> PSW_SHIFT_ASC;
|
||||||
S390Access srca, desta;
|
S390Access srca, desta;
|
||||||
@ -2341,6 +2346,10 @@ uint32_t HELPER(mvcp)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
|
|||||||
s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
|
s390_program_interrupt(env, PGM_SPECIAL_OP, ra);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!psw_key_valid(env, (key >> 4) & 0xf)) {
|
||||||
|
s390_program_interrupt(env, PGM_PRIVILEGED, ra);
|
||||||
|
}
|
||||||
|
|
||||||
l = wrap_length32(env, l);
|
l = wrap_length32(env, l);
|
||||||
if (l > 256) {
|
if (l > 256) {
|
||||||
/* max 256 */
|
/* max 256 */
|
||||||
@ -2350,7 +2359,6 @@ uint32_t HELPER(mvcp)(CPUS390XState *env, uint64_t l, uint64_t a1, uint64_t a2)
|
|||||||
return cc;
|
return cc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Access key handling */
|
|
||||||
srca = access_prepare(env, a2, l, MMU_DATA_LOAD, MMU_SECONDARY_IDX, ra);
|
srca = access_prepare(env, a2, l, MMU_DATA_LOAD, MMU_SECONDARY_IDX, ra);
|
||||||
desta = access_prepare(env, a1, l, MMU_DATA_STORE, MMU_PRIMARY_IDX, ra);
|
desta = access_prepare(env, a1, l, MMU_DATA_STORE, MMU_PRIMARY_IDX, ra);
|
||||||
access_memmove(env, &desta, &srca, ra);
|
access_memmove(env, &desta, &srca, ra);
|
||||||
|
@ -3476,7 +3476,8 @@ static DisasJumpType op_mvcos(DisasContext *s, DisasOps *o)
|
|||||||
static DisasJumpType op_mvcp(DisasContext *s, DisasOps *o)
|
static DisasJumpType op_mvcp(DisasContext *s, DisasOps *o)
|
||||||
{
|
{
|
||||||
int r1 = get_field(s, l1);
|
int r1 = get_field(s, l1);
|
||||||
gen_helper_mvcp(cc_op, cpu_env, regs[r1], o->addr1, o->in2);
|
int r3 = get_field(s, r3);
|
||||||
|
gen_helper_mvcp(cc_op, cpu_env, regs[r1], o->addr1, o->in2, regs[r3]);
|
||||||
set_cc_static(s);
|
set_cc_static(s);
|
||||||
return DISAS_NEXT;
|
return DISAS_NEXT;
|
||||||
}
|
}
|
||||||
@ -3484,7 +3485,8 @@ static DisasJumpType op_mvcp(DisasContext *s, DisasOps *o)
|
|||||||
static DisasJumpType op_mvcs(DisasContext *s, DisasOps *o)
|
static DisasJumpType op_mvcs(DisasContext *s, DisasOps *o)
|
||||||
{
|
{
|
||||||
int r1 = get_field(s, l1);
|
int r1 = get_field(s, l1);
|
||||||
gen_helper_mvcs(cc_op, cpu_env, regs[r1], o->addr1, o->in2);
|
int r3 = get_field(s, r3);
|
||||||
|
gen_helper_mvcs(cc_op, cpu_env, regs[r1], o->addr1, o->in2, regs[r3]);
|
||||||
set_cc_static(s);
|
set_cc_static(s);
|
||||||
return DISAS_NEXT;
|
return DISAS_NEXT;
|
||||||
}
|
}
|
||||||
|
@ -37,15 +37,15 @@
|
|||||||
|
|
||||||
static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *alloc)
|
static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *alloc)
|
||||||
{
|
{
|
||||||
|
static const char test[] = "TEST";
|
||||||
struct e1000_tx_desc descr;
|
struct e1000_tx_desc descr;
|
||||||
static const int data_len = 64;
|
|
||||||
char buffer[64];
|
char buffer[64];
|
||||||
int ret;
|
int ret;
|
||||||
uint32_t recv_len;
|
uint32_t recv_len;
|
||||||
|
|
||||||
/* Prepare test data buffer */
|
/* Prepare test data buffer */
|
||||||
uint64_t data = guest_alloc(alloc, data_len);
|
uint64_t data = guest_alloc(alloc, sizeof(buffer));
|
||||||
memwrite(data, "TEST", 5);
|
memwrite(data, test, sizeof(test));
|
||||||
|
|
||||||
/* Prepare TX descriptor */
|
/* Prepare TX descriptor */
|
||||||
memset(&descr, 0, sizeof(descr));
|
memset(&descr, 0, sizeof(descr));
|
||||||
@ -54,7 +54,7 @@ static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *a
|
|||||||
E1000_TXD_CMD_EOP |
|
E1000_TXD_CMD_EOP |
|
||||||
E1000_TXD_CMD_DEXT |
|
E1000_TXD_CMD_DEXT |
|
||||||
E1000_TXD_DTYP_D |
|
E1000_TXD_DTYP_D |
|
||||||
data_len);
|
sizeof(buffer));
|
||||||
|
|
||||||
/* Put descriptor to the ring */
|
/* Put descriptor to the ring */
|
||||||
e1000e_tx_ring_push(d, &descr);
|
e1000e_tx_ring_push(d, &descr);
|
||||||
@ -69,9 +69,9 @@ static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *a
|
|||||||
/* Check data sent to the backend */
|
/* Check data sent to the backend */
|
||||||
ret = recv(test_sockets[0], &recv_len, sizeof(recv_len), 0);
|
ret = recv(test_sockets[0], &recv_len, sizeof(recv_len), 0);
|
||||||
g_assert_cmpint(ret, == , sizeof(recv_len));
|
g_assert_cmpint(ret, == , sizeof(recv_len));
|
||||||
ret = recv(test_sockets[0], buffer, 64, 0);
|
ret = recv(test_sockets[0], buffer, sizeof(buffer), 0);
|
||||||
g_assert_cmpint(ret, >=, 5);
|
g_assert_cmpint(ret, ==, sizeof(buffer));
|
||||||
g_assert_cmpstr(buffer, == , "TEST");
|
g_assert_cmpstr(buffer, == , test);
|
||||||
|
|
||||||
/* Free test data buffer */
|
/* Free test data buffer */
|
||||||
guest_free(alloc, data);
|
guest_free(alloc, data);
|
||||||
@ -93,7 +93,6 @@ static void e1000e_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int data_len = 64;
|
|
||||||
char buffer[64];
|
char buffer[64];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -102,7 +101,7 @@ static void e1000e_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator
|
|||||||
g_assert_cmpint(ret, == , sizeof(test) + sizeof(len));
|
g_assert_cmpint(ret, == , sizeof(test) + sizeof(len));
|
||||||
|
|
||||||
/* Prepare test data buffer */
|
/* Prepare test data buffer */
|
||||||
uint64_t data = guest_alloc(alloc, data_len);
|
uint64_t data = guest_alloc(alloc, sizeof(buffer));
|
||||||
|
|
||||||
/* Prepare RX descriptor */
|
/* Prepare RX descriptor */
|
||||||
memset(&descr, 0, sizeof(descr));
|
memset(&descr, 0, sizeof(descr));
|
||||||
@ -120,7 +119,7 @@ static void e1000e_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator
|
|||||||
|
|
||||||
/* Check data sent to the backend */
|
/* Check data sent to the backend */
|
||||||
memread(data, buffer, sizeof(buffer));
|
memread(data, buffer, sizeof(buffer));
|
||||||
g_assert_cmpstr(buffer, == , "TEST");
|
g_assert_cmpstr(buffer, == , test);
|
||||||
|
|
||||||
/* Free test data buffer */
|
/* Free test data buffer */
|
||||||
guest_free(alloc, data);
|
guest_free(alloc, data);
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
#define E1000E_IVAR_TEST_CFG \
|
#define E1000E_IVAR_TEST_CFG \
|
||||||
(((E1000E_RX0_MSG_ID | E1000_IVAR_INT_ALLOC_VALID) << E1000_IVAR_RXQ0_SHIFT) | \
|
(((E1000E_RX0_MSG_ID | E1000_IVAR_INT_ALLOC_VALID) << E1000_IVAR_RXQ0_SHIFT) | \
|
||||||
((E1000E_TX0_MSG_ID | E1000_IVAR_INT_ALLOC_VALID) << E1000_IVAR_TXQ0_SHIFT) | \
|
((E1000E_TX0_MSG_ID | E1000_IVAR_INT_ALLOC_VALID) << E1000_IVAR_TXQ0_SHIFT) | \
|
||||||
((E1000E_OTHER_MSG_ID | E1000_IVAR_INT_ALLOC_VALID) << E1000_IVAR_OTHER_SHIFT) | \
|
|
||||||
E1000_IVAR_TX_INT_EVERY_WB)
|
E1000_IVAR_TX_INT_EVERY_WB)
|
||||||
|
|
||||||
#define E1000E_RING_LEN (0x1000)
|
#define E1000E_RING_LEN (0x1000)
|
||||||
@ -152,6 +151,7 @@ static void e1000e_pci_start_hw(QOSGraphObject *obj)
|
|||||||
|
|
||||||
/* Enable transmit */
|
/* Enable transmit */
|
||||||
e1000e_macreg_write(&d->e1000e, E1000_TCTL, E1000_TCTL_EN);
|
e1000e_macreg_write(&d->e1000e, E1000_TCTL, E1000_TCTL_EN);
|
||||||
|
|
||||||
e1000e_macreg_write(&d->e1000e, E1000_RDBAL,
|
e1000e_macreg_write(&d->e1000e, E1000_RDBAL,
|
||||||
(uint32_t)d->e1000e.rx_ring);
|
(uint32_t)d->e1000e.rx_ring);
|
||||||
e1000e_macreg_write(&d->e1000e, E1000_RDBAH,
|
e1000e_macreg_write(&d->e1000e, E1000_RDBAH,
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
|
|
||||||
#define E1000E_RX0_MSG_ID (0)
|
#define E1000E_RX0_MSG_ID (0)
|
||||||
#define E1000E_TX0_MSG_ID (1)
|
#define E1000E_TX0_MSG_ID (1)
|
||||||
#define E1000E_OTHER_MSG_ID (2)
|
|
||||||
|
|
||||||
#define E1000E_TDLEN (0x3808)
|
#define E1000E_TDLEN (0x3808)
|
||||||
#define E1000E_TDT (0x3818)
|
#define E1000E_TDT (0x3818)
|
||||||
|
@ -1,9 +1,3 @@
|
|||||||
# All QTests for now are POSIX-only, but the dependencies are
|
|
||||||
# really in libqtest, not in the testcases themselves.
|
|
||||||
if not config_host.has_key('CONFIG_POSIX')
|
|
||||||
subdir_done()
|
|
||||||
endif
|
|
||||||
|
|
||||||
slow_qtests = {
|
slow_qtests = {
|
||||||
'ahci-test' : 60,
|
'ahci-test' : 60,
|
||||||
'bios-tables-test' : 120,
|
'bios-tables-test' : 120,
|
||||||
|
@ -983,6 +983,12 @@ static void register_vhost_user_blk_test(void)
|
|||||||
.before = vhost_user_blk_test_setup,
|
.before = vhost_user_blk_test_setup,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!getenv("QTEST_QEMU_STORAGE_DAEMON_BINARY")) {
|
||||||
|
g_test_message("QTEST_QEMU_STORAGE_DAEMON_BINARY not defined, "
|
||||||
|
"skipping vhost-user-blk-test");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* tests for vhost-user-blk and vhost-user-blk-pci
|
* tests for vhost-user-blk and vhost-user-blk-pci
|
||||||
* The tests are borrowed from tests/virtio-blk-test.c. But some tests
|
* The tests are borrowed from tests/virtio-blk-test.c. But some tests
|
||||||
|
@ -28,8 +28,8 @@ class FreeBSDVM(basevm.BaseVM):
|
|||||||
name = "freebsd"
|
name = "freebsd"
|
||||||
arch = "x86_64"
|
arch = "x86_64"
|
||||||
|
|
||||||
link = "https://download.freebsd.org/ftp/releases/ISO-IMAGES/12.3/FreeBSD-12.3-RELEASE-amd64-disc1.iso.xz"
|
link = "https://download.freebsd.org/ftp/releases/ISO-IMAGES/12.4/FreeBSD-12.4-RELEASE-amd64-disc1.iso.xz"
|
||||||
csum = "36dd0de50f1fe5f0a88e181e94657656de26fb64254412f74e80e128e8b938b4"
|
csum = "1dcf6446e31bf3f81b582e9aba3319a258c29a937a2af6138ee4b181ed719a87"
|
||||||
size = "20G"
|
size = "20G"
|
||||||
pkgs = [
|
pkgs = [
|
||||||
# build tools
|
# build tools
|
||||||
|
@ -24,10 +24,6 @@
|
|||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*
|
|
||||||
* The implementation of g_poll (functions poll_rest, g_poll) at the end of
|
|
||||||
* this file are based on code from GNOME glib-2 and use a different license,
|
|
||||||
* see the license comment there.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/option.h"
|
#include "qemu/option.h"
|
||||||
#include "qemu/config-file.h"
|
#include "qemu/config-file.h"
|
||||||
|
#include "hw/boards.h"
|
||||||
|
|
||||||
static QemuOptsList *vm_config_groups[48];
|
static QemuOptsList *vm_config_groups[48];
|
||||||
static QemuOptsList *drive_config_groups[5];
|
static QemuOptsList *drive_config_groups[5];
|
||||||
@ -143,97 +144,80 @@ static CommandLineParameterInfoList *get_drive_infolist(void)
|
|||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* restore machine options that are now machine's properties */
|
static CommandLineParameterInfo *objprop_to_cmdline_prop(ObjectProperty *prop)
|
||||||
static QemuOptsList machine_opts = {
|
{
|
||||||
.merge_lists = true,
|
CommandLineParameterInfo *info;
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(machine_opts.head),
|
|
||||||
.desc = {
|
info = g_malloc0(sizeof(*info));
|
||||||
{
|
info->name = g_strdup(prop->name);
|
||||||
.name = "type",
|
|
||||||
.type = QEMU_OPT_STRING,
|
if (g_str_equal(prop->type, "bool") || g_str_equal(prop->type, "OnOffAuto")) {
|
||||||
.help = "emulated machine"
|
info->type = COMMAND_LINE_PARAMETER_TYPE_BOOLEAN;
|
||||||
},{
|
} else if (g_str_equal(prop->type, "int")) {
|
||||||
.name = "accel",
|
info->type = COMMAND_LINE_PARAMETER_TYPE_NUMBER;
|
||||||
.type = QEMU_OPT_STRING,
|
} else if (g_str_equal(prop->type, "size")) {
|
||||||
.help = "accelerator list",
|
info->type = COMMAND_LINE_PARAMETER_TYPE_SIZE;
|
||||||
},{
|
} else {
|
||||||
.name = "kernel_irqchip",
|
info->type = COMMAND_LINE_PARAMETER_TYPE_STRING;
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "use KVM in-kernel irqchip",
|
|
||||||
},{
|
|
||||||
.name = "kvm_shadow_mem",
|
|
||||||
.type = QEMU_OPT_SIZE,
|
|
||||||
.help = "KVM shadow MMU size",
|
|
||||||
},{
|
|
||||||
.name = "kernel",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Linux kernel image file",
|
|
||||||
},{
|
|
||||||
.name = "initrd",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Linux initial ramdisk file",
|
|
||||||
},{
|
|
||||||
.name = "append",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Linux kernel command line",
|
|
||||||
},{
|
|
||||||
.name = "dtb",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Linux kernel device tree file",
|
|
||||||
},{
|
|
||||||
.name = "dumpdtb",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Dump current dtb to a file and quit",
|
|
||||||
},{
|
|
||||||
.name = "phandle_start",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "The first phandle ID we may generate dynamically",
|
|
||||||
},{
|
|
||||||
.name = "dt_compatible",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Overrides the \"compatible\" property of the dt root node",
|
|
||||||
},{
|
|
||||||
.name = "dump-guest-core",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "Include guest memory in a core dump",
|
|
||||||
},{
|
|
||||||
.name = "mem-merge",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "enable/disable memory merge support",
|
|
||||||
},{
|
|
||||||
.name = "usb",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "Set on/off to enable/disable usb",
|
|
||||||
},{
|
|
||||||
.name = "firmware",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "firmware image",
|
|
||||||
},{
|
|
||||||
.name = "iommu",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "Set on/off to enable/disable Intel IOMMU (VT-d)",
|
|
||||||
},{
|
|
||||||
.name = "suppress-vmdesc",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "Set on to disable self-describing migration",
|
|
||||||
},{
|
|
||||||
.name = "aes-key-wrap",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "enable/disable AES key wrapping using the CPACF wrapping key",
|
|
||||||
},{
|
|
||||||
.name = "dea-key-wrap",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "enable/disable DEA key wrapping using the CPACF wrapping key",
|
|
||||||
},{
|
|
||||||
.name = "loadparm",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Up to 8 chars in set of [A-Za-z0-9. ](lower case chars"
|
|
||||||
" converted to upper case) to pass to machine"
|
|
||||||
" loader, boot manager, and guest kernel",
|
|
||||||
},
|
|
||||||
{ /* End of list */ }
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
if (prop->description) {
|
||||||
|
info->help = g_strdup(prop->description);
|
||||||
|
}
|
||||||
|
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CommandLineParameterInfoList *query_all_machine_properties(void)
|
||||||
|
{
|
||||||
|
CommandLineParameterInfoList *params = NULL, *clpiter;
|
||||||
|
CommandLineParameterInfo *info;
|
||||||
|
GSList *machines, *curr_mach;
|
||||||
|
ObjectPropertyIterator op_iter;
|
||||||
|
ObjectProperty *prop;
|
||||||
|
bool is_new;
|
||||||
|
|
||||||
|
machines = object_class_get_list(TYPE_MACHINE, false);
|
||||||
|
assert(machines);
|
||||||
|
|
||||||
|
/* Loop over all machine classes */
|
||||||
|
for (curr_mach = machines; curr_mach; curr_mach = curr_mach->next) {
|
||||||
|
object_class_property_iter_init(&op_iter, curr_mach->data);
|
||||||
|
/* ... and over the properties of each machine: */
|
||||||
|
while ((prop = object_property_iter_next(&op_iter))) {
|
||||||
|
if (!prop->set) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Check whether the property has already been put into the list
|
||||||
|
* (via another machine class)
|
||||||
|
*/
|
||||||
|
is_new = true;
|
||||||
|
for (clpiter = params; clpiter != NULL; clpiter = clpiter->next) {
|
||||||
|
if (g_str_equal(clpiter->value->name, prop->name)) {
|
||||||
|
is_new = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* If it hasn't been added before, add it now to the list */
|
||||||
|
if (is_new) {
|
||||||
|
info = objprop_to_cmdline_prop(prop);
|
||||||
|
QAPI_LIST_PREPEND(params, info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_slist_free(machines);
|
||||||
|
|
||||||
|
/* Add entry for the "type" parameter */
|
||||||
|
info = g_malloc0(sizeof(*info));
|
||||||
|
info->name = g_strdup("type");
|
||||||
|
info->type = COMMAND_LINE_PARAMETER_TYPE_STRING;
|
||||||
|
info->help = g_strdup("machine type");
|
||||||
|
QAPI_LIST_PREPEND(params, info);
|
||||||
|
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
CommandLineOptionInfoList *qmp_query_command_line_options(const char *option,
|
CommandLineOptionInfoList *qmp_query_command_line_options(const char *option,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
@ -259,7 +243,7 @@ CommandLineOptionInfoList *qmp_query_command_line_options(const char *option,
|
|||||||
if (!option || !strcmp(option, "machine")) {
|
if (!option || !strcmp(option, "machine")) {
|
||||||
info = g_malloc0(sizeof(*info));
|
info = g_malloc0(sizeof(*info));
|
||||||
info->option = g_strdup("machine");
|
info->option = g_strdup("machine");
|
||||||
info->parameters = query_option_descs(machine_opts.desc);
|
info->parameters = query_all_machine_properties();
|
||||||
QAPI_LIST_PREPEND(conf_list, info);
|
QAPI_LIST_PREPEND(conf_list, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user