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>
7 static struct dentry
*hwpoison_dir
;
9 static int hwpoison_inject(void *data
, u64 val
)
11 if (!capable(CAP_SYS_ADMIN
))
13 printk(KERN_INFO
"Injecting memory failure at pfn %Lx\n", val
);
14 return __memory_failure(val
, 18, 0);
17 static int hwpoison_unpoison(void *data
, u64 val
)
19 if (!capable(CAP_SYS_ADMIN
))
22 return unpoison_memory(val
);
25 DEFINE_SIMPLE_ATTRIBUTE(hwpoison_fops
, NULL
, hwpoison_inject
, "%lli\n");
26 DEFINE_SIMPLE_ATTRIBUTE(unpoison_fops
, NULL
, hwpoison_unpoison
, "%lli\n");
28 static void pfn_inject_exit(void)
31 debugfs_remove_recursive(hwpoison_dir
);
34 static int pfn_inject_init(void)
36 struct dentry
*dentry
;
38 hwpoison_dir
= debugfs_create_dir("hwpoison", NULL
);
39 if (hwpoison_dir
== NULL
)
43 * Note that the below poison/unpoison interfaces do not involve
44 * hardware status change, hence do not require hardware support.
45 * They are mainly for testing hwpoison in software level.
47 dentry
= debugfs_create_file("corrupt-pfn", 0600, hwpoison_dir
,
48 NULL
, &hwpoison_fops
);
52 dentry
= debugfs_create_file("unpoison-pfn", 0600, hwpoison_dir
,
53 NULL
, &unpoison_fops
);
63 module_init(pfn_inject_init
);
64 module_exit(pfn_inject_exit
);
65 MODULE_LICENSE("GPL");
This page took 0.043196 seconds and 6 git commands to generate.