Commit 021aeb05 authored by Mathieu Desnoyers's avatar Mathieu Desnoyers Committed by Ingo Molnar

markers: use rcu_*_sched_notrace and notrace

Make marker critical code use notrace to make sure they can be used as an
ftrace callback.
Signed-off-by: default avatarMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent e3f8c4b9
...@@ -81,7 +81,7 @@ struct marker_entry { ...@@ -81,7 +81,7 @@ struct marker_entry {
* though the function pointer change and the marker enabling are two distinct * though the function pointer change and the marker enabling are two distinct
* operations that modifies the execution flow of preemptible code. * 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) const char *fmt, va_list *args)
{ {
} }
...@@ -97,7 +97,8 @@ EXPORT_SYMBOL_GPL(__mark_empty_function); ...@@ -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 * need to put a full smp_rmb() in this branch. This is why we do not use
* rcu_dereference() for the pointer read. * 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; va_list args;
char ptype; char ptype;
...@@ -107,7 +108,7 @@ void marker_probe_cb(const struct marker *mdata, void *call_private, ...) ...@@ -107,7 +108,7 @@ void marker_probe_cb(const struct marker *mdata, void *call_private, ...)
* sure the teardown of the callbacks can be done correctly when they * sure the teardown of the callbacks can be done correctly when they
* are in modules and they insure RCU read coherency. * are in modules and they insure RCU read coherency.
*/ */
rcu_read_lock_sched(); rcu_read_lock_sched_notrace();
ptype = mdata->ptype; ptype = mdata->ptype;
if (likely(!ptype)) { if (likely(!ptype)) {
marker_probe_func *func; marker_probe_func *func;
...@@ -145,7 +146,7 @@ void marker_probe_cb(const struct marker *mdata, void *call_private, ...) ...@@ -145,7 +146,7 @@ void marker_probe_cb(const struct marker *mdata, void *call_private, ...)
va_end(args); va_end(args);
} }
} }
rcu_read_unlock_sched(); rcu_read_unlock_sched_notrace();
} }
EXPORT_SYMBOL_GPL(marker_probe_cb); EXPORT_SYMBOL_GPL(marker_probe_cb);
...@@ -157,12 +158,13 @@ EXPORT_SYMBOL_GPL(marker_probe_cb); ...@@ -157,12 +158,13 @@ EXPORT_SYMBOL_GPL(marker_probe_cb);
* *
* Should be connected to markers "MARK_NOARGS". * 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 */ va_list args; /* not initialized */
char ptype; char ptype;
rcu_read_lock_sched(); rcu_read_lock_sched_notrace();
ptype = mdata->ptype; ptype = mdata->ptype;
if (likely(!ptype)) { if (likely(!ptype)) {
marker_probe_func *func; marker_probe_func *func;
...@@ -195,7 +197,7 @@ static void marker_probe_cb_noarg(const struct marker *mdata, void *call_private ...@@ -195,7 +197,7 @@ static void marker_probe_cb_noarg(const struct marker *mdata, void *call_private
multi[i].func(multi[i].probe_private, call_private, multi[i].func(multi[i].probe_private, call_private,
mdata->format, &args); mdata->format, &args);
} }
rcu_read_unlock_sched(); rcu_read_unlock_sched_notrace();
} }
static void free_old_closure(struct rcu_head *head) static void free_old_closure(struct rcu_head *head)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment