On 12/17/2024 3:37 PM, Sean Christopherson wrote: > On Tue, Dec 17, 2024, Ashish Kalra wrote: >> >> >> On 12/17/2024 10:00 AM, Dionna Amalie Glaze wrote: >>> On Mon, Dec 16, 2024 at 3:57 PM Ashish Kalra <Ashish.Kalra@xxxxxxx> wrote: >>>> >>>> From: Ashish Kalra <ashish.kalra@xxxxxxx> >>> >>>> The on-demand SEV initialization support requires a fix in QEMU to >>>> remove check for SEV initialization to be done prior to launching >>>> SEV/SEV-ES VMs. >>>> NOTE: With the above fix for QEMU, older QEMU versions will be broken >>>> with respect to launching SEV/SEV-ES VMs with the newer kernel/KVM as >>>> older QEMU versions require SEV initialization to be done before >>>> launching SEV/SEV-ES VMs. >>>> >>> >>> I don't think this is okay. I think you need to introduce a KVM >>> capability to switch over to the new way of initializing SEV VMs and >>> deprecate the old way so it doesn't need to be supported for any new >>> additions to the interface. >>> >> >> But that means KVM will need to support both mechanisms of doing SEV >> initialization - during KVM module load time and the deferred/lazy >> (on-demand) SEV INIT during VM launch. > > What's the QEMU change? Dionna is right, we can't break userspace, but maybe > there's an alternative to supporting both models. Here is the QEMU fix : (makes a SEV PLATFORM STATUS firmware call via PSP driver ioctl to check if SEV is in INIT state) diff --git a/target/i386/sev.c b/target/i386/sev.c index 1a4eb1ada6..4fa8665395 100644 --- a/target/i386/sev.c +++ b/target/i386/sev.c @@ -1503,15 +1503,6 @@ static int sev_common_kvm_init(ConfidentialGuestSupport *cgs, Error **errp) } } - if (sev_es_enabled() && !sev_snp_enabled()) { - if (!(status.flags & SEV_STATUS_FLAGS_CONFIG_ES)) { - error_setg(errp, "%s: guest policy requires SEV-ES, but " - "host SEV-ES support unavailable", - __func__); - return -1; - } - } - trace_kvm_sev_init(); switch (x86_klass->kvm_type(X86_CONFIDENTIAL_GUEST(sev_common))) { case KVM_X86_DEFAULT_VM: