1 #include <linux/kernel.h>
3 #include <linux/module.h>
4 #include <linux/notifier.h>
7 static int cpu_up_prepare_error
;
8 static int cpu_down_prepare_error
;
10 module_param(priority
, int, 0);
11 MODULE_PARM_DESC(priority
, "specify cpu notifier priority");
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");
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");
21 static int err_inject_cpu_callback(struct notifier_block
*nfb
,
22 unsigned long action
, void *hcpu
)
28 case CPU_UP_PREPARE_FROZEN
:
29 err
= cpu_up_prepare_error
;
31 case CPU_DOWN_PREPARE
:
32 case CPU_DOWN_PREPARE_FROZEN
:
33 err
= cpu_down_prepare_error
;
37 printk(KERN_INFO
"Injecting error (%d) at cpu notifier\n", err
);
39 return notifier_from_errno(err
);
42 static struct notifier_block err_inject_cpu_notifier
= {
43 .notifier_call
= err_inject_cpu_callback
,
46 static int err_inject_init(void)
48 err_inject_cpu_notifier
.priority
= priority
;
50 return register_hotcpu_notifier(&err_inject_cpu_notifier
);
53 static void err_inject_exit(void)
55 unregister_hotcpu_notifier(&err_inject_cpu_notifier
);
58 module_init(err_inject_init
);
59 module_exit(err_inject_exit
);
61 MODULE_DESCRIPTION("CPU notifier error injection module");
62 MODULE_LICENSE("GPL");
63 MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");