On 05/09/2021 17:05, Brijesh Singh wrote: > > On 9/5/21 4:19 AM, Dov Murik wrote: >> >> On 27/08/2021 1:26, Michael Roth wrote: >>> From: Brijesh Singh <brijesh.singh@xxxxxxx> >>> >>> When SEV-SNP is enabled, the KVM_SNP_INIT command is used to initialize >>> the platform. The command checks whether SNP is enabled in the KVM, if >>> enabled then it allocates a new ASID from the SNP pool and calls the >>> firmware to initialize the all the resources. >>> >> >> From the KVM code ("[PATCH Part2 v5 24/45] KVM: SVM: Add >> KVM_SEV_SNP_LAUNCH_START command") it seems that KVM_SNP_INIT does *not* >> allocate the ASID; actually this is done in KVM_SEV_SNP_LAUNCH_START. > > Actually, the KVM_SNP_INIT does allocate the ASID. If you look at the > driver code then in switch state, the SNP_INIT fallthrough to SEV_INIT > which will call sev_guest_init(). The sev_guest_init() allocates a new > ASID. > https://github.com/AMDESE/linux/blob/bb9ba49cd9b749d5551aae295c091d8757153dd7/arch/x86/kvm/svm/sev.c#L255 > > The LAUNCH_START simply binds the ASID to a guest. OK thank you for clearing this up. So the kernel is choosing the new ASID during the KVM_SNP_INIT ioctl, but doesn't "tell" the firmware about it. Then later in SNP_LAUNCH_START that integer (saved in the kernel sev structure) is given to the firmware as an argument of the SNP_LAUNCH_START (binding?). Is this description correct? -Dov