2020-02-05 22:19:26

by Joel Fernandes

[permalink] [raw]
Subject: [PATCH] kernel/trace: Use rcu_assign_pointer() for setting fgraph hash pointers

set_ftrace_early_graph() sets pointers without any explicit
release-barriers. Let us use rcu_assign_pointer() to ensure the same.

Note that ftrace_early_graph() calls ftrace_graph_set_hash() which does
do mutex_unlock(&ftrace_lock); which should imply a release barrier.
However it is better to not depend on it and just use
rcu_assign_pointer() which should also avoid sparse errors in the
future.

Signed-off-by: Joel Fernandes (Google) <[email protected]>

---
kernel/trace/ftrace.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 959ded08dc13f..340d30557a10e 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -5477,9 +5477,9 @@ static void __init set_ftrace_early_graph(char *buf, int enable)
}

if (enable)
- ftrace_graph_hash = hash;
+ rcu_assign_pointer(ftrace_graph_hash, hash);
else
- ftrace_graph_notrace_hash = hash;
+ rcu_assign_pointer(ftrace_graph_notrace_hash, hash);
}
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */

--
2.25.0.341.g760bfbb309-goog


2020-02-05 22:38:52

by Joel Fernandes

[permalink] [raw]
Subject: Re: [PATCH] kernel/trace: Use rcu_assign_pointer() for setting fgraph hash pointers

On Wed, Feb 05, 2020 at 05:25:29PM -0500, Steven Rostedt wrote:
> On Wed, 5 Feb 2020 17:18:08 -0500
> "Joel Fernandes (Google)" <[email protected]> wrote:
>
> > set_ftrace_early_graph() sets pointers without any explicit
> > release-barriers. Let us use rcu_assign_pointer() to ensure the same.
> >
> > Note that ftrace_early_graph() calls ftrace_graph_set_hash() which does
> > do mutex_unlock(&ftrace_lock); which should imply a release barrier.
> > However it is better to not depend on it and just use
> > rcu_assign_pointer() which should also avoid sparse errors in the
> > future.
>
> This is going to have to wait for the next merge window, as I'm already
> *very* late, and I've pushed the limit to what I will add at this time
> frame.

I understand, no problem. I will resend it next merge window.

thanks,

- Joel

>
> -- Steve
>

2020-02-05 23:05:04

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH] kernel/trace: Use rcu_assign_pointer() for setting fgraph hash pointers

On Wed, 5 Feb 2020 17:18:08 -0500
"Joel Fernandes (Google)" <[email protected]> wrote:

> set_ftrace_early_graph() sets pointers without any explicit
> release-barriers. Let us use rcu_assign_pointer() to ensure the same.
>
> Note that ftrace_early_graph() calls ftrace_graph_set_hash() which does
> do mutex_unlock(&ftrace_lock); which should imply a release barrier.
> However it is better to not depend on it and just use
> rcu_assign_pointer() which should also avoid sparse errors in the
> future.

This is going to have to wait for the next merge window, as I'm already
*very* late, and I've pushed the limit to what I will add at this time
frame.

-- Steve