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 ac5b23cf7212..33cbd8c203f8 100644 --- a/kernel/tracepoint.c +++ b/kernel/tracepoint.c | |||
| @@ -188,7 +188,6 @@ static int tracepoint_add_func(struct tracepoint *tp, | |||
| 188 | WARN_ON_ONCE(1); | 188 | WARN_ON_ONCE(1); |
| 189 | return PTR_ERR(old); | 189 | return PTR_ERR(old); |
| 190 | } | 190 | } |
| 191 | release_probes(old); | ||
| 192 | 191 | ||
| 193 | /* | 192 | /* |
| 194 | * rcu_assign_pointer has a smp_wmb() which makes sure that the new | 193 | * rcu_assign_pointer has a smp_wmb() which makes sure that the new |
| @@ -200,6 +199,7 @@ static int tracepoint_add_func(struct tracepoint *tp, | |||
| 200 | rcu_assign_pointer(tp->funcs, tp_funcs); | 199 | rcu_assign_pointer(tp->funcs, tp_funcs); |
| 201 | if (!static_key_enabled(&tp->key)) | 200 | if (!static_key_enabled(&tp->key)) |
| 202 | static_key_slow_inc(&tp->key); | 201 | static_key_slow_inc(&tp->key); |
| 202 | release_probes(old); | ||
| 203 | return 0; | 203 | return 0; |
| 204 | } | 204 | } |
| 205 | 205 | ||
| @@ -221,7 +221,6 @@ static int tracepoint_remove_func(struct tracepoint *tp, | |||
| 221 | WARN_ON_ONCE(1); | 221 | WARN_ON_ONCE(1); |
| 222 | return PTR_ERR(old); | 222 | return PTR_ERR(old); |
| 223 | } | 223 | } |
| 224 | release_probes(old); | ||
| 225 | 224 | ||
| 226 | if (!tp_funcs) { | 225 | if (!tp_funcs) { |
| 227 | /* Removed last function */ | 226 | /* Removed last function */ |
| @@ -232,6 +231,7 @@ static int tracepoint_remove_func(struct tracepoint *tp, | |||
| 232 | static_key_slow_dec(&tp->key); | 231 | static_key_slow_dec(&tp->key); |
| 233 | } | 232 | } |
| 234 | rcu_assign_pointer(tp->funcs, tp_funcs); | 233 | rcu_assign_pointer(tp->funcs, tp_funcs); |
| 234 | release_probes(old); | ||
| 235 | return 0; | 235 | return 0; |
| 236 | } | 236 | } |
| 237 | 237 | ||
| @@ -239,6 +239,7 @@ static int tracepoint_remove_func(struct tracepoint *tp, | |||
| 239 | * tracepoint_probe_register - Connect a probe to a tracepoint | 239 | * tracepoint_probe_register - Connect a probe to a tracepoint |
| 240 | * @tp: tracepoint | 240 | * @tp: tracepoint |
| 241 | * @probe: probe handler | 241 | * @probe: probe handler |
| 242 | * @data: tracepoint data | ||
| 242 | * | 243 | * |
| 243 | * Returns 0 if ok, error value on error. | 244 | * Returns 0 if ok, error value on error. |
| 244 | * Note: if @tp is within a module, the caller is responsible for | 245 | * Note: if @tp is within a module, the caller is responsible for |
| @@ -264,6 +265,7 @@ EXPORT_SYMBOL_GPL(tracepoint_probe_register); | |||
| 264 | * tracepoint_probe_unregister - Disconnect a probe from a tracepoint | 265 | * tracepoint_probe_unregister - Disconnect a probe from a tracepoint |
| 265 | * @tp: tracepoint | 266 | * @tp: tracepoint |
| 266 | * @probe: probe function pointer | 267 | * @probe: probe function pointer |
| 268 | * @data: tracepoint data | ||
| 267 | * | 269 | * |
| 268 | * Returns 0 if ok, error value on error. | 270 | * Returns 0 if ok, error value on error. |
| 269 | */ | 271 | */ |
