Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11cc8512 authored by Borislav Petkov's avatar Borislav Petkov Committed by Matt Fleming
Browse files

x86/efi: Dump the EFI page table



This is very useful for debugging issues with the recently added
pagetable switching code for EFI virtual mode.

Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Tested-by: default avatarToshi Kani <toshi.kani@hp.com>
Signed-off-by: default avatarMatt Fleming <matt.fleming@intel.com>
parent ef6bea6d
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -81,6 +81,15 @@ config X86_PTDUMP
	  kernel.
	  If in doubt, say "N"

config EFI_PGT_DUMP
	bool "Dump the EFI pagetable"
	depends on EFI && X86_PTDUMP
	---help---
	  Enable this if you want to dump the EFI page table before
	  enabling virtual mode. This can be used to debug miscellaneous
	  issues with the mapping of the EFI runtime regions into that
	  table.

config DEBUG_RODATA
	bool "Write protect kernel read-only data structures"
	default y
+1 −0
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ extern void efi_setup_page_tables(void);
extern void __init old_map_region(efi_memory_desc_t *md);
extern void __init runtime_code_page_mkexec(void);
extern void __init efi_runtime_mkexec(void);
extern void __init efi_dump_pagetable(void);

struct efi_setup_data {
	u64 fw_vendor;
+1 −0
Original line number Diff line number Diff line
@@ -1021,6 +1021,7 @@ void __init efi_enter_virtual_mode(void)

	efi_setup_page_tables();
	efi_sync_low_kernel_mappings();
	efi_dump_pagetable();

	if (!efi_setup) {
		status = phys_efi_set_virtual_address_map(
+1 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ static unsigned long efi_rt_eflags;

void efi_sync_low_kernel_mappings(void) {}
void efi_setup_page_tables(void) {}
void __init efi_dump_pagetable(void) {}

void __init efi_map_region(efi_memory_desc_t *md)
{
+9 −0
Original line number Diff line number Diff line
@@ -242,3 +242,12 @@ void __init efi_runtime_mkexec(void)
	if (__supported_pte_mask & _PAGE_NX)
		runtime_code_page_mkexec();
}

void __init efi_dump_pagetable(void)
{
#ifdef CONFIG_EFI_PGT_DUMP
	pgd_t *pgd = (pgd_t *)__va(real_mode_header->trampoline_pgd);

	ptdump_walk_pgd_level(NULL, pgd);
#endif
}