Skip to content

Commit 116fef6

Browse files
amlutoIngo Molnar
authored andcommitted
x86/mm/dump_pagetables: Add the EFI pagetable to the debugfs 'page_tables' directory
EFI is complicated enough that being able to view its pagetables is quite helpful. Rather than requiring users to fish it out of dmesg on an appropriately configured kernel, let users view it in debugfs as well. Signed-off-by: Andy Lutomirski <luto@kernel.org> Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-efi@vger.kernel.org Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/ba158a93f3250e6fca752cff2cfb1fcdd9f2b50c.1517414050.git.luto@kernel.org [ Fixed trivial whitespace damage and fixed missing export. ] Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent 1070730 commit 116fef6

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

arch/x86/mm/debug_pagetables.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,31 @@ static const struct file_operations ptdump_curusr_fops = {
7272
};
7373
#endif
7474

75+
#if defined(CONFIG_EFI) && defined(CONFIG_X86_64)
76+
extern pgd_t *efi_pgd;
77+
static struct dentry *pe_efi;
78+
79+
static int ptdump_show_efi(struct seq_file *m, void *v)
80+
{
81+
if (efi_pgd)
82+
ptdump_walk_pgd_level_debugfs(m, efi_pgd, false);
83+
return 0;
84+
}
85+
86+
static int ptdump_open_efi(struct inode *inode, struct file *filp)
87+
{
88+
return single_open(filp, ptdump_show_efi, NULL);
89+
}
90+
91+
static const struct file_operations ptdump_efi_fops = {
92+
.owner = THIS_MODULE,
93+
.open = ptdump_open_efi,
94+
.read = seq_read,
95+
.llseek = seq_lseek,
96+
.release = single_release,
97+
};
98+
#endif
99+
75100
static struct dentry *dir, *pe_knl, *pe_curknl;
76101

77102
static int __init pt_dump_debug_init(void)
@@ -96,6 +121,13 @@ static int __init pt_dump_debug_init(void)
96121
if (!pe_curusr)
97122
goto err;
98123
#endif
124+
125+
#if defined(CONFIG_EFI) && defined(CONFIG_X86_64)
126+
pe_efi = debugfs_create_file("efi", 0400, dir, NULL, &ptdump_efi_fops);
127+
if (!pe_efi)
128+
goto err;
129+
#endif
130+
99131
return 0;
100132
err:
101133
debugfs_remove_recursive(dir);

arch/x86/platform/efi/efi_64.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <linux/ioport.h>
2828
#include <linux/mc146818rtc.h>
2929
#include <linux/efi.h>
30+
#include <linux/export.h>
3031
#include <linux/uaccess.h>
3132
#include <linux/io.h>
3233
#include <linux/reboot.h>
@@ -190,7 +191,8 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd)
190191
early_code_mapping_set_exec(0);
191192
}
192193

193-
static pgd_t *efi_pgd;
194+
pgd_t *efi_pgd;
195+
EXPORT_SYMBOL_GPL(efi_pgd);
194196

195197
/*
196198
* We need our own copy of the higher levels of the page tables

0 commit comments

Comments
 (0)