lkml.org 
[lkml]   [2022]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 079/172] tracing: Avoid adding tracer option before update_tracer_options
    Date
    From: Mark-PK Tsai <mark-pk.tsai@mediatek.com>

    [ Upstream commit ef9188bcc6ca1d8a2ad83e826b548e6820721061 ]

    To prepare for support asynchronous tracer_init_tracefs initcall,
    avoid calling create_trace_option_files before __update_tracer_options.
    Otherwise, create_trace_option_files will show warning because
    some tracers in trace_types list are already in tr->topts.

    For example, hwlat_tracer call register_tracer in late_initcall,
    and global_trace.dir is already created in tracing_init_dentry,
    hwlat_tracer will be put into tr->topts.
    Then if the __update_tracer_options is executed after hwlat_tracer
    registered, create_trace_option_files find that hwlat_tracer is
    already in tr->topts.

    Link: https://lkml.kernel.org/r/20220426122407.17042-2-mark-pk.tsai@mediatek.com

    Link: https://lore.kernel.org/lkml/20220322133339.GA32582@xsang-OptiPlex-9020/
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    kernel/trace/trace.c | 7 +++++++
    1 file changed, 7 insertions(+)

    diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
    index 124e3e25e155..50200898410d 100644
    --- a/kernel/trace/trace.c
    +++ b/kernel/trace/trace.c
    @@ -5907,12 +5907,18 @@ static void tracing_set_nop(struct trace_array *tr)
    tr->current_trace = &nop_trace;
    }

    +static bool tracer_options_updated;
    +
    static void add_tracer_options(struct trace_array *tr, struct tracer *t)
    {
    /* Only enable if the directory has been created already. */
    if (!tr->dir)
    return;

    + /* Only create trace option files after update_tracer_options finish */
    + if (!tracer_options_updated)
    + return;
    +
    create_trace_option_files(tr, t);
    }

    @@ -8649,6 +8655,7 @@ static void __update_tracer_options(struct trace_array *tr)
    static void update_tracer_options(struct trace_array *tr)
    {
    mutex_lock(&trace_types_lock);
    + tracer_options_updated = true;
    __update_tracer_options(tr);
    mutex_unlock(&trace_types_lock);
    }
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-13 14:36    [W:2.135 / U:0.620 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site