diff options
Diffstat (limited to 'drivers/connector/cn_proc.c')
-rw-r--r-- | drivers/connector/cn_proc.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/connector/cn_proc.c b/drivers/connector/cn_proc.c index 1110478dd0fd..08ae128cce9b 100644 --- a/drivers/connector/cn_proc.c +++ b/drivers/connector/cn_proc.c | |||
@@ -232,6 +232,31 @@ void proc_comm_connector(struct task_struct *task) | |||
232 | cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL); | 232 | cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL); |
233 | } | 233 | } |
234 | 234 | ||
235 | void proc_coredump_connector(struct task_struct *task) | ||
236 | { | ||
237 | struct cn_msg *msg; | ||
238 | struct proc_event *ev; | ||
239 | __u8 buffer[CN_PROC_MSG_SIZE]; | ||
240 | struct timespec ts; | ||
241 | |||
242 | if (atomic_read(&proc_event_num_listeners) < 1) | ||
243 | return; | ||
244 | |||
245 | msg = (struct cn_msg *)buffer; | ||
246 | ev = (struct proc_event *)msg->data; | ||
247 | get_seq(&msg->seq, &ev->cpu); | ||
248 | ktime_get_ts(&ts); /* get high res monotonic timestamp */ | ||
249 | put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns); | ||
250 | ev->what = PROC_EVENT_COREDUMP; | ||
251 | ev->event_data.coredump.process_pid = task->pid; | ||
252 | ev->event_data.coredump.process_tgid = task->tgid; | ||
253 | |||
254 | memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id)); | ||
255 | msg->ack = 0; /* not used */ | ||
256 | msg->len = sizeof(*ev); | ||
257 | cn_netlink_send(msg, CN_IDX_PROC, GFP_KERNEL); | ||
258 | } | ||
259 | |||
235 | void proc_exit_connector(struct task_struct *task) | 260 | void proc_exit_connector(struct task_struct *task) |
236 | { | 261 | { |
237 | struct cn_msg *msg; | 262 | struct cn_msg *msg; |