[PATCH] x86/kexec: Drop compat_mode_gdt_desc

Andrew Cooper posted 1 patch 4 days, 4 hours ago
Failed in applying to current master (apply log)
xen/arch/x86/x86_64/kexec_reloc.S | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
[PATCH] x86/kexec: Drop compat_mode_gdt_desc
Posted by Andrew Cooper 4 days, 4 hours ago
Given the need to calculate the base anyway, it's easier to do so entirely on
the stack.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <jbeulich@suse.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Teddy Astie <teddy.astie@vates.tech>
---
 xen/arch/x86/x86_64/kexec_reloc.S | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/xen/arch/x86/x86_64/kexec_reloc.S b/xen/arch/x86/x86_64/kexec_reloc.S
index ec1e4e3550e4..62e83d60a85d 100644
--- a/xen/arch/x86/x86_64/kexec_reloc.S
+++ b/xen/arch/x86/x86_64/kexec_reloc.S
@@ -114,9 +114,11 @@ FUNC(kexec_reloc)
 .L_call_32_bit:
 
         /* Load compat GDT. */
-        leaq    compat_mode_gdt(%rip), %rax
-        movq    %rax, (compat_mode_gdt_desc + 2)(%rip)
-        lgdt    compat_mode_gdt_desc(%rip)
+        lea     compat_mode_gdt(%rip), %rax
+        push    %rax
+        pushw   $.Lcompat_mode_gdt_end - 1 - compat_mode_gdt
+        lgdt    (%rsp)
+        add     $10, %rsp
 
         /* Enter compatibility mode. */
         lea     compatibility_mode(%rip), %rax
@@ -206,11 +208,6 @@ END(compatibility_mode)
         /* Separate code and data into into different cache lines */
         .balign L1_CACHE_BYTES
 
-DATA_LOCAL(compat_mode_gdt_desc, 4)
-        .word .Lcompat_mode_gdt_end - compat_mode_gdt -1
-        .quad 0x0000000000000000     /* set in call_32_bit above */
-END(compat_mode_gdt_desc)
-
 DATA_LOCAL(compat_mode_gdt, 8)
         .quad 0x0000000000000000     /* null                              */
         .quad 0x00cf93000000ffff     /* 0x0008 ring 0 data                */
-- 
2.39.5


Re: [PATCH] x86/kexec: Drop compat_mode_gdt_desc
Posted by Jan Beulich 4 days, 4 hours ago
On 30.06.2026 17:57, Andrew Cooper wrote:
> Given the need to calculate the base anyway, it's easier to do so entirely on
> the stack.
> 
> No functional change.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Since we've started using (the somewhat odd) PUSHW, perhaps not really a problem
to have another instance:
Reviewed-by: Jan Beulich <jbeulich@suse.com>

Jan
Re: [PATCH] x86/kexec: Drop compat_mode_gdt_desc
Posted by Andrew Cooper 4 days, 4 hours ago
On 30/06/2026 5:01 pm, Jan Beulich wrote:
> On 30.06.2026 17:57, Andrew Cooper wrote:
>> Given the need to calculate the base anyway, it's easier to do so entirely on
>> the stack.
>>
>> No functional change.
>>
>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Since we've started using (the somewhat odd) PUSHW, perhaps not really a problem
> to have another instance:
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Thanks.

These are the only two where it makes sense, AFAICT.  I'm not expecting
to use this trick elsewhere.

~Andrew