25 #include <linux/module.h>
26 #include <linux/kernel.h>
29 #include <linux/connector.h>
31 #include <linux/ptrace.h>
35 #include <asm/unaligned.h>
37 #include <linux/cn_proc.h>
39 #define CN_PROC_MSG_SIZE (sizeof(struct cn_msg) + sizeof(struct proc_event))
47 static inline void get_seq(
__u32 *
ts,
int *
cpu)
66 msg = (
struct cn_msg *)buffer;
68 get_seq(&msg->
seq, &ev->
cpu);
80 memcpy(&msg->
id, &cn_proc_event_id,
sizeof(msg->
id));
82 msg->
len =
sizeof(*ev);
97 msg = (
struct cn_msg *)buffer;
99 get_seq(&msg->
seq, &ev->
cpu);
106 memcpy(&msg->
id, &cn_proc_event_id,
sizeof(msg->
id));
108 msg->
len =
sizeof(*ev);
123 msg = (
struct cn_msg *)buffer;
141 get_seq(&msg->
seq, &ev->
cpu);
145 memcpy(&msg->
id, &cn_proc_event_id,
sizeof(msg->
id));
147 msg->
len =
sizeof(*ev);
161 msg = (
struct cn_msg *)buffer;
163 get_seq(&msg->
seq, &ev->
cpu);
170 memcpy(&msg->
id, &cn_proc_event_id,
sizeof(msg->
id));
172 msg->
len =
sizeof(*ev);
186 msg = (
struct cn_msg *)buffer;
188 get_seq(&msg->
seq, &ev->
cpu);
203 memcpy(&msg->
id, &cn_proc_event_id,
sizeof(msg->
id));
205 msg->
len =
sizeof(*ev);
219 msg = (
struct cn_msg *)buffer;
221 get_seq(&msg->
seq, &ev->
cpu);
229 memcpy(&msg->
id, &cn_proc_event_id,
sizeof(msg->
id));
231 msg->
len =
sizeof(*ev);
245 msg = (
struct cn_msg *)buffer;
247 get_seq(&msg->
seq, &ev->
cpu);
256 memcpy(&msg->
id, &cn_proc_event_id,
sizeof(msg->
id));
258 msg->
len =
sizeof(*ev);
270 static void cn_proc_ack(
int err,
int rcvd_seq,
int rcvd_ack)
280 msg = (
struct cn_msg *)buffer;
288 memcpy(&msg->
id, &cn_proc_event_id,
sizeof(msg->
id));
289 msg->
ack = rcvd_ack + 1;
290 msg->
len =
sizeof(*ev);
298 static void cn_proc_mcast_ctl(
struct cn_msg *msg,
304 if (msg->
len !=
sizeof(*mc_op))
328 cn_proc_ack(err, msg->
seq, msg->
ack);
336 static int __init cn_proc_init(
void)
342 pr_warn(
"cn_proc failed to register\n");