lkml.org 
[lkml]   [2012]   [Feb]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 5/9] ftrace, perf: Add add/del tracepoint perf registration actions
    From: Jiri Olsa <jolsa@redhat.com>

    Adding TRACE_REG_PERF_ADD and TRACE_REG_PERF_DEL to handle
    perf event schedule in/out actions.

    The add action is invoked for when the perf event is scheduled in,
    while the del action is invoked when the event is scheduled out.

    Link: http://lkml.kernel.org/r/1329317514-8131-4-git-send-email-jolsa@redhat.com

    Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
    Signed-off-by: Jiri Olsa <jolsa@redhat.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    include/linux/ftrace_event.h | 2 ++
    kernel/trace/trace_event_perf.c | 4 +++-
    kernel/trace/trace_events.c | 2 ++
    kernel/trace/trace_kprobe.c | 2 ++
    kernel/trace/trace_syscalls.c | 4 ++++
    5 files changed, 13 insertions(+), 1 deletions(-)

    diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
    index 195e360..2bf677c 100644
    --- a/include/linux/ftrace_event.h
    +++ b/include/linux/ftrace_event.h
    @@ -148,6 +148,8 @@ enum trace_reg {
    TRACE_REG_PERF_UNREGISTER,
    TRACE_REG_PERF_OPEN,
    TRACE_REG_PERF_CLOSE,
    + TRACE_REG_PERF_ADD,
    + TRACE_REG_PERF_DEL,
    };

    struct ftrace_event_call;
    diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
    index 0cfcc37..d72af0b 100644
    --- a/kernel/trace/trace_event_perf.c
    +++ b/kernel/trace/trace_event_perf.c
    @@ -211,12 +211,14 @@ int perf_trace_add(struct perf_event *p_event, int flags)
    list = this_cpu_ptr(pcpu_list);
    hlist_add_head_rcu(&p_event->hlist_entry, list);

    - return 0;
    + return tp_event->class->reg(tp_event, TRACE_REG_PERF_ADD, p_event);
    }

    void perf_trace_del(struct perf_event *p_event, int flags)
    {
    + struct ftrace_event_call *tp_event = p_event->tp_event;
    hlist_del_rcu(&p_event->hlist_entry);
    + tp_event->class->reg(tp_event, TRACE_REG_PERF_DEL, p_event);
    }

    __kprobes void *perf_trace_buf_prepare(int size, unsigned short type,
    diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
    index 5138fea..079a93a 100644
    --- a/kernel/trace/trace_events.c
    +++ b/kernel/trace/trace_events.c
    @@ -173,6 +173,8 @@ int ftrace_event_reg(struct ftrace_event_call *call,
    return 0;
    case TRACE_REG_PERF_OPEN:
    case TRACE_REG_PERF_CLOSE:
    + case TRACE_REG_PERF_ADD:
    + case TRACE_REG_PERF_DEL:
    return 0;
    #endif
    }
    diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
    index 5667f89..580a05e 100644
    --- a/kernel/trace/trace_kprobe.c
    +++ b/kernel/trace/trace_kprobe.c
    @@ -1912,6 +1912,8 @@ int kprobe_register(struct ftrace_event_call *event,
    return 0;
    case TRACE_REG_PERF_OPEN:
    case TRACE_REG_PERF_CLOSE:
    + case TRACE_REG_PERF_ADD:
    + case TRACE_REG_PERF_DEL:
    return 0;
    #endif
    }
    diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
    index e23515f..96fc733 100644
    --- a/kernel/trace/trace_syscalls.c
    +++ b/kernel/trace/trace_syscalls.c
    @@ -666,6 +666,8 @@ static int syscall_enter_register(struct ftrace_event_call *event,
    return 0;
    case TRACE_REG_PERF_OPEN:
    case TRACE_REG_PERF_CLOSE:
    + case TRACE_REG_PERF_ADD:
    + case TRACE_REG_PERF_DEL:
    return 0;
    #endif
    }
    @@ -690,6 +692,8 @@ static int syscall_exit_register(struct ftrace_event_call *event,
    return 0;
    case TRACE_REG_PERF_OPEN:
    case TRACE_REG_PERF_CLOSE:
    + case TRACE_REG_PERF_ADD:
    + case TRACE_REG_PERF_DEL:
    return 0;
    #endif
    }
    --
    1.7.8.3

    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2012-02-22 15:47    [W:0.026 / U:89.500 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site