Root/
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 <akinobu.mita@gmail.com>"); |
64 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9