[FEATURE] create empty swap_energy module
[kernel/swap-modules.git] / energy / swap_energy.c
1 #include <linux/module.h>
2 #include <linux/time.h>
3 #include <kprobe/dbi_kprobes.h>
4
5 static u64 get_ntime(void)
6 {
7         struct timespec ts;
8
9         getnstimeofday(&ts);
10
11         return (u64)ts.tv_sec * 1000*1000*1000 + ts.tv_nsec;
12 }
13
14 /* ============================================================================
15  * =                             __switch_to                                  =
16  * ============================================================================
17  */
18 static int entry_handler_switch(struct kretprobe_instance *ri, struct pt_regs *regs)
19 {
20         return 0;
21 }
22
23 static int ret_handler_switch(struct kretprobe_instance *ri, struct pt_regs *regs)
24 {
25         return 0;
26 }
27
28 static struct kretprobe switch_to_krp = {
29         .entry_handler = entry_handler_switch,
30         .handler = ret_handler_switch,
31 };
32
33
34
35
36
37 /* ============================================================================
38  * =                                sys_read                                  =
39  * ============================================================================
40  */
41 static int entry_handler_sys_read(struct kretprobe_instance *ri, struct pt_regs *regs)
42 {
43         return 0;
44 }
45
46 static int ret_handler_sys_read(struct kretprobe_instance *ri, struct pt_regs *regs)
47 {
48         return 0;
49 }
50
51 static struct kretprobe sys_read_krp = {
52         .entry_handler = entry_handler_sys_read,
53         .handler = ret_handler_sys_read,
54 };
55
56
57
58
59
60 /* ============================================================================
61  * =                               sys_write                                  =
62  * ============================================================================
63  */
64 static int entry_handler_sys_write(struct kretprobe_instance *ri, struct pt_regs *regs)
65 {
66         return 0;
67 }
68
69 static int ret_handler_sys_write(struct kretprobe_instance *ri, struct pt_regs *regs)
70 {
71         return 0;
72 }
73
74 static struct kretprobe sys_write_krp = {
75         .entry_handler = entry_handler_sys_write,
76         .handler = ret_handler_sys_write,
77 };
78
79
80
81
82
83 int set_energy(void)
84 {
85         int ret = 0;
86
87         ret = dbi_register_kretprobe(&sys_read_krp);
88         if (ret) {
89                 printk("dbi_register_kretprobe(sys_read) result=%d!\n", ret);
90                 return ret;
91         }
92
93         ret = dbi_register_kretprobe(&sys_write_krp);
94         if (ret != 0) {
95                 printk("dbi_register_kretprobe(sys_write) result=%d!\n", ret);
96                 goto unregister_sys_read;
97         }
98
99         ret = dbi_register_kretprobe(&switch_to_krp);
100         if (ret) {
101                 printk("dbi_register_kretprobe(__switch_to) result=%d!\n", ret);
102                 goto unregister_sys_write;
103         }
104
105         return ret;
106
107 unregister_sys_read:
108         dbi_unregister_kretprobe(&sys_read_krp);
109
110 unregister_sys_write:
111         dbi_unregister_kretprobe(&sys_write_krp);
112
113         return ret;
114 }
115 EXPORT_SYMBOL_GPL(set_energy);
116
117 void unset_energy(void)
118 {
119         dbi_unregister_kretprobe(&switch_to_krp);
120         dbi_unregister_kretprobe(&sys_write_krp);
121         dbi_unregister_kretprobe(&sys_read_krp);
122 }
123 EXPORT_SYMBOL_GPL(unset_energy);
124
125 static int __init swap_energy_init(void)
126 {
127         unsigned long addr;
128         addr = swap_ksyms("__switch_to");
129         if (addr == 0) {
130                 printk("Cannot find address for __switch_to function!\n");
131                 return -EINVAL;
132         }
133         switch_to_krp.kp.addr = (kprobe_opcode_t *)addr;
134
135         addr = swap_ksyms("sys_read");
136         if (addr == 0) {
137                 printk("Cannot find address for sys_read function!\n");
138                 return -EINVAL;
139         }
140         sys_read_krp.kp.addr = (kprobe_opcode_t *)addr;
141
142         addr = swap_ksyms("sys_write");
143         if (addr == 0) {
144                 printk("Cannot find address for sys_write function!\n");
145                 return -EINVAL;
146         }
147         sys_write_krp.kp.addr = (kprobe_opcode_t *)addr;
148
149         return 0;
150 }
151
152 static void __exit swap_energy_exit(void)
153 {
154 }
155
156 module_init(swap_energy_init);
157 module_exit(swap_energy_exit);
158
159 MODULE_LICENSE("GPL");