Skip to content

Commit

Permalink
x86/efi: Dump the EFI page table
Browse files Browse the repository at this point in the history
This is very useful for debugging issues with the recently added
pagetable switching code for EFI virtual mode.

Signed-off-by: Borislav Petkov <bp@suse.de>
Tested-by: Toshi Kani <toshi.kani@hp.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
  • Loading branch information
Borislav Petkov authored and Matt Fleming committed Mar 4, 2014
1 parent ef6bea6 commit 11cc851
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 0 deletions.
9 changes: 9 additions & 0 deletions arch/x86/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions arch/x86/include/asm/efi.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions arch/x86/platform/efi/efi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
1 change: 1 addition & 0 deletions arch/x86/platform/efi/efi_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
9 changes: 9 additions & 0 deletions arch/x86/platform/efi/efi_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

0 comments on commit 11cc851

Please sign in to comment.