]>
Commit | Line | Data |
---|---|---|
c9d221f8 AM |
1 | #include <linux/kernel.h> |
2 | #include <linux/cpu.h> | |
3 | #include <linux/module.h> | |
4 | #include <linux/notifier.h> | |
5 | ||
6 | static int priority; | |
7 | static int cpu_up_prepare_error; | |
8 | static int cpu_down_prepare_error; | |
9 | ||
10 | module_param(priority, int, 0); | |
11 | MODULE_PARM_DESC(priority, "specify cpu notifier priority"); | |
12 | ||
13 | module_param(cpu_up_prepare_error, int, 0644); | |
14 | MODULE_PARM_DESC(cpu_up_prepare_error, | |
15 | "specify error code to inject CPU_UP_PREPARE action"); | |
16 | ||
17 | module_param(cpu_down_prepare_error, int, 0644); | |
18 | MODULE_PARM_DESC(cpu_down_prepare_error, | |
19 | "specify error code to inject CPU_DOWN_PREPARE action"); | |
20 | ||
21 | static int err_inject_cpu_callback(struct notifier_block *nfb, | |
22 | unsigned long action, void *hcpu) | |
23 | { | |
24 | int err = 0; | |
25 | ||
26 | switch (action) { | |
27 | case CPU_UP_PREPARE: | |
28 | case CPU_UP_PREPARE_FROZEN: | |
29 | err = cpu_up_prepare_error; | |
30 | break; | |
31 | case CPU_DOWN_PREPARE: | |
32 | case CPU_DOWN_PREPARE_FROZEN: | |
33 | err = cpu_down_prepare_error; | |
34 | break; | |
35 | } | |
36 | if (err) | |
37 | printk(KERN_INFO "Injecting error (%d) at cpu notifier\n", err); | |
38 | ||
39 | return notifier_from_errno(err); | |
40 | } | |
41 | ||
42 | static struct notifier_block err_inject_cpu_notifier = { | |
43 | .notifier_call = err_inject_cpu_callback, | |
44 | }; | |
45 | ||
46 | static int err_inject_init(void) | |
47 | { | |
48 | err_inject_cpu_notifier.priority = priority; | |
49 | ||
50 | return register_hotcpu_notifier(&err_inject_cpu_notifier); | |
51 | } | |
52 | ||
53 | static void err_inject_exit(void) | |
54 | { | |
55 | unregister_hotcpu_notifier(&err_inject_cpu_notifier); | |
56 | } | |
57 | ||
58 | module_init(err_inject_init); | |
59 | module_exit(err_inject_exit); | |
60 | ||
61 | MODULE_DESCRIPTION("CPU notifier error injection module"); | |
62 | MODULE_LICENSE("GPL"); | |
63 | MODULE_AUTHOR("Akinobu Mita <[email protected]>"); |