aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/tracepoint.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/tracepoint.c')
-rw-r--r--kernel/tracepoint.c6
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);