x86/kexec: Fix and expand comments for kexec_reloc()

The order of shutdown is delicate.  Explain things a little better.

Fix two comments about leaving Long Mode.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Release-Acked-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
This commit is contained in:
Andrew Cooper committed 2026-06-23 19:15:51 +01:00
1 parent ad9c7d86c9
commit 5cdae3c505
1 file changed
+19 -4
+19 -4
View File
@@ -27,6 +27,14 @@
.section .text.kexec, "ax", @progbits
.code64
/*
* kexec_reloc() is entered in it's natural position within Xen.
*
* A copy of .text.kexec is identity mapped at %rdi within the
* pagetables in %rsi. Xen's .text is mapped into %rsi at it's high
* alias allowing to pivot, but most other things including the stacks
* are not mapped.
*/
FUNC(kexec_reloc, PAGE_SIZE)
/* %rdi - code page maddr */
/* %rsi - page table maddr */
@@ -36,10 +44,17 @@ FUNC(kexec_reloc, PAGE_SIZE)
movq %rcx, %rbp
/* Setup stack. */
/*
* Move to the identity mapped stack.
*
* Note this mapping doesn't exist until the pagetable switch.
*/
leaq (.Lreloc_stack_base - kexec_reloc)(%rdi), %rsp
/* Load reloc page table. */
/*
* Move to the relocation pagetables. Xen's .text is mapped allowing
* the pivot, but very little else is.
*/
movq %rsi, %cr3
/* Jump to identity mapped code. */
@@ -153,12 +168,12 @@ FUNC_LOCAL(compatibility_mode)
movl %eax, %gs
movl %eax, %ss
/* Disable paging and therefore leave 64 bit mode. */
/* Disable paging and therefore leave long mode. */
movl %cr0, %eax
andl $~X86_CR0_PG, %eax
movl %eax, %cr0
/* Disable long mode */
/* Clear EFER.LME */
movl $MSR_EFER, %ecx
rdmsr
andl $~EFER_LME, %eax
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.