forked from Minki/linux
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>
This commit is contained in:
parent
1070730c1a
commit
116fef6408
@ -72,6 +72,31 @@ static const struct file_operations ptdump_curusr_fops = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_EFI) && defined(CONFIG_X86_64)
|
||||
extern pgd_t *efi_pgd;
|
||||
static struct dentry *pe_efi;
|
||||
|
||||
static int ptdump_show_efi(struct seq_file *m, void *v)
|
||||
{
|
||||
if (efi_pgd)
|
||||
ptdump_walk_pgd_level_debugfs(m, efi_pgd, false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ptdump_open_efi(struct inode *inode, struct file *filp)
|
||||
{
|
||||
return single_open(filp, ptdump_show_efi, NULL);
|
||||
}
|
||||
|
||||
static const struct file_operations ptdump_efi_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = ptdump_open_efi,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct dentry *dir, *pe_knl, *pe_curknl;
|
||||
|
||||
static int __init pt_dump_debug_init(void)
|
||||
@ -96,6 +121,13 @@ static int __init pt_dump_debug_init(void)
|
||||
if (!pe_curusr)
|
||||
goto err;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_EFI) && defined(CONFIG_X86_64)
|
||||
pe_efi = debugfs_create_file("efi", 0400, dir, NULL, &ptdump_efi_fops);
|
||||
if (!pe_efi)
|
||||
goto err;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
err:
|
||||
debugfs_remove_recursive(dir);
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/mc146818rtc.h>
|
||||
#include <linux/efi.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/reboot.h>
|
||||
@ -190,7 +191,8 @@ void __init efi_call_phys_epilog(pgd_t *save_pgd)
|
||||
early_code_mapping_set_exec(0);
|
||||
}
|
||||
|
||||
static pgd_t *efi_pgd;
|
||||
pgd_t *efi_pgd;
|
||||
EXPORT_SYMBOL_GPL(efi_pgd);
|
||||
|
||||
/*
|
||||
* We need our own copy of the higher levels of the page tables
|
||||
|
Loading…
Reference in New Issue
Block a user