[lkml]   [2009]   [Aug]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[tip:tracing/core] tracing: Don't trace kernel thread syscalls
    Commit-ID:  cc3b13c11c567c69a6356be98d0c03ff11541d5c
    Author: Hendrik Brueckner <>
    AuthorDate: Tue, 25 Aug 2009 18:02:37 +0200
    Committer: Frederic Weisbecker <>
    CommitDate: Wed, 26 Aug 2009 21:29:52 +0200

    tracing: Don't trace kernel thread syscalls

    Kernel threads don't call syscalls using the sysenter/sysexit
    path. Instead they directly call the sys_* or do_* functions
    that implement the syscalls inside the kernel.

    The current syscall tracepoints only bind the sysenter/sysexit
    path, then it has no effect to trace the kernel thread calls
    to syscalls in that path.
    Setting the TIF_SYSCALL_TRACEPOINT flag is then useless for these.

    Actually there is only one case when a kernel thread can reach the
    usual syscall exit tracing path: when we create a kernel thread, the
    child comes to ret_from_fork and is the fork() return is then traced.
    But this information alone is useless, then we don't want to set the
    TIF flags for these threads.

    Kernel threads have task_struct->mm set to NULL.
    (Thanks to Heiko for that hint ;-)
    The idea is then to check the mm field in syscall_regfunc() and
    set the flag accordingly.

    Signed-off-by: Hendrik Brueckner <>
    Cc: Jason Baron <>
    Cc: Frederic Weisbecker <>
    Cc: Ingo Molnar <>
    Cc: Lai Jiangshan <>
    Cc: Steven Rostedt <>
    Cc: Peter Zijlstra <>
    Cc: Mathieu Desnoyers <>
    Cc: Jiaying Zhang <>
    Cc: Martin Bligh <>
    Cc: Li Zefan <>
    Cc: Martin Schwidefsky <>
    Cc: Paul Mundt <>
    Cc: Heiko Carstens <>
    Cc: Hendrik Brueckner <>
    LKML-Reference: <>
    Signed-off-by: Frederic Weisbecker <>

    kernel/tracepoint.c | 4 +++-
    1 files changed, 3 insertions(+), 1 deletions(-)

    diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
    index 1a6a453..9489a0a 100644
    --- a/kernel/tracepoint.c
    +++ b/kernel/tracepoint.c
    @@ -597,7 +597,9 @@ void syscall_regfunc(void)
    if (!sys_tracepoint_refcount) {
    read_lock_irqsave(&tasklist_lock, flags);
    do_each_thread(g, t) {
    - set_tsk_thread_flag(t, TIF_SYSCALL_TRACEPOINT);
    + /* Skip kernel threads. */
    + if (t->mm)
    + set_tsk_thread_flag(t, TIF_SYSCALL_TRACEPOINT);
    } while_each_thread(g, t);
    read_unlock_irqrestore(&tasklist_lock, flags);

     \ /
      Last update: 2009-08-28 14:57    [W:0.037 / U:65.112 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site