lkml.org 
[lkml]   [2020]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V7 08/15] ftrace: Add perf text poke events for ftrace trampolines
    Date
    Add perf text poke events for ftrace trampolines when created and when
    freed.

    There can be 3 text_poke events for ftrace trampolines:

    1. NULL -> trampoline
    By ftrace_update_trampoline() when !ops->trampoline
    Trampoline created

    2. [e.g. on x86] CALL rel32 -> CALL rel32
    By arch_ftrace_update_trampoline() when ops->trampoline and
    ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP
    [e.g. on x86] via text_poke_bp() which generates text poke events
    Trampoline-called function target updated

    3. trampoline -> NULL
    By ftrace_trampoline_free() when ops->trampoline and
    ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP
    Trampoline freed

    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    ---
    kernel/trace/ftrace.c | 14 ++++++++++++++
    1 file changed, 14 insertions(+)

    diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
    index 1103a8fcf142..abdf8f415a6e 100644
    --- a/kernel/trace/ftrace.c
    +++ b/kernel/trace/ftrace.c
    @@ -2802,6 +2802,13 @@ static void ftrace_trampoline_free(struct ftrace_ops *ops)
    {
    if (ops && (ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP) &&
    ops->trampoline) {
    + /*
    + * Record the text poke event before the ksymbol unregister
    + * event.
    + */
    + perf_event_text_poke((void *)ops->trampoline,
    + (void *)ops->trampoline,
    + ops->trampoline_size, NULL, 0);
    perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_OOL,
    ops->trampoline, ops->trampoline_size,
    true, FTRACE_TRAMPOLINE_SYM);
    @@ -6826,6 +6833,13 @@ static void ftrace_update_trampoline(struct ftrace_ops *ops)
    perf_event_ksymbol(PERF_RECORD_KSYMBOL_TYPE_OOL,
    ops->trampoline, ops->trampoline_size, false,
    FTRACE_TRAMPOLINE_SYM);
    + /*
    + * Record the perf text poke event after the ksymbol register
    + * event.
    + */
    + perf_event_text_poke((void *)ops->trampoline, NULL, 0,
    + (void *)ops->trampoline,
    + ops->trampoline_size);
    }
    }

    --
    2.17.1
    \
     
     \ /
      Last update: 2020-05-12 14:20    [W:4.077 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site