mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-19 07:48:08 +00:00
c23f472783
Signed-off-by: Denys Dmytriyenko <denys@ti.com>
110 lines
3.4 KiB
Diff
110 lines
3.4 KiB
Diff
From 4ff16c25e2cc48cbe6956e356c38a25ac063a64d Mon Sep 17 00:00:00 2001
|
|
From: David Smith <dsmith@redhat.com>
|
|
Date: Tue, 7 Feb 2012 10:11:05 -0600
|
|
Subject: [PATCH] tracepoint, vfs, sched: Add exec() tracepoint
|
|
|
|
Added a minimal exec tracepoint. Exec is an important major event
|
|
in the life of a task, like fork(), clone() or exit(), all of
|
|
which we already trace.
|
|
|
|
[ We also do scheduling re-balancing during exec() - so it's useful
|
|
from a scheduler instrumentation POV as well. ]
|
|
|
|
If you want to watch a task start up, when it gets exec'ed is a good place
|
|
to start. With the addition of this tracepoint, exec's can be monitored
|
|
and better picture of general system activity can be obtained. This
|
|
tracepoint will also enable better process life tracking, allowing you to
|
|
answer questions like "what process keeps starting up binary X?".
|
|
|
|
This tracepoint can also be useful in ftrace filtering and trigger
|
|
conditions: i.e. starting or stopping filtering when exec is called.
|
|
|
|
Signed-off-by: David Smith <dsmith@redhat.com>
|
|
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
|
Cc: Steven Rostedt <rostedt@goodmis.org>
|
|
Cc: Christoph Hellwig <hch@infradead.org>
|
|
Cc: Al Viro <viro@zeniv.linux.org.uk>
|
|
Cc: Andrew Morton <akpm@linux-foundation.org>
|
|
Cc: Linus Torvalds <torvalds@linux-foundation.org>
|
|
Link: http://lkml.kernel.org/r/4F314D19.7030504@redhat.com
|
|
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
|
---
|
|
fs/exec.c | 9 ++++++---
|
|
include/trace/events/sched.h | 27 +++++++++++++++++++++++++++
|
|
2 files changed, 33 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/fs/exec.c b/fs/exec.c
|
|
index aeb135c..d0d2080 100644
|
|
--- a/fs/exec.c
|
|
+++ b/fs/exec.c
|
|
@@ -63,6 +63,8 @@
|
|
#include <trace/events/task.h>
|
|
#include "internal.h"
|
|
|
|
+#include <trace/events/sched.h>
|
|
+
|
|
int core_uses_pid;
|
|
char core_pattern[CORENAME_MAX_SIZE] = "core";
|
|
unsigned int core_pipe_limit;
|
|
@@ -1401,9 +1403,10 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
|
|
*/
|
|
bprm->recursion_depth = depth;
|
|
if (retval >= 0) {
|
|
- if (depth == 0)
|
|
- ptrace_event(PTRACE_EVENT_EXEC,
|
|
- old_pid);
|
|
+ if (depth == 0) {
|
|
+ trace_sched_process_exec(current, old_pid, bprm);
|
|
+ ptrace_event(PTRACE_EVENT_EXEC, old_pid);
|
|
+ }
|
|
put_binfmt(fmt);
|
|
allow_write_access(bprm->file);
|
|
if (bprm->file)
|
|
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
|
|
index 6ba596b..e61ddfe 100644
|
|
--- a/include/trace/events/sched.h
|
|
+++ b/include/trace/events/sched.h
|
|
@@ -6,6 +6,7 @@
|
|
|
|
#include <linux/sched.h>
|
|
#include <linux/tracepoint.h>
|
|
+#include <linux/binfmts.h>
|
|
|
|
/*
|
|
* Tracepoint for calling kthread_stop, performed to end a kthread:
|
|
@@ -276,6 +277,32 @@ TRACE_EVENT(sched_process_fork,
|
|
);
|
|
|
|
/*
|
|
+ * Tracepoint for exec:
|
|
+ */
|
|
+TRACE_EVENT(sched_process_exec,
|
|
+
|
|
+ TP_PROTO(struct task_struct *p, pid_t old_pid,
|
|
+ struct linux_binprm *bprm),
|
|
+
|
|
+ TP_ARGS(p, old_pid, bprm),
|
|
+
|
|
+ TP_STRUCT__entry(
|
|
+ __string( filename, bprm->filename )
|
|
+ __field( pid_t, pid )
|
|
+ __field( pid_t, old_pid )
|
|
+ ),
|
|
+
|
|
+ TP_fast_assign(
|
|
+ __assign_str(filename, bprm->filename);
|
|
+ __entry->pid = p->pid;
|
|
+ __entry->old_pid = p->pid;
|
|
+ ),
|
|
+
|
|
+ TP_printk("filename=%s pid=%d old_pid=%d", __get_str(filename),
|
|
+ __entry->pid, __entry->old_pid)
|
|
+);
|
|
+
|
|
+/*
|
|
* XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE
|
|
* adding sched_stat support to SCHED_FIFO/RR would be welcome.
|
|
*/
|
|
--
|
|
1.7.6.5
|