On Thu, Apr 15, 2021 at 8:52 AM Ashish Kalra <Ashish.Kalra@xxxxxxx> wrote: > > From: Ashish Kalra <ashish.kalra@xxxxxxx> > > The series add support for AMD SEV guest live migration commands. To protect the > confidentiality of an SEV protected guest memory while in transit we need to > use the SEV commands defined in SEV API spec [1]. > > SEV guest VMs have the concept of private and shared memory. Private memory > is encrypted with the guest-specific key, while shared memory may be encrypted > with hypervisor key. The commands provided by the SEV FW are meant to be used > for the private memory only. The patch series introduces a new hypercall. > The guest OS can use this hypercall to notify the page encryption status. > If the page is encrypted with guest specific-key then we use SEV command during > the migration. If page is not encrypted then fallback to default. > > The patch uses the KVM_EXIT_HYPERCALL exitcode and hypercall to > userspace exit functionality as a common interface from the guest back to the > VMM and passing on the guest shared/unencrypted page information to the > userspace VMM/Qemu. Qemu can consult this information during migration to know > whether the page is encrypted. > > This section descibes how the SEV live migration feature is negotiated > between the host and guest, the host indicates this feature support via > KVM_FEATURE_CPUID. The guest firmware (OVMF) detects this feature and > sets a UEFI enviroment variable indicating OVMF support for live > migration, the guest kernel also detects the host support for this > feature via cpuid and in case of an EFI boot verifies if OVMF also > supports this feature by getting the UEFI enviroment variable and if it > set then enables live migration feature on host by writing to a custom > MSR, if not booted under EFI, then it simply enables the feature by > again writing to the custom MSR. The MSR is also handled by the > userspace VMM/Qemu. > > A branch containing these patches is available here: > https://github.com/AMDESE/linux/tree/sev-migration-v13 > > [1] https://developer.amd.com/wp-content/resources/55766.PDF > > Changes since v12: > - Reset page encryption status during early boot instead of just > before the kexec to avoid SMP races during kvm_pv_guest_cpu_reboot(). Does this series need to disable the MSR during kvm_pv_guest_cpu_reboot()? I _think_ going into blackout during the window after restart, but before the MSR is explicitly reenabled, would cause corruption. The historical shared pages could be re-allocated as non-shared pages during restart. Steve