1 #include <linux/debugfs.h> 2 #include <linux/module.h> 3 #include <linux/seq_file.h> 4 #include <asm/pgtable.h> 5 6 static int ptdump_show(struct seq_file *m, void *v) 7 { 8 ptdump_walk_pgd_level(m, NULL); 9 return 0; 10 } 11 12 static int ptdump_open(struct inode *inode, struct file *filp) 13 { 14 return single_open(filp, ptdump_show, NULL); 15 } 16 17 static 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 25 static struct dentry *pe; 26 27 static 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 37 static void __exit pt_dump_debug_exit(void) 38 { 39 debugfs_remove_recursive(pe); 40 } 41 42 module_init(pt_dump_debug_init); 43 module_exit(pt_dump_debug_exit); 44 MODULE_LICENSE("GPL"); 45 MODULE_AUTHOR("Arjan van de Ven <arjan@linux.intel.com>"); 46 MODULE_DESCRIPTION("Kernel debugging helper that dumps pagetables"); 47