Messages in this thread | | | Date | Mon, 13 Jun 2022 23:15:03 +0000 | Subject | Re: [PATCH Part2 v5 23/45] KVM: SVM: Add KVM_SNP_INIT command | From | Ashish Kalra <> |
| |
Hello Alper,
On 6/13/22 20:58, Alper Gun wrote: > static int sev_guest_init(struct kvm *kvm, struct kvm_sev_cmd *argp) >> { >> + bool es_active = (argp->id == KVM_SEV_ES_INIT || argp->id == KVM_SEV_SNP_INIT); >> struct kvm_sev_info *sev = &to_kvm_svm(kvm)->sev_info; >> - bool es_active = argp->id == KVM_SEV_ES_INIT; >> + bool snp_active = argp->id == KVM_SEV_SNP_INIT; >> int asid, ret; >> >> if (kvm->created_vcpus) >> @@ -249,12 +269,22 @@ static int sev_guest_init(struct kvm *kvm, struct kvm_sev_cmd *argp) >> return ret; >> >> sev->es_active = es_active; >> + sev->snp_active = snp_active; >> asid = sev_asid_new(sev); >> if (asid < 0) >> goto e_no_asid; >> sev->asid = asid; >> >> - ret = sev_platform_init(&argp->error); >> + if (snp_active) { >> + ret = verify_snp_init_flags(kvm, argp); >> + if (ret) >> + goto e_free; >> + >> + ret = sev_snp_init(&argp->error); >> + } else { >> + ret = sev_platform_init(&argp->error); > After SEV INIT_EX support patches, SEV may be initialized in the platform late. > In my tests, if SEV has not been initialized in the platform yet, SNP > VMs fail with SEV_DF_FLUSH required error. I tried calling > SEV_DF_FLUSH right after the SNP platform init but this time it failed > later on the SNP launch update command with SEV_RET_INVALID_PARAM > error. Looks like there is another dependency on SEV platform > initialization. > > Calling sev_platform_init for SNP VMs fixes the problem in our tests.
Trying to get some more context for this issue.
When you say after SEV_INIT_EX support patches, SEV may be initialized in the platform late, do you mean sev_pci_init()->sev_snp_init() ... sev_platform_init() code path has still not executed on the host BSP ?
Before launching the first SNP/SEV guest launch after INIT, we need to issue SEV_CMD_DF_FLUSH command.
I assume that we will always be initially doing SNP firmware initialization with SNP_INIT command followed by sev_platform_init(), if SNP is enabled on boot CPU.
Thanks, Ashish
| |