On 29.11.19 10:47, Janosch Frank wrote: > When a guest has saved a ipib of type 5 and call diagnose308 with > subcode 10, we have to setup the protected processing environment via > Ultravisor calls. The calls are done by KVM and are exposed via an API. > > The following steps are necessary: > 1. Create a VM (register it with the Ultravisor) > 2. Create secure CPUs for all of our current cpus
I do wonder why KVM can't handle that when switching to the encrypted VM. Any specific reason QEMU has to be involved? I would have guessed s390_pv_vm_create() can handle that internally. KVM knows all the VCPUs. [...] > switch (reset_type) { > case S390_RESET_EXTERNAL: > case S390_RESET_REIPL: > @@ -357,6 +361,28 @@ static void s390_machine_reset(MachineState *machine) > run_on_cpu(cs, s390_do_cpu_initial_reset, RUN_ON_CPU_NULL); > run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL); > break; > + case S390_RESET_PV: /* Subcode 10 */ > + subsystem_reset(); > + s390_crypto_reset(); > + > + CPU_FOREACH(t) { > + run_on_cpu(t, s390_do_cpu_full_reset, RUN_ON_CPU_NULL); > + } > + > + /* Create SE VM */ > + s390_pv_vm_create(); > + CPU_FOREACH(t) { > + s390_pv_vcpu_create(t); > + } So, on any other reboot, the VM/CPUs won't get cleaned up? (is this really a "create" or rather a "s390_pv_vm_enable()"). The "create" terminology somehow sounds wrong to me ... > + > + /* Set SE header and unpack */ > + s390_ipl_prepare_pv_header(); > + /* Decrypt image */ > + s390_ipl_pv_unpack(); > + /* Verify integrity */ > + s390_pv_verify(); > + s390_cpu_set_state(S390_CPU_STATE_OPERATING, cpu); > + break; > default: > g_assert_not_reached(); > } > diff --git a/target/s390x/cpu_features_def.inc.h > b/target/s390x/cpu_features_def.inc.h > index 31dff0d84e..60db28351d 100644 > --- a/target/s390x/cpu_features_def.inc.h > +++ b/target/s390x/cpu_features_def.inc.h > @@ -107,6 +107,7 @@ DEF_FEAT(DEFLATE_BASE, "deflate-base", STFL, 151, > "Deflate-conversion facility ( > DEF_FEAT(VECTOR_PACKED_DECIMAL_ENH, "vxpdeh", STFL, 152, > "Vector-Packed-Decimal-Enhancement Facility") > DEF_FEAT(MSA_EXT_9, "msa9-base", STFL, 155, > "Message-security-assist-extension-9 facility (excluding subfunctions)") > DEF_FEAT(ETOKEN, "etoken", STFL, 156, "Etoken facility") > +DEF_FEAT(UNPACK, "unpack", STFL, 161, "Unpack facility") > > /* Features exposed via SCLP SCCB Byte 80 - 98 (bit numbers relative to > byte-80) */ > DEF_FEAT(SIE_GSLS, "gsls", SCLP_CONF_CHAR, 40, "SIE: > Guest-storage-limit-suppression facility") > -- Thanks, David / dhildenb