lkml.org 
[lkml]   [2008]   [Nov]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 04/16] Markers use rcu_*_sched_notrace and notrace
    Make marker critical code use notrace (__attribute__((no_instrument_function))
    to make sure they can be used as an ftrace callback.

    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
    CC: Andrew Morton <akpm@linux-foundation.org>
    CC: Masami Hiramatsu <mhiramat@redhat.com>
    CC: 'Peter Zijlstra' <peterz@infradead.org>
    CC: "Frank Ch. Eigler" <fche@redhat.com>
    CC: 'Ingo Molnar' <mingo@elte.hu>
    CC: Lai Jiangshan <laijs@cn.fujitsu.com>
    CC: 'Hideo AOKI' <haoki@redhat.com>
    CC: Takashi Nishiie <t-nishiie@np.css.fujitsu.com>
    CC: 'Steven Rostedt' <rostedt@goodmis.org>
    ---
    kernel/marker.c | 16 +++++++++-------
    1 file changed, 9 insertions(+), 7 deletions(-)

    Index: linux-2.6-lttng/kernel/marker.c
    ===================================================================
    --- linux-2.6-lttng.orig/kernel/marker.c 2008-10-15 09:43:15.000000000 -0400
    +++ linux-2.6-lttng/kernel/marker.c 2008-10-15 09:44:08.000000000 -0400
    @@ -81,7 +81,7 @@ struct marker_entry {
    * though the function pointer change and the marker enabling are two distinct
    * operations that modifies the execution flow of preemptible code.
    */
    -void __mark_empty_function(void *probe_private, void *call_private,
    +notrace void __mark_empty_function(void *probe_private, void *call_private,
    const char *fmt, va_list *args)
    {
    }
    @@ -97,7 +97,8 @@ EXPORT_SYMBOL_GPL(__mark_empty_function)
    * need to put a full smp_rmb() in this branch. This is why we do not use
    * rcu_dereference() for the pointer read.
    */
    -void marker_probe_cb(const struct marker *mdata, void *call_private, ...)
    +notrace void marker_probe_cb(const struct marker *mdata,
    + void *call_private, ...)
    {
    va_list args;
    char ptype;
    @@ -107,7 +108,7 @@ void marker_probe_cb(const struct marker
    * sure the teardown of the callbacks can be done correctly when they
    * are in modules and they insure RCU read coherency.
    */
    - rcu_read_lock_sched();
    + rcu_read_lock_sched_notrace();
    ptype = mdata->ptype;
    if (likely(!ptype)) {
    marker_probe_func *func;
    @@ -145,7 +146,7 @@ void marker_probe_cb(const struct marker
    va_end(args);
    }
    }
    - rcu_read_unlock_sched();
    + rcu_read_unlock_sched_notrace();
    }
    EXPORT_SYMBOL_GPL(marker_probe_cb);

    @@ -157,12 +158,13 @@ EXPORT_SYMBOL_GPL(marker_probe_cb);
    *
    * Should be connected to markers "MARK_NOARGS".
    */
    -static void marker_probe_cb_noarg(const struct marker *mdata, void *call_private, ...)
    +static notrace void marker_probe_cb_noarg(const struct marker *mdata,
    + void *call_private, ...)
    {
    va_list args; /* not initialized */
    char ptype;

    - rcu_read_lock_sched();
    + rcu_read_lock_sched_notrace();
    ptype = mdata->ptype;
    if (likely(!ptype)) {
    marker_probe_func *func;
    @@ -195,7 +197,7 @@ static void marker_probe_cb_noarg(const
    multi[i].func(multi[i].probe_private, call_private,
    mdata->format, &args);
    }
    - rcu_read_unlock_sched();
    + rcu_read_unlock_sched_notrace();
    }

    static void free_old_closure(struct rcu_head *head)
    --
    Mathieu Desnoyers
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68


    \
     
     \ /
      Last update: 2008-11-15 00:07    [W:4.090 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site