On Thu, 14 Jan 2021 10:58:06 +1100 David Gibson <david@xxxxxxxxxxxxxxxxxxxxx> wrote: > While we've abstracted some (potential) differences between mechanisms for > securing guest memory, the initialization is still specific to SEV. Given > that, move it into x86's kvm_arch_init() code, rather than the generic > kvm_init() code. > > Signed-off-by: David Gibson <david@xxxxxxxxxxxxxxxxxxxxx> > --- > accel/kvm/kvm-all.c | 14 -------------- > accel/kvm/sev-stub.c | 4 ++-- > target/i386/kvm/kvm.c | 12 ++++++++++++ > target/i386/sev.c | 7 ++++++- > 4 files changed, 20 insertions(+), 17 deletions(-) > (...) > @@ -2135,6 +2136,17 @@ int kvm_arch_init(MachineState *ms, KVMState *s) > uint64_t shadow_mem; > int ret; > struct utsname utsname; > + Error *local_err = NULL; > + > + /* > + * if memory encryption object is specified then initialize the > + * memory encryption context (no-op otherwise) > + */ > + ret = sev_kvm_init(ms->cgs, &local_err); Maybe still leave a comment here, as the code will still need to be modified to handle non-SEV x86 mechanisms? > + if (ret < 0) { > + error_report_err(local_err); > + return ret; > + } > > if (!kvm_check_extension(s, KVM_CAP_IRQ_ROUTING)) { > error_report("kvm: KVM_CAP_IRQ_ROUTING not supported by KVM"); > diff --git a/target/i386/sev.c b/target/i386/sev.c > index 3d94635397..aa79cacabe 100644 > --- a/target/i386/sev.c > +++ b/target/i386/sev.c > @@ -664,13 +664,18 @@ sev_vm_state_change(void *opaque, int running, RunState state) > > int sev_kvm_init(ConfidentialGuestSupport *cgs, Error **errp) > { > - SevGuestState *sev = SEV_GUEST(cgs); > + SevGuestState *sev > + = (SevGuestState *)object_dynamic_cast(OBJECT(cgs), TYPE_SEV_GUEST); This looks a bit ugly; maybe we want the generic code to generate a separate version of the cast macro that doesn't assert? Just cosmetics, though. > char *devname; > int ret, fw_error; > uint32_t ebx; > uint32_t host_cbitpos; > struct sev_user_data_status status = {}; > > + if (!sev) { > + return 0; > + } > + > ret = ram_block_discard_disable(true); > if (ret) { > error_report("%s: cannot disable RAM discard", __func__); Reviewed-by: Cornelia Huck <cohuck@xxxxxxxxxx>