]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86/hyperv: Save segment registers directly to memory in hv_hvcrash_ctxt_save()
authorUros Bizjak <ubizjak@gmail.com>
Wed, 11 Mar 2026 10:25:58 +0000 (11:25 +0100)
committerWei Liu <wei.liu@kernel.org>
Thu, 12 Mar 2026 04:25:19 +0000 (04:25 +0000)
hv_hvcrash_ctxt_save() in arch/x86/hyperv/hv_crash.c currently saves
segment registers via a general-purpose register (%eax). Update the
code to save segment registers (cs, ss, ds, es, fs, gs) directly to
the crash context memory using movw. This avoids unnecessary use of
a general-purpose register, making the code simpler and more efficient.

The size of the corresponding object file improves as follows:

   text    data     bss     dec     hex filename
   4167     176     200    4543    11bf hv_crash-old.o
   4151     176     200    4527    11af hv_crash-new.o

No functional change occurs to the saved context contents; this is
purely a code-quality improvement.

Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: K. Y. Srinivasan <kys@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Cc: Wei Liu <wei.liu@kernel.org>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Long Li <longli@microsoft.com>
Cc: Thomas Gleixner <tglx@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Wei Liu <wei.liu@kernel.org>
arch/x86/hyperv/hv_crash.c

index fdb277bf73d8cf956cb8fc3508216bce33cff1d7..2c7ea7e70854925f8f2296f5937c5e4bbd8c8559 100644 (file)
@@ -207,12 +207,12 @@ static void hv_hvcrash_ctxt_save(void)
        asm volatile("movq %%cr2, %0" : "=a"(ctxt->cr2));
        asm volatile("movq %%cr8, %0" : "=a"(ctxt->cr8));
 
-       asm volatile("movl %%cs, %%eax" : "=a"(ctxt->cs));
-       asm volatile("movl %%ss, %%eax" : "=a"(ctxt->ss));
-       asm volatile("movl %%ds, %%eax" : "=a"(ctxt->ds));
-       asm volatile("movl %%es, %%eax" : "=a"(ctxt->es));
-       asm volatile("movl %%fs, %%eax" : "=a"(ctxt->fs));
-       asm volatile("movl %%gs, %%eax" : "=a"(ctxt->gs));
+       asm volatile("movw %%cs, %0" : "=m"(ctxt->cs));
+       asm volatile("movw %%ss, %0" : "=m"(ctxt->ss));
+       asm volatile("movw %%ds, %0" : "=m"(ctxt->ds));
+       asm volatile("movw %%es, %0" : "=m"(ctxt->es));
+       asm volatile("movw %%fs, %0" : "=m"(ctxt->fs));
+       asm volatile("movw %%gs, %0" : "=m"(ctxt->gs));
 
        native_store_gdt(&ctxt->gdtr);
        store_idt(&ctxt->idtr);