diff options
Diffstat (limited to 'kernel/tracepoint.c')
-rw-r--r-- | kernel/tracepoint.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c index 162be198a247..ca2cfe21bb8e 100644 --- a/kernel/tracepoint.c +++ b/kernel/tracepoint.c | |||
@@ -181,7 +181,8 @@ static int tracepoint_add_func(struct tracepoint *tp, | |||
181 | if (tp->regfunc && !static_key_enabled(&tp->key)) | 181 | if (tp->regfunc && !static_key_enabled(&tp->key)) |
182 | tp->regfunc(); | 182 | tp->regfunc(); |
183 | 183 | ||
184 | tp_funcs = tp->funcs; | 184 | tp_funcs = rcu_dereference_protected(tp->funcs, |
185 | lockdep_is_held(&tracepoints_mutex)); | ||
185 | old = func_add(&tp_funcs, func); | 186 | old = func_add(&tp_funcs, func); |
186 | if (IS_ERR(old)) { | 187 | if (IS_ERR(old)) { |
187 | WARN_ON_ONCE(1); | 188 | WARN_ON_ONCE(1); |
@@ -213,7 +214,8 @@ static int tracepoint_remove_func(struct tracepoint *tp, | |||
213 | { | 214 | { |
214 | struct tracepoint_func *old, *tp_funcs; | 215 | struct tracepoint_func *old, *tp_funcs; |
215 | 216 | ||
216 | tp_funcs = tp->funcs; | 217 | tp_funcs = rcu_dereference_protected(tp->funcs, |
218 | lockdep_is_held(&tracepoints_mutex)); | ||
217 | old = func_remove(&tp_funcs, func); | 219 | old = func_remove(&tp_funcs, func); |
218 | if (IS_ERR(old)) { | 220 | if (IS_ERR(old)) { |
219 | WARN_ON_ONCE(1); | 221 | WARN_ON_ONCE(1); |