diff options
| author | Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> | 2009-08-09 22:52:30 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2009-08-29 08:10:07 -0400 |
| commit | 3f0a525ebf4b8ef041a332bbe4a73aee94bb064b (patch) | |
| tree | 18c542b9896f8ac4b8d89db868ba46d38576228d /kernel | |
| parent | c6a2a1770245f654f35f60e1458d4356680f9519 (diff) | |
itimers: Add tracepoints for itimer
Add tracepoints for all itimer variants: ITIMER_REAL, ITIMER_VIRTUAL
and ITIMER_PROF.
[ tglx: Fixed comments and made the output more readable, parseable
and consistent. Replaced pid_vnr by pid_nr because the hrtimer
callback can happen in any namespace ]
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Anton Blanchard <anton@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Zhaolei <zhaolei@cn.fujitsu.com>
LKML-Reference: <4A7F8B6E.2010109@cn.fujitsu.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/itimer.c | 5 | ||||
| -rw-r--r-- | kernel/posix-cpu-timers.c | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/kernel/itimer.c b/kernel/itimer.c index 8078a32d3b10..b03451ede528 100644 --- a/kernel/itimer.c +++ b/kernel/itimer.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/time.h> | 12 | #include <linux/time.h> |
| 13 | #include <linux/posix-timers.h> | 13 | #include <linux/posix-timers.h> |
| 14 | #include <linux/hrtimer.h> | 14 | #include <linux/hrtimer.h> |
| 15 | #include <trace/events/timer.h> | ||
| 15 | 16 | ||
| 16 | #include <asm/uaccess.h> | 17 | #include <asm/uaccess.h> |
| 17 | 18 | ||
| @@ -122,6 +123,7 @@ enum hrtimer_restart it_real_fn(struct hrtimer *timer) | |||
| 122 | struct signal_struct *sig = | 123 | struct signal_struct *sig = |
| 123 | container_of(timer, struct signal_struct, real_timer); | 124 | container_of(timer, struct signal_struct, real_timer); |
| 124 | 125 | ||
| 126 | trace_itimer_expire(ITIMER_REAL, sig->leader_pid, 0); | ||
| 125 | kill_pid_info(SIGALRM, SEND_SIG_PRIV, sig->leader_pid); | 127 | kill_pid_info(SIGALRM, SEND_SIG_PRIV, sig->leader_pid); |
| 126 | 128 | ||
| 127 | return HRTIMER_NORESTART; | 129 | return HRTIMER_NORESTART; |
| @@ -166,6 +168,8 @@ static void set_cpu_itimer(struct task_struct *tsk, unsigned int clock_id, | |||
| 166 | } | 168 | } |
| 167 | it->expires = nval; | 169 | it->expires = nval; |
| 168 | it->incr = ninterval; | 170 | it->incr = ninterval; |
| 171 | trace_itimer_state(clock_id == CPUCLOCK_VIRT ? | ||
| 172 | ITIMER_VIRTUAL : ITIMER_PROF, value, nval); | ||
| 169 | 173 | ||
| 170 | spin_unlock_irq(&tsk->sighand->siglock); | 174 | spin_unlock_irq(&tsk->sighand->siglock); |
| 171 | 175 | ||
| @@ -217,6 +221,7 @@ again: | |||
| 217 | } else | 221 | } else |
| 218 | tsk->signal->it_real_incr.tv64 = 0; | 222 | tsk->signal->it_real_incr.tv64 = 0; |
| 219 | 223 | ||
| 224 | trace_itimer_state(ITIMER_REAL, value, 0); | ||
| 220 | spin_unlock_irq(&tsk->sighand->siglock); | 225 | spin_unlock_irq(&tsk->sighand->siglock); |
| 221 | break; | 226 | break; |
| 222 | case ITIMER_VIRTUAL: | 227 | case ITIMER_VIRTUAL: |
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index 12161f74744e..5c9dc228747b 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include <linux/math64.h> | 8 | #include <linux/math64.h> |
| 9 | #include <asm/uaccess.h> | 9 | #include <asm/uaccess.h> |
| 10 | #include <linux/kernel_stat.h> | 10 | #include <linux/kernel_stat.h> |
| 11 | #include <trace/events/timer.h> | ||
| 11 | 12 | ||
| 12 | /* | 13 | /* |
| 13 | * Called after updating RLIMIT_CPU to set timer expiration if necessary. | 14 | * Called after updating RLIMIT_CPU to set timer expiration if necessary. |
| @@ -1090,9 +1091,13 @@ static void check_cpu_itimer(struct task_struct *tsk, struct cpu_itimer *it, | |||
| 1090 | cputime_one_jiffy); | 1091 | cputime_one_jiffy); |
| 1091 | it->error -= onecputick; | 1092 | it->error -= onecputick; |
| 1092 | } | 1093 | } |
| 1093 | } else | 1094 | } else { |
| 1094 | it->expires = cputime_zero; | 1095 | it->expires = cputime_zero; |
| 1096 | } | ||
| 1095 | 1097 | ||
| 1098 | trace_itimer_expire(signo == SIGPROF ? | ||
| 1099 | ITIMER_PROF : ITIMER_VIRTUAL, | ||
| 1100 | tsk->signal->leader_pid, cur_time); | ||
| 1096 | __group_send_sig_info(signo, SEND_SIG_PRIV, tsk); | 1101 | __group_send_sig_info(signo, SEND_SIG_PRIV, tsk); |
| 1097 | } | 1102 | } |
| 1098 | 1103 | ||
