On Fri, Apr 16, 2021 at 02:43:48PM -0700, Steve Rutherford wrote: > 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://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FAMDESE%2Flinux%2Ftree%2Fsev-migration-v13&data=04%7C01%7CAshish.Kalra%40amd.com%7C7bee6d5c907b46d0998508d90120ce2d%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637542063133830260%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=FkKrciL41GDNyNDqrPMVblRa%2FaReogW4OzhbYaSYs04%3D&reserved=0 > > > > [1] https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdeveloper.amd.com%2Fwp-content%2Fresources%2F55766.PDF&data=04%7C01%7CAshish.Kalra%40amd.com%7C7bee6d5c907b46d0998508d90120ce2d%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637542063133830260%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=%2FLFBR9ean0acMmR8WTLUHZsAynYPRAa7%2FeZEVVdpCo8%3D&reserved=0 > > > > 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()? > Yes, i think that will make sense, it will be similar to the first time VM boot where the MSR will be disabled till it is enabled at early kernel boot. I will add this to the current patch series. Thanks, Ashish > 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