On Mon, May 05, 2025, Pratik R. Sampat wrote: > On 5/5/2025 6:15 PM, Sean Christopherson wrote: > > On Mon, May 05, 2025, Pratik R. Sampat wrote: > > Argh, now I remember the issue. But _sev_platform_init_locked() returns > > '0' if > > psp_init_on_probe is true, and I don't see how deferring > > __sev_snp_init_locked() > > will magically make it succeed the second time around. > > > > So shouldn't the KVM code be this? > > > > diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c > > index e0f446922a6e..dd04f979357d 100644 > > --- a/arch/x86/kvm/svm/sev.c > > +++ b/arch/x86/kvm/svm/sev.c > > @@ -3038,6 +3038,14 @@ void __init sev_hardware_setup(void) > > sev_snp_supported = sev_snp_enabled && > > cc_platform_has(CC_ATTR_HOST_SEV_SNP); > > > > out: > > + if (sev_enabled) { > > + init_args.probe = true; > > + if (sev_platform_init(&init_args)) > > + sev_supported = sev_es_supported = > > sev_snp_supported = false; > > + else > > + sev_snp_supported &= sev_is_snp_initialized(); > > + } > > + > > if (boot_cpu_has(X86_FEATURE_SEV)) > > pr_info("SEV %s (ASIDs %u - %u)\n", > > sev_supported ? min_sev_asid <= max_sev_asid ? > > "enabled" : > > @@ -3067,12 +3075,6 @@ void __init sev_hardware_setup(void) > > > > if (!sev_enabled) > > return; > > - > > - /* > > - * Do both SNP and SEV initialization at KVM module load. > > - */ > > - init_args.probe = true; > > - sev_platform_init(&init_args); > > } > > > > void sev_hardware_unsetup(void) > > -- > > > > I agree with this approach. One thing maybe to consider further is to also > call > into SEV_platform_status() to check for init so that SEV/SEV-ES is not > penalized and disabled for SNP's failures. Another approach could be to break > up the SEV and SNP init setup so that we can spare a couple of platform calls > in the process?
Nah, SNP initialization failure should be a rare occurence, I don't want to make the "normal" flow more complex just to handle something that should never happen in practice.