aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-08-28 07:53:07 -0400
committerIngo Molnar <mingo@elte.hu>2009-08-28 07:53:07 -0400
commit66c6e29f24a50173fc1e761c3e2483c8d64e3b1a (patch)
tree15b9d212d02d6e1bae8696d9c5da9a778455f9c0 /kernel
parent6c347d43eea29221a8ebab9ff9cbe7a00cddac98 (diff)
parent117226d15850387b55fd01675917ee4fcb9699e8 (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.c28
-rw-r--r--kernel/tracepoint.c4
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 @@
11static DEFINE_MUTEX(syscall_trace_lock); 11static DEFINE_MUTEX(syscall_trace_lock);
12static int sys_refcount_enter; 12static int sys_refcount_enter;
13static int sys_refcount_exit; 13static int sys_refcount_exit;
14static DECLARE_BITMAP(enabled_enter_syscalls, FTRACE_SYSCALL_MAX); 14static DECLARE_BITMAP(enabled_enter_syscalls, NR_syscalls);
15static DECLARE_BITMAP(enabled_exit_syscalls, FTRACE_SYSCALL_MAX); 15static DECLARE_BITMAP(enabled_exit_syscalls, NR_syscalls);
16 16
17enum print_line_t 17enum print_line_t
18print_syscall_enter(struct trace_iterator *iter, int flags) 18print_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
372static DECLARE_BITMAP(enabled_prof_enter_syscalls, FTRACE_SYSCALL_MAX); 376static DECLARE_BITMAP(enabled_prof_enter_syscalls, NR_syscalls);
373static DECLARE_BITMAP(enabled_prof_exit_syscalls, FTRACE_SYSCALL_MAX); 377static DECLARE_BITMAP(enabled_prof_exit_syscalls, NR_syscalls);
374static int sys_prof_refcount_enter; 378static int sys_prof_refcount_enter;
375static int sys_prof_refcount_exit; 379static 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 }