mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
* 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----- 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:
commit
c94bee4cd6
84 changed files with 4219 additions and 350 deletions
|
@ -314,6 +314,8 @@ struct MachineClass {
|
|||
int64_t (*get_default_cpu_node_id)(const MachineState *ms, int idx);
|
||||
ram_addr_t (*fixup_ram_size)(ram_addr_t size);
|
||||
uint64_t smbios_memory_device_size;
|
||||
bool (*create_default_memdev)(MachineState *ms, const char *path,
|
||||
Error **errp);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -78,6 +78,8 @@ struct MicrovmMachineClass {
|
|||
X86MachineClass parent;
|
||||
HotplugHandler *(*orig_hotplug_handler)(MachineState *machine,
|
||||
DeviceState *dev);
|
||||
void (*x86_load_linux)(X86MachineState *x86ms, FWCfgState *fw_cfg,
|
||||
int acpi_data_size, bool pvh_enabled);
|
||||
};
|
||||
|
||||
struct MicrovmMachineState {
|
||||
|
|
62
include/hw/i386/nitro_enclave.h
Normal file
62
include/hw/i386/nitro_enclave.h
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* AWS nitro-enclave machine
|
||||
*
|
||||
* 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_I386_NITRO_ENCLAVE_H
|
||||
#define HW_I386_NITRO_ENCLAVE_H
|
||||
|
||||
#include "crypto/hash.h"
|
||||
#include "hw/i386/microvm.h"
|
||||
#include "qom/object.h"
|
||||
#include "hw/virtio/virtio-nsm.h"
|
||||
|
||||
/* Machine type options */
|
||||
#define NITRO_ENCLAVE_VSOCK_CHARDEV_ID "vsock"
|
||||
#define NITRO_ENCLAVE_ID "id"
|
||||
#define NITRO_ENCLAVE_PARENT_ROLE "parent-role"
|
||||
#define NITRO_ENCLAVE_PARENT_ID "parent-id"
|
||||
|
||||
struct NitroEnclaveMachineClass {
|
||||
MicrovmMachineClass parent;
|
||||
|
||||
void (*parent_init)(MachineState *state);
|
||||
void (*parent_reset)(MachineState *machine, ResetType type);
|
||||
};
|
||||
|
||||
struct NitroEnclaveMachineState {
|
||||
MicrovmMachineState parent;
|
||||
|
||||
/* Machine type options */
|
||||
char *vsock;
|
||||
/* Enclave identifier */
|
||||
char *id;
|
||||
/* Parent instance IAM role ARN */
|
||||
char *parent_role;
|
||||
/* Parent instance identifier */
|
||||
char *parent_id;
|
||||
|
||||
/* Machine state */
|
||||
VirtIONSM *vnsm;
|
||||
|
||||
/* kernel + ramdisks + cmdline sha384 hash */
|
||||
uint8_t image_sha384[QCRYPTO_HASH_DIGEST_LEN_SHA384];
|
||||
/* kernel + boot ramdisk + cmdline sha384 hash */
|
||||
uint8_t bootstrap_sha384[QCRYPTO_HASH_DIGEST_LEN_SHA384];
|
||||
/* application ramdisk(s) hash */
|
||||
uint8_t app_sha384[QCRYPTO_HASH_DIGEST_LEN_SHA384];
|
||||
/* certificate fingerprint hash */
|
||||
uint8_t fingerprint_sha384[QCRYPTO_HASH_DIGEST_LEN_SHA384];
|
||||
bool signature_found;
|
||||
};
|
||||
|
||||
#define TYPE_NITRO_ENCLAVE_MACHINE MACHINE_TYPE_NAME("nitro-enclave")
|
||||
OBJECT_DECLARE_TYPE(NitroEnclaveMachineState, NitroEnclaveMachineClass,
|
||||
NITRO_ENCLAVE_MACHINE)
|
||||
|
||||
#endif
|
45
include/hw/virtio/cbor-helpers.h
Normal file
45
include/hw/virtio/cbor-helpers.h
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* QEMU CBOR 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 QEMU_VIRTIO_CBOR_HELPERS_H
|
||||
#define QEMU_VIRTIO_CBOR_HELPERS_H
|
||||
|
||||
#include <cbor.h>
|
||||
|
||||
bool qemu_cbor_map_add(cbor_item_t *map, cbor_item_t *key, cbor_item_t *value);
|
||||
|
||||
bool qemu_cbor_array_push(cbor_item_t *array, cbor_item_t *value);
|
||||
|
||||
bool qemu_cbor_add_bool_to_map(cbor_item_t *map, const char *key, bool value);
|
||||
|
||||
bool qemu_cbor_add_uint8_to_map(cbor_item_t *map, const char *key,
|
||||
uint8_t value);
|
||||
|
||||
bool qemu_cbor_add_map_to_map(cbor_item_t *map, const char *key,
|
||||
size_t nested_map_size,
|
||||
cbor_item_t **nested_map);
|
||||
|
||||
bool qemu_cbor_add_bytestring_to_map(cbor_item_t *map, const char *key,
|
||||
uint8_t *arr, size_t len);
|
||||
|
||||
bool qemu_cbor_add_null_to_map(cbor_item_t *map, const char *key);
|
||||
|
||||
bool qemu_cbor_add_string_to_map(cbor_item_t *map, const char *key,
|
||||
const char *value);
|
||||
|
||||
bool qemu_cbor_add_uint8_array_to_map(cbor_item_t *map, const char *key,
|
||||
uint8_t *arr, size_t len);
|
||||
|
||||
bool qemu_cbor_add_uint8_key_bytestring_to_map(cbor_item_t *map, uint8_t key,
|
||||
uint8_t *buf, size_t len);
|
||||
|
||||
bool qemu_cbor_add_uint64_to_map(cbor_item_t *map, const char *key,
|
||||
uint64_t value);
|
||||
#endif
|
49
include/hw/virtio/virtio-nsm.h
Normal file
49
include/hw/virtio/virtio-nsm.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* AWS Nitro Secure Module (NSM) device
|
||||
*
|
||||
* 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 QEMU_VIRTIO_NSM_H
|
||||
#define QEMU_VIRTIO_NSM_H
|
||||
|
||||
#include "crypto/hash.h"
|
||||
#include "hw/virtio/virtio.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
#define NSM_MAX_PCRS 32
|
||||
|
||||
#define TYPE_VIRTIO_NSM "virtio-nsm-device"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(VirtIONSM, VIRTIO_NSM)
|
||||
#define VIRTIO_NSM_GET_PARENT_CLASS(obj) \
|
||||
OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_NSM)
|
||||
|
||||
struct PCRInfo {
|
||||
bool locked;
|
||||
uint8_t data[QCRYPTO_HASH_DIGEST_LEN_SHA384];
|
||||
};
|
||||
|
||||
struct VirtIONSM {
|
||||
VirtIODevice parent_obj;
|
||||
|
||||
/* Only one vq - guest puts request and response buffers on it */
|
||||
VirtQueue *vq;
|
||||
|
||||
/* NSM State */
|
||||
uint16_t max_pcrs;
|
||||
struct PCRInfo pcrs[NSM_MAX_PCRS];
|
||||
char *digest;
|
||||
char *module_id;
|
||||
uint8_t version_major;
|
||||
uint8_t version_minor;
|
||||
uint8_t version_patch;
|
||||
|
||||
bool (*extend_pcr)(VirtIONSM *vnsm, int ind, uint8_t *data, uint16_t len);
|
||||
void (*lock_pcr)(VirtIONSM *vnsm, int ind);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -313,6 +313,15 @@ static inline int ctpop8(uint8_t val)
|
|||
return __builtin_popcount(val);
|
||||
}
|
||||
|
||||
/*
|
||||
* parity8 - return the parity (1 = odd) of an 8-bit value.
|
||||
* @val: The value to search
|
||||
*/
|
||||
static inline int parity8(uint8_t val)
|
||||
{
|
||||
return __builtin_parity(val);
|
||||
}
|
||||
|
||||
/**
|
||||
* ctpop16 - count the population of one bits in a 16-bit value.
|
||||
* @val: The value to search
|
||||
|
|
|
@ -2032,14 +2032,6 @@ int object_child_foreach_recursive(Object *obj,
|
|||
*/
|
||||
Object *container_get(Object *root, const char *path);
|
||||
|
||||
/**
|
||||
* object_type_get_instance_size:
|
||||
* @typename: Name of the Type whose instance_size is required
|
||||
*
|
||||
* Returns the instance_size of the given @typename.
|
||||
*/
|
||||
size_t object_type_get_instance_size(const char *typename);
|
||||
|
||||
/**
|
||||
* object_property_help:
|
||||
* @name: the name of the property
|
||||
|
|
|
@ -39,6 +39,8 @@ OBJECT_DECLARE_TYPE(HostMemoryBackend, HostMemoryBackendClass,
|
|||
*/
|
||||
#define TYPE_MEMORY_BACKEND_FILE "memory-backend-file"
|
||||
|
||||
#define TYPE_MEMORY_BACKEND_MEMFD "memory-backend-memfd"
|
||||
|
||||
|
||||
/**
|
||||
* HostMemoryBackendClass:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue