~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to lib/cpu-notifier-error-inject.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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>");