1#include <linux/debugfs.h> 2#include <linux/module.h> 3#include <linux/seq_file.h> 4#include <asm/pgtable.h> 5 6static int ptdump_show(struct seq_file *m, void *v) 7{ 8 ptdump_walk_pgd_level(m, NULL); 9 return 0; 10} 11 12static int ptdump_open(struct inode *inode, struct file *filp) 13{ 14 return single_open(filp, ptdump_show, NULL); 15} 16 17static const struct file_operations ptdump_fops = { 18 .owner = THIS_MODULE, 19 .open = ptdump_open, 20 .read = seq_read, 21 .llseek = seq_lseek, 22 .release = single_release, 23}; 24 25static struct dentry *pe; 26 27static int __init pt_dump_debug_init(void) 28{ 29 pe = debugfs_create_file("kernel_page_tables", S_IRUSR, NULL, NULL, 30 &ptdump_fops); 31 if (!pe) 32 return -ENOMEM; 33 34 return 0; 35} 36 37static void __exit pt_dump_debug_exit(void) 38{ 39 debugfs_remove_recursive(pe); 40} 41 42module_init(pt_dump_debug_init); 43module_exit(pt_dump_debug_exit); 44MODULE_LICENSE("GPL"); 45MODULE_AUTHOR("Arjan van de Ven <arjan@linux.intel.com>"); 46MODULE_DESCRIPTION("Kernel debugging helper that dumps pagetables"); 47