* [PATCH] x86/debugfs: Add the EFI pagetable to the debugfs 'page_tables' directory
@ 2018-01-31 15:56 Andy Lutomirski
2018-01-31 16:03 ` Ard Biesheuvel
2018-02-13 15:31 ` [tip:x86/mm] x86/mm/dump_pagetables: " tip-bot for Andy Lutomirski
0 siblings, 2 replies; 3+ messages in thread
From: Andy Lutomirski @ 2018-01-31 15:56 UTC (permalink / raw)
To: linux-kernel, x86
Cc: linux-mm, Borislav Petkov, Ard Biesheuvel, linux-efi, Andy Lutomirski
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>
---
arch/x86/mm/debug_pagetables.c | 32 ++++++++++++++++++++++++++++++++
arch/x86/platform/efi/efi_64.c | 2 +-
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/arch/x86/mm/debug_pagetables.c b/arch/x86/mm/debug_pagetables.c
index 421f2664ffa0..9861797b1fd5 100644
--- a/arch/x86/mm/debug_pagetables.c
+++ b/arch/x86/mm/debug_pagetables.c
@@ -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)
@@ -94,8 +119,15 @@ static int __init pt_dump_debug_init(void)
pe_curusr = debugfs_create_file("current_user", 0400,
dir, NULL, &ptdump_curusr_fops);
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);
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
index 2dd15e967c3f..a9734df2c1b7 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
@@ -191,7 +191,7 @@ 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;
/*
* We need our own copy of the higher levels of the page tables
--
2.14.3
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] x86/debugfs: Add the EFI pagetable to the debugfs 'page_tables' directory
2018-01-31 15:56 [PATCH] x86/debugfs: Add the EFI pagetable to the debugfs 'page_tables' directory Andy Lutomirski
@ 2018-01-31 16:03 ` Ard Biesheuvel
2018-02-13 15:31 ` [tip:x86/mm] x86/mm/dump_pagetables: " tip-bot for Andy Lutomirski
1 sibling, 0 replies; 3+ messages in thread
From: Ard Biesheuvel @ 2018-01-31 16:03 UTC (permalink / raw)
To: Andy Lutomirski
Cc: Linux Kernel Mailing List, the arch/x86 maintainers, linux-mm,
Borislav Petkov, linux-efi
Hi Andy,
On 31 January 2018 at 15:56, Andy Lutomirski <luto@kernel.org> wrote:
> 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>
This is more x86 code than EFI code, but from my side, this looks fine
(and even though we already have a similar facility on ARM/arm64,
there doesn't seem to be much point in attempting to reuse any of its
code for this)
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
> arch/x86/mm/debug_pagetables.c | 32 ++++++++++++++++++++++++++++++++
> arch/x86/platform/efi/efi_64.c | 2 +-
> 2 files changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/mm/debug_pagetables.c b/arch/x86/mm/debug_pagetables.c
> index 421f2664ffa0..9861797b1fd5 100644
> --- a/arch/x86/mm/debug_pagetables.c
> +++ b/arch/x86/mm/debug_pagetables.c
> @@ -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)
> @@ -94,8 +119,15 @@ static int __init pt_dump_debug_init(void)
> pe_curusr = debugfs_create_file("current_user", 0400,
> dir, NULL, &ptdump_curusr_fops);
> 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);
> diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
> index 2dd15e967c3f..a9734df2c1b7 100644
> --- a/arch/x86/platform/efi/efi_64.c
> +++ b/arch/x86/platform/efi/efi_64.c
> @@ -191,7 +191,7 @@ 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;
>
> /*
> * We need our own copy of the higher levels of the page tables
> --
> 2.14.3
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [tip:x86/mm] x86/mm/dump_pagetables: Add the EFI pagetable to the debugfs 'page_tables' directory
2018-01-31 15:56 [PATCH] x86/debugfs: Add the EFI pagetable to the debugfs 'page_tables' directory Andy Lutomirski
2018-01-31 16:03 ` Ard Biesheuvel
@ 2018-02-13 15:31 ` tip-bot for Andy Lutomirski
1 sibling, 0 replies; 3+ messages in thread
From: tip-bot for Andy Lutomirski @ 2018-02-13 15:31 UTC (permalink / raw)
To: linux-tip-commits
Cc: hpa, torvalds, peterz, luto, ard.biesheuvel, tglx, linux-kernel,
mingo, bp
Commit-ID: 116fef6408599dd6ff6996235c50aa692e9b5631
Gitweb: https://git.kernel.org/tip/116fef6408599dd6ff6996235c50aa692e9b5631
Author: Andy Lutomirski <luto@kernel.org>
AuthorDate: Wed, 31 Jan 2018 07:56:22 -0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 13 Feb 2018 16:00:45 +0100
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>
---
arch/x86/mm/debug_pagetables.c | 32 ++++++++++++++++++++++++++++++++
arch/x86/platform/efi/efi_64.c | 4 +++-
2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/arch/x86/mm/debug_pagetables.c b/arch/x86/mm/debug_pagetables.c
index 421f266..51a6f92 100644
--- a/arch/x86/mm/debug_pagetables.c
+++ b/arch/x86/mm/debug_pagetables.c
@@ -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);
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
index c310a82..780460a 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
@@ -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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-02-13 15:32 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-31 15:56 [PATCH] x86/debugfs: Add the EFI pagetable to the debugfs 'page_tables' directory Andy Lutomirski
2018-01-31 16:03 ` Ard Biesheuvel
2018-02-13 15:31 ` [tip:x86/mm] x86/mm/dump_pagetables: " tip-bot for Andy Lutomirski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome