diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-08-28 07:53:07 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-08-28 07:53:07 -0400 |
commit | 66c6e29f24a50173fc1e761c3e2483c8d64e3b1a (patch) | |
tree | 15b9d212d02d6e1bae8696d9c5da9a778455f9c0 /kernel | |
parent | 6c347d43eea29221a8ebab9ff9cbe7a00cddac98 (diff) | |
parent | 117226d15850387b55fd01675917ee4fcb9699e8 (diff) |
Merge branch 'tracing/core' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing into tracing/core
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/trace/trace_syscalls.c | 28 | ||||
-rw-r--r-- | kernel/tracepoint.c | 4 |
2 files changed, 19 insertions, 13 deletions
diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index 85291c4de406..4f5fae6fad90 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c | |||
@@ -11,8 +11,8 @@ | |||
11 | static DEFINE_MUTEX(syscall_trace_lock); | 11 | static DEFINE_MUTEX(syscall_trace_lock); |
12 | static int sys_refcount_enter; | 12 | static int sys_refcount_enter; |
13 | static int sys_refcount_exit; | 13 | static int sys_refcount_exit; |
14 | static DECLARE_BITMAP(enabled_enter_syscalls, FTRACE_SYSCALL_MAX); | 14 | static DECLARE_BITMAP(enabled_enter_syscalls, NR_syscalls); |
15 | static DECLARE_BITMAP(enabled_exit_syscalls, FTRACE_SYSCALL_MAX); | 15 | static DECLARE_BITMAP(enabled_exit_syscalls, NR_syscalls); |
16 | 16 | ||
17 | enum print_line_t | 17 | enum print_line_t |
18 | print_syscall_enter(struct trace_iterator *iter, int flags) | 18 | print_syscall_enter(struct trace_iterator *iter, int flags) |
@@ -227,6 +227,8 @@ void ftrace_syscall_enter(struct pt_regs *regs, long id) | |||
227 | int syscall_nr; | 227 | int syscall_nr; |
228 | 228 | ||
229 | syscall_nr = syscall_get_nr(current, regs); | 229 | syscall_nr = syscall_get_nr(current, regs); |
230 | if (syscall_nr < 0) | ||
231 | return; | ||
230 | if (!test_bit(syscall_nr, enabled_enter_syscalls)) | 232 | if (!test_bit(syscall_nr, enabled_enter_syscalls)) |
231 | return; | 233 | return; |
232 | 234 | ||
@@ -257,6 +259,8 @@ void ftrace_syscall_exit(struct pt_regs *regs, long ret) | |||
257 | int syscall_nr; | 259 | int syscall_nr; |
258 | 260 | ||
259 | syscall_nr = syscall_get_nr(current, regs); | 261 | syscall_nr = syscall_get_nr(current, regs); |
262 | if (syscall_nr < 0) | ||
263 | return; | ||
260 | if (!test_bit(syscall_nr, enabled_exit_syscalls)) | 264 | if (!test_bit(syscall_nr, enabled_exit_syscalls)) |
261 | return; | 265 | return; |
262 | 266 | ||
@@ -285,7 +289,7 @@ int reg_event_syscall_enter(void *ptr) | |||
285 | 289 | ||
286 | name = (char *)ptr; | 290 | name = (char *)ptr; |
287 | num = syscall_name_to_nr(name); | 291 | num = syscall_name_to_nr(name); |
288 | if (num < 0 || num >= FTRACE_SYSCALL_MAX) | 292 | if (num < 0 || num >= NR_syscalls) |
289 | return -ENOSYS; | 293 | return -ENOSYS; |
290 | mutex_lock(&syscall_trace_lock); | 294 | mutex_lock(&syscall_trace_lock); |
291 | if (!sys_refcount_enter) | 295 | if (!sys_refcount_enter) |
@@ -308,7 +312,7 @@ void unreg_event_syscall_enter(void *ptr) | |||
308 | 312 | ||
309 | name = (char *)ptr; | 313 | name = (char *)ptr; |
310 | num = syscall_name_to_nr(name); | 314 | num = syscall_name_to_nr(name); |
311 | if (num < 0 || num >= FTRACE_SYSCALL_MAX) | 315 | if (num < 0 || num >= NR_syscalls) |
312 | return; | 316 | return; |
313 | mutex_lock(&syscall_trace_lock); | 317 | mutex_lock(&syscall_trace_lock); |
314 | sys_refcount_enter--; | 318 | sys_refcount_enter--; |
@@ -326,7 +330,7 @@ int reg_event_syscall_exit(void *ptr) | |||
326 | 330 | ||
327 | name = (char *)ptr; | 331 | name = (char *)ptr; |
328 | num = syscall_name_to_nr(name); | 332 | num = syscall_name_to_nr(name); |
329 | if (num < 0 || num >= FTRACE_SYSCALL_MAX) | 333 | if (num < 0 || num >= NR_syscalls) |
330 | return -ENOSYS; | 334 | return -ENOSYS; |
331 | mutex_lock(&syscall_trace_lock); | 335 | mutex_lock(&syscall_trace_lock); |
332 | if (!sys_refcount_exit) | 336 | if (!sys_refcount_exit) |
@@ -349,7 +353,7 @@ void unreg_event_syscall_exit(void *ptr) | |||
349 | 353 | ||
350 | name = (char *)ptr; | 354 | name = (char *)ptr; |
351 | num = syscall_name_to_nr(name); | 355 | num = syscall_name_to_nr(name); |
352 | if (num < 0 || num >= FTRACE_SYSCALL_MAX) | 356 | if (num < 0 || num >= NR_syscalls) |
353 | return; | 357 | return; |
354 | mutex_lock(&syscall_trace_lock); | 358 | mutex_lock(&syscall_trace_lock); |
355 | sys_refcount_exit--; | 359 | sys_refcount_exit--; |
@@ -369,8 +373,8 @@ struct trace_event event_syscall_exit = { | |||
369 | 373 | ||
370 | #ifdef CONFIG_EVENT_PROFILE | 374 | #ifdef CONFIG_EVENT_PROFILE |
371 | 375 | ||
372 | static DECLARE_BITMAP(enabled_prof_enter_syscalls, FTRACE_SYSCALL_MAX); | 376 | static DECLARE_BITMAP(enabled_prof_enter_syscalls, NR_syscalls); |
373 | static DECLARE_BITMAP(enabled_prof_exit_syscalls, FTRACE_SYSCALL_MAX); | 377 | static DECLARE_BITMAP(enabled_prof_exit_syscalls, NR_syscalls); |
374 | static int sys_prof_refcount_enter; | 378 | static int sys_prof_refcount_enter; |
375 | static int sys_prof_refcount_exit; | 379 | static int sys_prof_refcount_exit; |
376 | 380 | ||
@@ -416,7 +420,7 @@ int reg_prof_syscall_enter(char *name) | |||
416 | int num; | 420 | int num; |
417 | 421 | ||
418 | num = syscall_name_to_nr(name); | 422 | num = syscall_name_to_nr(name); |
419 | if (num < 0 || num >= FTRACE_SYSCALL_MAX) | 423 | if (num < 0 || num >= NR_syscalls) |
420 | return -ENOSYS; | 424 | return -ENOSYS; |
421 | 425 | ||
422 | mutex_lock(&syscall_trace_lock); | 426 | mutex_lock(&syscall_trace_lock); |
@@ -438,7 +442,7 @@ void unreg_prof_syscall_enter(char *name) | |||
438 | int num; | 442 | int num; |
439 | 443 | ||
440 | num = syscall_name_to_nr(name); | 444 | num = syscall_name_to_nr(name); |
441 | if (num < 0 || num >= FTRACE_SYSCALL_MAX) | 445 | if (num < 0 || num >= NR_syscalls) |
442 | return; | 446 | return; |
443 | 447 | ||
444 | mutex_lock(&syscall_trace_lock); | 448 | mutex_lock(&syscall_trace_lock); |
@@ -477,7 +481,7 @@ int reg_prof_syscall_exit(char *name) | |||
477 | int num; | 481 | int num; |
478 | 482 | ||
479 | num = syscall_name_to_nr(name); | 483 | num = syscall_name_to_nr(name); |
480 | if (num < 0 || num >= FTRACE_SYSCALL_MAX) | 484 | if (num < 0 || num >= NR_syscalls) |
481 | return -ENOSYS; | 485 | return -ENOSYS; |
482 | 486 | ||
483 | mutex_lock(&syscall_trace_lock); | 487 | mutex_lock(&syscall_trace_lock); |
@@ -499,7 +503,7 @@ void unreg_prof_syscall_exit(char *name) | |||
499 | int num; | 503 | int num; |
500 | 504 | ||
501 | num = syscall_name_to_nr(name); | 505 | num = syscall_name_to_nr(name); |
502 | if (num < 0 || num >= FTRACE_SYSCALL_MAX) | 506 | if (num < 0 || num >= NR_syscalls) |
503 | return; | 507 | return; |
504 | 508 | ||
505 | mutex_lock(&syscall_trace_lock); | 509 | mutex_lock(&syscall_trace_lock); |
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c index 1a6a453b7efb..9489a0a9b1be 100644 --- a/kernel/tracepoint.c +++ b/kernel/tracepoint.c | |||
@@ -597,7 +597,9 @@ void syscall_regfunc(void) | |||
597 | if (!sys_tracepoint_refcount) { | 597 | if (!sys_tracepoint_refcount) { |
598 | read_lock_irqsave(&tasklist_lock, flags); | 598 | read_lock_irqsave(&tasklist_lock, flags); |
599 | do_each_thread(g, t) { | 599 | do_each_thread(g, t) { |
600 | set_tsk_thread_flag(t, TIF_SYSCALL_TRACEPOINT); | 600 | /* Skip kernel threads. */ |
601 | if (t->mm) | ||
602 | set_tsk_thread_flag(t, TIF_SYSCALL_TRACEPOINT); | ||
601 | } while_each_thread(g, t); | 603 | } while_each_thread(g, t); |
602 | read_unlock_irqrestore(&tasklist_lock, flags); | 604 | read_unlock_irqrestore(&tasklist_lock, flags); |
603 | } | 605 | } |