]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - mm/hwpoison-inject.c
page allocator: Do not allow interrupts to use ALLOC_HARDER
[mirror_ubuntu-bionic-kernel.git] / mm / hwpoison-inject.c
1 /* Inject a hwpoison memory failure on a arbitary pfn */
2 #include <linux/module.h>
3 #include <linux/debugfs.h>
4 #include <linux/kernel.h>
5 #include <linux/mm.h>
6
7 static struct dentry *hwpoison_dir, *corrupt_pfn;
8
9 static int hwpoison_inject(void *data, u64 val)
10 {
11 if (!capable(CAP_SYS_ADMIN))
12 return -EPERM;
13 printk(KERN_INFO "Injecting memory failure at pfn %Lx\n", val);
14 return __memory_failure(val, 18, 0);
15 }
16
17 DEFINE_SIMPLE_ATTRIBUTE(hwpoison_fops, NULL, hwpoison_inject, "%lli\n");
18
19 static void pfn_inject_exit(void)
20 {
21 if (hwpoison_dir)
22 debugfs_remove_recursive(hwpoison_dir);
23 }
24
25 static int pfn_inject_init(void)
26 {
27 hwpoison_dir = debugfs_create_dir("hwpoison", NULL);
28 if (hwpoison_dir == NULL)
29 return -ENOMEM;
30 corrupt_pfn = debugfs_create_file("corrupt-pfn", 0600, hwpoison_dir,
31 NULL, &hwpoison_fops);
32 if (corrupt_pfn == NULL) {
33 pfn_inject_exit();
34 return -ENOMEM;
35 }
36 return 0;
37 }
38
39 module_init(pfn_inject_init);
40 module_exit(pfn_inject_exit);
41 MODULE_LICENSE("GPL");