From: David Woodhouse <d...@amazon.co.uk>

Reduce the window during which exceptions are unhandled, by leaving the
GDT/IDT in place all the way into the relocate_kernel() function, until
the moment that %cr3 gets replaced.

Signed-off-by: David Woodhouse <d...@amazon.co.uk>
---
 arch/x86/kernel/machine_kexec_64.c   | 10 ++--------
 arch/x86/kernel/relocate_kernel_64.S |  9 +++++++--
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/arch/x86/kernel/machine_kexec_64.c 
b/arch/x86/kernel/machine_kexec_64.c
index ecb0da54abd1..949c9e4bfad2 100644
--- a/arch/x86/kernel/machine_kexec_64.c
+++ b/arch/x86/kernel/machine_kexec_64.c
@@ -434,16 +434,10 @@ void __nocfi machine_kexec(struct kimage *image)
         * with from a table in memory.  At no other time is the
         * descriptor table in memory accessed.
         *
-        * I take advantage of this here by force loading the
-        * segments, before I zap the gdt with an invalid value.
+        * Take advantage of this here by force loading the segments,
+        * before the GDT is zapped with an invalid value.
         */
        load_segments();
-       /*
-        * The gdt & idt are now invalid.
-        * If you want to load them you must set up your own idt & gdt.
-        */
-       native_idt_invalidate();
-       native_gdt_invalidate();
 
        /* now call it */
        image->start = relocate_kernel_ptr((unsigned long)image->head,
diff --git a/arch/x86/kernel/relocate_kernel_64.S 
b/arch/x86/kernel/relocate_kernel_64.S
index 8808cfca6322..3062cb3efc44 100644
--- a/arch/x86/kernel/relocate_kernel_64.S
+++ b/arch/x86/kernel/relocate_kernel_64.S
@@ -79,8 +79,13 @@ SYM_CODE_START_NOALIGN(relocate_kernel)
        pushq %r15
        pushf
 
-       /* zero out flags, and disable interrupts */
-       pushq $0
+       /* Invalidate GDT/IDT, zero out flags */
+       pushq   $0
+       pushq   $0
+
+       lidt    (%rsp)
+       lgdt    (%rsp)
+       addq    $8, %rsp
        popfq
 
        /* Switch to the identity mapped page tables */
-- 
2.48.1


Reply via email to