Commit | Line | Data |
---|---|---|
8609d1b5 KC |
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 | { | |
071ac0c4 | 29 | pe = debugfs_create_file("kernel_page_tables", S_IRUSR, NULL, NULL, |
8609d1b5 KC |
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"); |