mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 02:09:42 +00:00
![Greg Kroah-Hartman](/assets/img/avatar_default.png)
When calling debugfs functions, there is no need to ever check the return value. The function can work or not, but the code logic should never do something different based on this. Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Andy Lutomirski <luto@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: x86@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
82 lines
1.9 KiB
C
82 lines
1.9 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
#include <linux/debugfs.h>
|
|
#include <linux/efi.h>
|
|
#include <linux/module.h>
|
|
#include <linux/seq_file.h>
|
|
#include <asm/pgtable.h>
|
|
|
|
static int ptdump_show(struct seq_file *m, void *v)
|
|
{
|
|
ptdump_walk_pgd_level_debugfs(m, NULL, false);
|
|
return 0;
|
|
}
|
|
|
|
DEFINE_SHOW_ATTRIBUTE(ptdump);
|
|
|
|
static int ptdump_curknl_show(struct seq_file *m, void *v)
|
|
{
|
|
if (current->mm->pgd) {
|
|
down_read(¤t->mm->mmap_sem);
|
|
ptdump_walk_pgd_level_debugfs(m, current->mm->pgd, false);
|
|
up_read(¤t->mm->mmap_sem);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
DEFINE_SHOW_ATTRIBUTE(ptdump_curknl);
|
|
|
|
#ifdef CONFIG_PAGE_TABLE_ISOLATION
|
|
static int ptdump_curusr_show(struct seq_file *m, void *v)
|
|
{
|
|
if (current->mm->pgd) {
|
|
down_read(¤t->mm->mmap_sem);
|
|
ptdump_walk_pgd_level_debugfs(m, current->mm->pgd, true);
|
|
up_read(¤t->mm->mmap_sem);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
DEFINE_SHOW_ATTRIBUTE(ptdump_curusr);
|
|
#endif
|
|
|
|
#if defined(CONFIG_EFI) && defined(CONFIG_X86_64)
|
|
static int ptdump_efi_show(struct seq_file *m, void *v)
|
|
{
|
|
if (efi_mm.pgd)
|
|
ptdump_walk_pgd_level_debugfs(m, efi_mm.pgd, false);
|
|
return 0;
|
|
}
|
|
|
|
DEFINE_SHOW_ATTRIBUTE(ptdump_efi);
|
|
#endif
|
|
|
|
static struct dentry *dir;
|
|
|
|
static int __init pt_dump_debug_init(void)
|
|
{
|
|
dir = debugfs_create_dir("page_tables", NULL);
|
|
|
|
debugfs_create_file("kernel", 0400, dir, NULL, &ptdump_fops);
|
|
debugfs_create_file("current_kernel", 0400, dir, NULL,
|
|
&ptdump_curknl_fops);
|
|
|
|
#ifdef CONFIG_PAGE_TABLE_ISOLATION
|
|
debugfs_create_file("current_user", 0400, dir, NULL,
|
|
&ptdump_curusr_fops);
|
|
#endif
|
|
#if defined(CONFIG_EFI) && defined(CONFIG_X86_64)
|
|
debugfs_create_file("efi", 0400, dir, NULL, &ptdump_efi_fops);
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
static void __exit pt_dump_debug_exit(void)
|
|
{
|
|
debugfs_remove_recursive(dir);
|
|
}
|
|
|
|
module_init(pt_dump_debug_init);
|
|
module_exit(pt_dump_debug_exit);
|
|
MODULE_LICENSE("GPL");
|
|
MODULE_AUTHOR("Arjan van de Ven <arjan@linux.intel.com>");
|
|
MODULE_DESCRIPTION("Kernel debugging helper that dumps pagetables");
|