arch/x86/kernel/acpi/madt_playdead.S

Source file repositories/reference/linux-study-clean/arch/x86/kernel/acpi/madt_playdead.S

File Facts

System
Linux kernel
Corpus path
arch/x86/kernel/acpi/madt_playdead.S
Extension
.S
Size
691 bytes
Lines
30
Domain
Architecture Layer
Bucket
arch/x86
Inferred role
Architecture Layer: arch/x86
Status
atlas-only

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

#include <linux/linkage.h>
#include <asm/nospec-branch.h>
#include <asm/page_types.h>
#include <asm/processor-flags.h>

	.text
	.align PAGE_SIZE

/*
 * asm_acpi_mp_play_dead() - Hand over control of the CPU to the BIOS
 *
 * rdi: Address of the ACPI MADT MPWK ResetVector
 * rsi: PGD of the identity mapping
 */
SYM_FUNC_START(asm_acpi_mp_play_dead)
	ANNOTATE_NOENDBR
	/* Turn off global entries. Following CR3 write will flush them. */
	movq	%cr4, %rdx
	andq	$~(X86_CR4_PGE), %rdx
	movq	%rdx, %cr4

	/* Switch to identity mapping */
	movq	%rsi, %cr3

	/* Jump to reset vector */
	ANNOTATE_RETPOLINE_SAFE
	jmp	*%rdi
SYM_FUNC_END(asm_acpi_mp_play_dead)

Annotation

Implementation Notes