Newer 9.1 machine types will default to using the KVM_SEV_INIT2 API for creating SEV/SEV-ES going forward. However, this API results in guest measurement changes which are generally not expected for users of these older guest types and can cause disruption if they switch to a newer QEMU/kernel version. Avoid this by continuing to use the older KVM_SEV_INIT/KVM_SEV_ES_INIT APIs for older machine types. Signed-off-by: Michael Roth <michael.roth@xxxxxxx> --- hw/i386/pc.c | 5 +++++ hw/i386/pc_piix.c | 1 + hw/i386/pc_q35.c | 1 + include/hw/i386/pc.h | 3 +++ target/i386/sev.c | 1 + 5 files changed, 11 insertions(+) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index e80f02bef4..96bf90c17e 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -78,6 +78,11 @@ { "qemu64-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },\ { "athlon-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, }, +GlobalProperty pc_compat_9_0[] = { + { "sev-guest", "legacy-vm-type", "true" }, +}; +const size_t pc_compat_9_0_len = G_N_ELEMENTS(pc_compat_9_0); + GlobalProperty pc_compat_8_2[] = {}; const size_t pc_compat_8_2_len = G_N_ELEMENTS(pc_compat_8_2); diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 069414a1ac..0b7a9debab 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -528,6 +528,7 @@ static void pc_i440fx_9_0_machine_options(MachineClass *m) pc_i440fx_machine_options(m); m->alias = NULL; m->is_default = false; + compat_props_add(m->compat_props, pc_compat_9_0, pc_compat_9_0_len); } DEFINE_I440FX_MACHINE(v9_0, "pc-i440fx-9.0", NULL, diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 77d7f700a8..acb55fc787 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -380,6 +380,7 @@ static void pc_q35_9_0_machine_options(MachineClass *m) { pc_q35_machine_options(m); m->alias = NULL; + compat_props_add(m->compat_props, pc_compat_9_0, pc_compat_9_0_len); } DEFINE_Q35_MACHINE(v9_0, "pc-q35-9.0", NULL, diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index fb1d4106e5..e52290916c 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -199,6 +199,9 @@ void pc_system_parse_ovmf_flash(uint8_t *flash_ptr, size_t flash_size); /* sgx.c */ void pc_machine_init_sgx_epc(PCMachineState *pcms); +extern GlobalProperty pc_compat_9_0[]; +extern const size_t pc_compat_9_0_len; + extern GlobalProperty pc_compat_8_2[]; extern const size_t pc_compat_8_2_len; diff --git a/target/i386/sev.c b/target/i386/sev.c index f4ee317cb0..d30b68c11e 100644 --- a/target/i386/sev.c +++ b/target/i386/sev.c @@ -1417,6 +1417,7 @@ sev_guest_instance_init(Object *obj) object_property_add_uint32_ptr(obj, "reduced-phys-bits", &sev->reduced_phys_bits, OBJ_PROP_FLAG_READWRITE); + object_apply_compat_props(obj); } /* sev guest info */ -- 2.25.1