RE: [PATCH v2 2/3] x86/hyperv: Use savesegment() instead of inline asm() to save segment registers
From: Michael Kelley
Date: Tue Feb 10 2026 - 17:40:44 EST
From: Uros Bizjak <ubizjak@xxxxxxxxx> Sent: Friday, November 21, 2025 6:14 AM
>
> Use standard savesegment() utility macro to save segment registers.
Patch 1 of this series was included in the tip tree. But this patch (Patch 2) and
Patch 3 have not been picked up anywhere.
Wei Liu -- could you pick these two up in the hyperv tree?
Michael
>
> Signed-off-by: Uros Bizjak <ubizjak@xxxxxxxxx>
> Acked-by: Wei Liu <wei.liu@xxxxxxxxxx>
> Tested-by: Michael Kelley <mhklinux@xxxxxxxxxxx>
> Cc: "K. Y. Srinivasan" <kys@xxxxxxxxxxxxx>
> Cc: Haiyang Zhang <haiyangz@xxxxxxxxxxxxx>
> Cc: Dexuan Cui <decui@xxxxxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: Borislav Petkov <bp@xxxxxxxxx>
> Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
> Cc: "H. Peter Anvin" <hpa@xxxxxxxxx>
> ---
> arch/x86/hyperv/ivm.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c
> index 651771534cae..7365d8f43181 100644
> --- a/arch/x86/hyperv/ivm.c
> +++ b/arch/x86/hyperv/ivm.c
> @@ -25,6 +25,7 @@
> #include <asm/e820/api.h>
> #include <asm/desc.h>
> #include <asm/msr.h>
> +#include <asm/segment.h>
> #include <uapi/asm/vmx.h>
>
> #ifdef CONFIG_AMD_MEM_ENCRYPT
> @@ -315,16 +316,16 @@ int hv_snp_boot_ap(u32 apic_id, unsigned long start_ip,
> unsigned int cpu)
> vmsa->gdtr.base = gdtr.address;
> vmsa->gdtr.limit = gdtr.size;
>
> - asm volatile("movl %%es, %%eax;" : "=a" (vmsa->es.selector));
> + savesegment(es, vmsa->es.selector);
> hv_populate_vmcb_seg(vmsa->es, vmsa->gdtr.base);
>
> - asm volatile("movl %%cs, %%eax;" : "=a" (vmsa->cs.selector));
> + savesegment(cs, vmsa->cs.selector);
> hv_populate_vmcb_seg(vmsa->cs, vmsa->gdtr.base);
>
> - asm volatile("movl %%ss, %%eax;" : "=a" (vmsa->ss.selector));
> + savesegment(ss, vmsa->ss.selector);
> hv_populate_vmcb_seg(vmsa->ss, vmsa->gdtr.base);
>
> - asm volatile("movl %%ds, %%eax;" : "=a" (vmsa->ds.selector));
> + savesegment(ds, vmsa->ds.selector);
> hv_populate_vmcb_seg(vmsa->ds, vmsa->gdtr.base);
>
> vmsa->efer = native_read_msr(MSR_EFER);
> --
> 2.51.1