mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'for-upstream-i386' of https://gitlab.com/bonzini/qemu into staging
* target/i386: new feature bits for AMD processors * target/i386/tcg: improvements around flag handling * target/i386: add AVX10 support * target/i386: add GraniteRapids-v2 model * dockerfiles: add libcbor * New nitro-enclave machine type * qom: cleanups to object_new * configure: detect 64-bit MIPS for rust * configure: deprecate 32-bit MIPS # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmcjvkQUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroPIKgf/etNpO2T+eLFtWN/Qd5eopBXqNd9k # KmeK9EgW9lqx2IPGNen33O+uKpb/TsMmubSsSF+YxTp7pmkc8+71f3rBMaIAD02r # /paHSMVw0+f12DAFQz1jdvGihR7Mew0wcF/UdEt737y6vEmPxLTyYG3Gfa4NSZwT # /V5jTOIcfUN/UEjNgIp6NTuOEESKmlqt22pfMapgkwMlAJYeeJU2X9eGYE86wJbq # ZSXNgK3jL9wGT2XKa3e+OKzHfFpSkrB0JbQbdico9pefnBokN/hTeeUJ81wBAc7u # i00W1CEQVJ5lhBc121d4AWMp83ME6HijJUOTMmJbFIONPsITFPHK1CAkng== # =D4nR # -----END PGP SIGNATURE----- # gpg: Signature made Thu 31 Oct 2024 17:28:36 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 * tag 'for-upstream-i386' of https://gitlab.com/bonzini/qemu: (49 commits) target/i386: Introduce GraniteRapids-v2 model target/i386: Add AVX512 state when AVX10 is supported target/i386: Add feature dependencies for AVX10 target/i386: add CPUID.24 features for AVX10 target/i386: add AVX10 feature and AVX10 version property target/i386: return bool from x86_cpu_filter_features target/i386: do not rely on ExtSaveArea for accelerator-supported XCR0 bits target/i386: cpu: set correct supported XCR0 features for TCG target/i386: use + to put flags together target/i386: use higher-precision arithmetic to compute CF target/i386: use compiler builtin to compute PF target/i386: make flag variables unsigned target/i386: add a note about gen_jcc1 target/i386: add a few more trivial CCPrepare cases target/i386: optimize TEST+Jxx sequences target/i386: optimize computation of ZF from CC_OP_DYNAMIC target/i386: Wrap cc_op_live with a validity check target/i386: Introduce cc_op_size target/i386: Rearrange CCOp target/i386: remove CC_OP_CLR ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@@ -66,7 +66,7 @@
|
||||
- source scripts/ci/gitlab-ci-section
|
||||
- section_start buildenv "Setting up to run tests"
|
||||
- scripts/git-submodule.sh update roms/SLOF
|
||||
- meson subprojects download $(cd build/subprojects && echo *)
|
||||
- build/pyvenv/bin/meson subprojects download $(cd build/subprojects && echo *)
|
||||
- cd build
|
||||
- find . -type f -exec touch {} +
|
||||
# Avoid recompiling by hiding ninja with NINJA=":"
|
||||
|
||||
@@ -115,7 +115,7 @@ build-system-fedora:
|
||||
job: amd64-fedora-container
|
||||
variables:
|
||||
IMAGE: fedora
|
||||
CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs --enable-crypto-afalg
|
||||
CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs --enable-crypto-afalg --enable-rust
|
||||
TARGETS: microblaze-softmmu mips-softmmu
|
||||
xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
|
||||
MAKE_CHECK_ARGS: check-build
|
||||
|
||||
@@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
|
||||
NINJA='/usr/local/bin/ninja'
|
||||
PACKAGING_COMMAND='pkg'
|
||||
PIP3='/usr/local/bin/pip-3.8'
|
||||
PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk-vnc gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson mtools ncurses nettle ninja opencv pixman pkgconf png py311-numpy py311-pillow py311-pip py311-pyyaml py311-sphinx py311-sphinx_rtd_theme py311-tomli python3 rpm2cpio sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 xorriso zstd'
|
||||
PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk-vnc gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson mtools ncurses nettle ninja opencv pixman pkgconf png py311-numpy py311-pillow py311-pip py311-pyyaml py311-sphinx py311-sphinx_rtd_theme py311-tomli python3 rpm2cpio rust rust-bindgen-cli sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 xorriso zstd'
|
||||
PYPI_PKGS=''
|
||||
PYTHON='/usr/local/bin/python3'
|
||||
|
||||
@@ -11,6 +11,6 @@ MAKE='/opt/homebrew/bin/gmake'
|
||||
NINJA='/opt/homebrew/bin/ninja'
|
||||
PACKAGING_COMMAND='brew'
|
||||
PIP3='/opt/homebrew/bin/pip3'
|
||||
PKGS='bash bc bison bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 gtk-vnc jemalloc jpeg-turbo json-c libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy socat sparse spice-protocol swtpm tesseract usbredir vde vte3 xorriso zlib zstd'
|
||||
PKGS='bash bc bindgen bison bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 gtk-vnc jemalloc jpeg-turbo json-c libcbor libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python3 rpm2cpio rust sdl2 sdl2_image snappy socat sparse spice-protocol swtpm tesseract usbredir vde vte3 xorriso zlib zstd'
|
||||
PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme tomli'
|
||||
PYTHON='/opt/homebrew/bin/python3'
|
||||
|
||||
@@ -11,6 +11,6 @@ MAKE='/opt/homebrew/bin/gmake'
|
||||
NINJA='/opt/homebrew/bin/ninja'
|
||||
PACKAGING_COMMAND='brew'
|
||||
PIP3='/opt/homebrew/bin/pip3'
|
||||
PKGS='bash bc bison bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 gtk-vnc jemalloc jpeg-turbo json-c libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy socat sparse spice-protocol swtpm tesseract usbredir vde vte3 xorriso zlib zstd'
|
||||
PKGS='bash bc bindgen bison bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 gtk-vnc jemalloc jpeg-turbo json-c libcbor libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python3 rpm2cpio rust sdl2 sdl2_image snappy socat sparse spice-protocol swtpm tesseract usbredir vde vte3 xorriso zlib zstd'
|
||||
PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme tomli'
|
||||
PYTHON='/opt/homebrew/bin/python3'
|
||||
|
||||
@@ -5,6 +5,12 @@
|
||||
config LINUX
|
||||
bool
|
||||
|
||||
config LIBCBOR
|
||||
bool
|
||||
|
||||
config GNUTLS
|
||||
bool
|
||||
|
||||
config OPENGL
|
||||
bool
|
||||
|
||||
|
||||
+21
@@ -132,6 +132,7 @@ F: configs/targets/mips*
|
||||
|
||||
X86 general architecture support
|
||||
M: Paolo Bonzini <pbonzini@redhat.com>
|
||||
R: Zhao Liu <zhao1.liu@intel.com>
|
||||
S: Maintained
|
||||
F: configs/devices/i386-softmmu/default.mak
|
||||
F: configs/targets/i386-softmmu.mak
|
||||
@@ -1839,6 +1840,16 @@ F: hw/i386/microvm.c
|
||||
F: include/hw/i386/microvm.h
|
||||
F: pc-bios/bios-microvm.bin
|
||||
|
||||
nitro-enclave
|
||||
M: Alexander Graf <graf@amazon.com>
|
||||
M: Dorjoy Chowdhury <dorjoychy111@gmail.com>
|
||||
S: Maintained
|
||||
F: hw/core/eif.c
|
||||
F: hw/core/eif.h
|
||||
F: hw/i386/nitro_enclave.c
|
||||
F: include/hw/i386/nitro_enclave.h
|
||||
F: docs/system/i386/nitro-enclave.rst
|
||||
|
||||
Machine core
|
||||
M: Eduardo Habkost <eduardo@habkost.net>
|
||||
M: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
|
||||
@@ -2298,6 +2309,16 @@ F: include/sysemu/rng*.h
|
||||
F: backends/rng*.c
|
||||
F: tests/qtest/virtio-rng-test.c
|
||||
|
||||
virtio-nsm
|
||||
M: Alexander Graf <graf@amazon.com>
|
||||
M: Dorjoy Chowdhury <dorjoychy111@gmail.com>
|
||||
S: Maintained
|
||||
F: hw/virtio/cbor-helpers.c
|
||||
F: hw/virtio/virtio-nsm.c
|
||||
F: hw/virtio/virtio-nsm-pci.c
|
||||
F: include/hw/virtio/cbor-helpers.h
|
||||
F: include/hw/virtio/virtio-nsm.h
|
||||
|
||||
vhost-user-stubs
|
||||
M: Alex Bennée <alex.bennee@linaro.org>
|
||||
S: Maintained
|
||||
|
||||
@@ -73,19 +73,17 @@ void accel_system_init_ops_interfaces(AccelClass *ac)
|
||||
g_assert(ac_name != NULL);
|
||||
|
||||
ops_name = g_strdup_printf("%s" ACCEL_OPS_SUFFIX, ac_name);
|
||||
ops = ACCEL_OPS_CLASS(module_object_class_by_name(ops_name));
|
||||
oc = module_object_class_by_name(ops_name);
|
||||
if (!oc) {
|
||||
error_report("fatal: could not load module for type '%s'", ops_name);
|
||||
exit(1);
|
||||
}
|
||||
g_free(ops_name);
|
||||
ops = ACCEL_OPS_CLASS(oc);
|
||||
/*
|
||||
* all accelerators need to define ops, providing at least a mandatory
|
||||
* non-NULL create_vcpu_thread operation.
|
||||
*/
|
||||
g_assert(ops != NULL);
|
||||
ops = ACCEL_OPS_CLASS(oc);
|
||||
if (ops->ops_init) {
|
||||
ops->ops_init(ops);
|
||||
}
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
#include "qapi/error.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#define TYPE_MEMORY_BACKEND_MEMFD "memory-backend-memfd"
|
||||
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(HostMemoryBackendMemfd, MEMORY_BACKEND_MEMFD)
|
||||
|
||||
|
||||
|
||||
@@ -29,3 +29,4 @@
|
||||
# CONFIG_I440FX=n
|
||||
# CONFIG_Q35=n
|
||||
# CONFIG_MICROVM=n
|
||||
# CONFIG_NITRO_ENCLAVE=n
|
||||
|
||||
@@ -395,7 +395,11 @@ elif check_define _ARCH_PPC ; then
|
||||
cpu="ppc"
|
||||
fi
|
||||
elif check_define __mips__ ; then
|
||||
cpu="mips"
|
||||
if check_define __mips64 ; then
|
||||
cpu="mips64"
|
||||
else
|
||||
cpu="mips"
|
||||
fi
|
||||
elif check_define __s390__ ; then
|
||||
if check_define __s390x__ ; then
|
||||
cpu="s390x"
|
||||
@@ -1230,7 +1234,7 @@ EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
case "$host_arch" in
|
||||
case "$cpu" in
|
||||
arm)
|
||||
# e.g. arm-unknown-linux-gnueabi, arm-unknown-linux-gnueabihf
|
||||
write_c_skeleton
|
||||
@@ -1278,7 +1282,7 @@ EOF
|
||||
test "$rust_arch" = arm && test "$rust_os" != linux && rust_arch=armv7
|
||||
;;
|
||||
|
||||
mips|mips64)
|
||||
mips)
|
||||
# preserve ISA version (mipsisa64r6 etc.) and include endianness
|
||||
rust_arch=${raw_cpu%el}
|
||||
test "$bigendian" = no && rust_arch=${rust_arch}el
|
||||
|
||||
@@ -41,7 +41,7 @@ Those hosts are officially supported, with various accelerators:
|
||||
- Accelerators
|
||||
* - Arm
|
||||
- kvm (64 bit only), tcg, xen
|
||||
* - MIPS (little endian only)
|
||||
* - MIPS (64 bit little endian only)
|
||||
- kvm, tcg
|
||||
* - PPC
|
||||
- kvm, tcg
|
||||
|
||||
@@ -164,15 +164,19 @@ property types.
|
||||
Host Architectures
|
||||
------------------
|
||||
|
||||
BE MIPS (since 7.2)
|
||||
'''''''''''''''''''
|
||||
Big endian MIPS since 7.2; 32-bit little endian MIPS since 9.2
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
As Debian 10 ("Buster") moved into LTS the big endian 32 bit version of
|
||||
MIPS moved out of support making it hard to maintain our
|
||||
cross-compilation CI tests of the architecture. As we no longer have
|
||||
CI coverage support may bitrot away before the deprecation process
|
||||
completes. The little endian variants of MIPS (both 32 and 64 bit) are
|
||||
still a supported host architecture.
|
||||
completes.
|
||||
|
||||
Likewise, the little endian variant of 32 bit MIPS is not supported by
|
||||
Debian 13 ("Trixie") and newer.
|
||||
|
||||
64 bit little endian MIPS is still a supported host architecture.
|
||||
|
||||
System emulation on 32-bit x86 hosts (since 8.0)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
'nitro-enclave' virtual machine (``nitro-enclave``)
|
||||
===================================================
|
||||
|
||||
``nitro-enclave`` is a machine type which emulates an *AWS nitro enclave*
|
||||
virtual machine. `AWS nitro enclaves`_ is an Amazon EC2 feature that allows
|
||||
creating isolated execution environments, called enclaves, from Amazon EC2
|
||||
instances which are used for processing highly sensitive data. Enclaves have
|
||||
no persistent storage and no external networking. The enclave VMs are based
|
||||
on Firecracker microvm with a vhost-vsock device for communication with the
|
||||
parent EC2 instance that spawned it and a Nitro Secure Module (NSM) device
|
||||
for cryptographic attestation. The parent instance VM always has CID 3 while
|
||||
the enclave VM gets a dynamic CID. Enclaves use an EIF (`Enclave Image Format`_)
|
||||
file which contains the necessary kernel, cmdline and ramdisk(s) to boot.
|
||||
|
||||
In QEMU, ``nitro-enclave`` is a machine type based on ``microvm`` similar to how
|
||||
AWS nitro enclaves are based on `Firecracker`_ microvm. This is useful for
|
||||
local testing of EIF files using QEMU instead of running real AWS Nitro Enclaves
|
||||
which can be difficult for debugging due to its roots in security. The vsock
|
||||
device emulation is done using vhost-user-vsock which means another process that
|
||||
can do the userspace emulation, like `vhost-device-vsock`_ from rust-vmm crate,
|
||||
must be run alongside nitro-enclave for the vsock communication to work.
|
||||
|
||||
``libcbor`` and ``gnutls`` are required dependencies for nitro-enclave machine
|
||||
support to be added when building QEMU from source.
|
||||
|
||||
.. _AWS nitro enclaves: https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html
|
||||
.. _Enclave Image Format: https://github.com/aws/aws-nitro-enclaves-image-format
|
||||
.. _vhost-device-vsock: https://github.com/rust-vmm/vhost-device/tree/main/vhost-device-vsock
|
||||
.. _Firecracker: https://firecracker-microvm.github.io
|
||||
|
||||
Using the nitro-enclave machine type
|
||||
------------------------------------
|
||||
|
||||
Machine-specific options
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
It supports the following machine-specific options:
|
||||
|
||||
- nitro-enclave.vsock=string (required) (Id of the chardev from '-chardev' option that vhost-user-vsock device will use)
|
||||
- nitro-enclave.id=string (optional) (Set enclave identifier)
|
||||
- nitro-enclave.parent-role=string (optional) (Set parent instance IAM role ARN)
|
||||
- nitro-enclave.parent-id=string (optional) (Set parent instance identifier)
|
||||
|
||||
|
||||
Running a nitro-enclave VM
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
First, run `vhost-device-vsock`__ (or a similar tool that supports vhost-user-vsock).
|
||||
The forward-cid option below with value 1 forwards all connections from the enclave
|
||||
VM to the host machine and the forward-listen (port numbers separated by '+') is used
|
||||
for forwarding connections from the host machine to the enclave VM.
|
||||
|
||||
__ https://github.com/rust-vmm/vhost-device/tree/main/vhost-device-vsock#using-the-vsock-backend
|
||||
|
||||
$ vhost-device-vsock \
|
||||
--vm guest-cid=4,forward-cid=1,forward-listen=9001+9002,socket=/tmp/vhost4.socket
|
||||
|
||||
Now run the necessary applications on the host machine so that the nitro-enclave VM
|
||||
applications' vsock communication works. For example, the nitro-enclave VM's init
|
||||
process connects to CID 3 and sends a single byte hello heartbeat (0xB7) to let the
|
||||
parent VM know that it booted expecting a heartbeat (0xB7) response. So you must run
|
||||
a AF_VSOCK server on the host machine that listens on port 9000 and sends the heartbeat
|
||||
after it receives the heartbeat for enclave VM to boot successfully. You should run all
|
||||
the applications on the host machine that would typically be running in the parent EC2
|
||||
VM for successful communication with the enclave VM.
|
||||
|
||||
Then run the nitro-enclave VM using the following command where ``hello.eif`` is
|
||||
an EIF file you would use to spawn a real AWS nitro enclave virtual machine:
|
||||
|
||||
$ qemu-system-x86_64 -M nitro-enclave,vsock=c,id=hello-world \
|
||||
-kernel hello-world.eif -nographic -m 4G --enable-kvm -cpu host \
|
||||
-chardev socket,id=c,path=/tmp/vhost4.socket
|
||||
|
||||
In this example, the nitro-enclave VM has CID 4. If there are applications that
|
||||
connect to the enclave VM, run them on the host machine after enclave VM starts.
|
||||
You need to modify the applications to connect to CID 1 (instead of the enclave
|
||||
VM's CID) and use the forward-listen (e.g., 9001+9002) option of vhost-device-vsock
|
||||
to forward the ports they connect to.
|
||||
@@ -14,8 +14,9 @@ Board-specific documentation
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
i386/microvm
|
||||
i386/pc
|
||||
i386/microvm
|
||||
i386/nitro-enclave
|
||||
|
||||
Architectural features
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
/* Digested version of <cpuid.h> */
|
||||
|
||||
#define CPUINFO_ALWAYS (1u << 0) /* so cpuinfo is nonzero */
|
||||
#define CPUINFO_OSXSAVE (1u << 1)
|
||||
#define CPUINFO_MOVBE (1u << 2)
|
||||
#define CPUINFO_LZCNT (1u << 3)
|
||||
#define CPUINFO_POPCNT (1u << 4)
|
||||
|
||||
@@ -34,3 +34,7 @@ config REGISTER
|
||||
|
||||
config SPLIT_IRQ
|
||||
bool
|
||||
|
||||
config EIF
|
||||
bool
|
||||
depends on LIBCBOR && GNUTLS
|
||||
|
||||
+719
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* EIF (Enclave Image Format) related helpers
|
||||
*
|
||||
* Copyright (c) 2024 Dorjoy Chowdhury <dorjoychy111@gmail.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
* (at your option) any later version. See the COPYING file in the
|
||||
* top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef HW_CORE_EIF_H
|
||||
#define HW_CORE_EIF_H
|
||||
|
||||
bool read_eif_file(const char *eif_path, const char *machine_initrd,
|
||||
char **kernel_path, char **initrd_path,
|
||||
char **kernel_cmdline, uint8_t *image_sha384,
|
||||
uint8_t *bootstrap_sha384, uint8_t *app_sha384,
|
||||
uint8_t *fingerprint_sha384, bool *signature_found,
|
||||
Error **errp);
|
||||
|
||||
#endif
|
||||
|
||||
+38
-33
@@ -1001,6 +1001,39 @@ void machine_add_audiodev_property(MachineClass *mc)
|
||||
"Audiodev to use for default machine devices");
|
||||
}
|
||||
|
||||
static bool create_default_memdev(MachineState *ms, const char *path,
|
||||
Error **errp)
|
||||
{
|
||||
Object *obj;
|
||||
MachineClass *mc = MACHINE_GET_CLASS(ms);
|
||||
bool r = false;
|
||||
|
||||
obj = object_new(path ? TYPE_MEMORY_BACKEND_FILE : TYPE_MEMORY_BACKEND_RAM);
|
||||
if (path) {
|
||||
if (!object_property_set_str(obj, "mem-path", path, errp)) {
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
if (!object_property_set_int(obj, "size", ms->ram_size, errp)) {
|
||||
goto out;
|
||||
}
|
||||
object_property_add_child(object_get_objects_root(), mc->default_ram_id,
|
||||
obj);
|
||||
/* Ensure backend's memory region name is equal to mc->default_ram_id */
|
||||
if (!object_property_set_bool(obj, "x-use-canonical-path-for-ramblock-id",
|
||||
false, errp)) {
|
||||
goto out;
|
||||
}
|
||||
if (!user_creatable_complete(USER_CREATABLE(obj), errp)) {
|
||||
goto out;
|
||||
}
|
||||
r = object_property_set_link(OBJECT(ms), "memory-backend", obj, errp);
|
||||
|
||||
out:
|
||||
object_unref(obj);
|
||||
return r;
|
||||
}
|
||||
|
||||
static void machine_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
@@ -1020,6 +1053,8 @@ static void machine_class_init(ObjectClass *oc, void *data)
|
||||
*/
|
||||
mc->numa_mem_align_shift = 23;
|
||||
|
||||
mc->create_default_memdev = create_default_memdev;
|
||||
|
||||
object_class_property_add_str(oc, "kernel",
|
||||
machine_get_kernel, machine_set_kernel);
|
||||
object_class_property_set_description(oc, "kernel",
|
||||
@@ -1413,38 +1448,6 @@ MemoryRegion *machine_consume_memdev(MachineState *machine,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool create_default_memdev(MachineState *ms, const char *path, Error **errp)
|
||||
{
|
||||
Object *obj;
|
||||
MachineClass *mc = MACHINE_GET_CLASS(ms);
|
||||
bool r = false;
|
||||
|
||||
obj = object_new(path ? TYPE_MEMORY_BACKEND_FILE : TYPE_MEMORY_BACKEND_RAM);
|
||||
if (path) {
|
||||
if (!object_property_set_str(obj, "mem-path", path, errp)) {
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
if (!object_property_set_int(obj, "size", ms->ram_size, errp)) {
|
||||
goto out;
|
||||
}
|
||||
object_property_add_child(object_get_objects_root(), mc->default_ram_id,
|
||||
obj);
|
||||
/* Ensure backend's memory region name is equal to mc->default_ram_id */
|
||||
if (!object_property_set_bool(obj, "x-use-canonical-path-for-ramblock-id",
|
||||
false, errp)) {
|
||||
goto out;
|
||||
}
|
||||
if (!user_creatable_complete(USER_CREATABLE(obj), errp)) {
|
||||
goto out;
|
||||
}
|
||||
r = object_property_set_link(OBJECT(ms), "memory-backend", obj, errp);
|
||||
|
||||
out:
|
||||
object_unref(obj);
|
||||
return r;
|
||||
}
|
||||
|
||||
const char *machine_class_default_cpu_type(MachineClass *mc)
|
||||
{
|
||||
if (mc->valid_cpu_types && !mc->valid_cpu_types[1]) {
|
||||
@@ -1548,7 +1551,9 @@ void machine_run_board_init(MachineState *machine, const char *mem_path, Error *
|
||||
machine_class->default_ram_id);
|
||||
return;
|
||||
}
|
||||
if (!create_default_memdev(current_machine, mem_path, errp)) {
|
||||
|
||||
if (!machine_class->create_default_memdev(current_machine, mem_path,
|
||||
errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user