diff options
Diffstat (limited to 'kernel/tracepoint.c')
| -rw-r--r-- | kernel/tracepoint.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c index e95ee7f31d43..68187af4889e 100644 --- a/kernel/tracepoint.c +++ b/kernel/tracepoint.c | |||
| @@ -27,8 +27,8 @@ | |||
| 27 | #include <linux/sched.h> | 27 | #include <linux/sched.h> |
| 28 | #include <linux/jump_label.h> | 28 | #include <linux/jump_label.h> |
| 29 | 29 | ||
| 30 | extern struct tracepoint __start___tracepoints[]; | 30 | extern struct tracepoint * const __start___tracepoints_ptrs[]; |
| 31 | extern struct tracepoint __stop___tracepoints[]; | 31 | extern struct tracepoint * const __stop___tracepoints_ptrs[]; |
| 32 | 32 | ||
| 33 | /* Set to 1 to enable tracepoint debug output */ | 33 | /* Set to 1 to enable tracepoint debug output */ |
| 34 | static const int tracepoint_debug; | 34 | static const int tracepoint_debug; |
| @@ -298,10 +298,10 @@ static void disable_tracepoint(struct tracepoint *elem) | |||
| 298 | * | 298 | * |
| 299 | * Updates the probe callback corresponding to a range of tracepoints. | 299 | * Updates the probe callback corresponding to a range of tracepoints. |
| 300 | */ | 300 | */ |
| 301 | void | 301 | void tracepoint_update_probe_range(struct tracepoint * const *begin, |
| 302 | tracepoint_update_probe_range(struct tracepoint *begin, struct tracepoint *end) | 302 | struct tracepoint * const *end) |
| 303 | { | 303 | { |
| 304 | struct tracepoint *iter; | 304 | struct tracepoint * const *iter; |
| 305 | struct tracepoint_entry *mark_entry; | 305 | struct tracepoint_entry *mark_entry; |
| 306 | 306 | ||
| 307 | if (!begin) | 307 | if (!begin) |
| @@ -309,12 +309,12 @@ tracepoint_update_probe_range(struct tracepoint *begin, struct tracepoint *end) | |||
| 309 | 309 | ||
| 310 | mutex_lock(&tracepoints_mutex); | 310 | mutex_lock(&tracepoints_mutex); |
| 311 | for (iter = begin; iter < end; iter++) { | 311 | for (iter = begin; iter < end; iter++) { |
| 312 | mark_entry = get_tracepoint(iter->name); | 312 | mark_entry = get_tracepoint((*iter)->name); |
| 313 | if (mark_entry) { | 313 | if (mark_entry) { |
| 314 | set_tracepoint(&mark_entry, iter, | 314 | set_tracepoint(&mark_entry, *iter, |
| 315 | !!mark_entry->refcount); | 315 | !!mark_entry->refcount); |
| 316 | } else { | 316 | } else { |
| 317 | disable_tracepoint(iter); | 317 | disable_tracepoint(*iter); |
| 318 | } | 318 | } |
| 319 | } | 319 | } |
| 320 | mutex_unlock(&tracepoints_mutex); | 320 | mutex_unlock(&tracepoints_mutex); |
| @@ -326,8 +326,8 @@ tracepoint_update_probe_range(struct tracepoint *begin, struct tracepoint *end) | |||
| 326 | static void tracepoint_update_probes(void) | 326 | static void tracepoint_update_probes(void) |
| 327 | { | 327 | { |
| 328 | /* Core kernel tracepoints */ | 328 | /* Core kernel tracepoints */ |
| 329 | tracepoint_update_probe_range(__start___tracepoints, | 329 | tracepoint_update_probe_range(__start___tracepoints_ptrs, |
| 330 | __stop___tracepoints); | 330 | __stop___tracepoints_ptrs); |
| 331 | /* tracepoints in modules. */ | 331 | /* tracepoints in modules. */ |
| 332 | module_update_tracepoints(); | 332 | module_update_tracepoints(); |
| 333 | } | 333 | } |
| @@ -514,8 +514,8 @@ EXPORT_SYMBOL_GPL(tracepoint_probe_update_all); | |||
| 514 | * Will return the first tracepoint in the range if the input tracepoint is | 514 | * Will return the first tracepoint in the range if the input tracepoint is |
| 515 | * NULL. | 515 | * NULL. |
| 516 | */ | 516 | */ |
| 517 | int tracepoint_get_iter_range(struct tracepoint **tracepoint, | 517 | int tracepoint_get_iter_range(struct tracepoint * const **tracepoint, |
| 518 | struct tracepoint *begin, struct tracepoint *end) | 518 | struct tracepoint * const *begin, struct tracepoint * const *end) |
| 519 | { | 519 | { |
| 520 | if (!*tracepoint && begin != end) { | 520 | if (!*tracepoint && begin != end) { |
| 521 | *tracepoint = begin; | 521 | *tracepoint = begin; |
| @@ -534,7 +534,8 @@ static void tracepoint_get_iter(struct tracepoint_iter *iter) | |||
| 534 | /* Core kernel tracepoints */ | 534 | /* Core kernel tracepoints */ |
| 535 | if (!iter->module) { | 535 | if (!iter->module) { |
| 536 | found = tracepoint_get_iter_range(&iter->tracepoint, | 536 | found = tracepoint_get_iter_range(&iter->tracepoint, |
| 537 | __start___tracepoints, __stop___tracepoints); | 537 | __start___tracepoints_ptrs, |
| 538 | __stop___tracepoints_ptrs); | ||
| 538 | if (found) | 539 | if (found) |
| 539 | goto end; | 540 | goto end; |
| 540 | } | 541 | } |
| @@ -585,8 +586,8 @@ int tracepoint_module_notify(struct notifier_block *self, | |||
| 585 | switch (val) { | 586 | switch (val) { |
| 586 | case MODULE_STATE_COMING: | 587 | case MODULE_STATE_COMING: |
| 587 | case MODULE_STATE_GOING: | 588 | case MODULE_STATE_GOING: |
| 588 | tracepoint_update_probe_range(mod->tracepoints, | 589 | tracepoint_update_probe_range(mod->tracepoints_ptrs, |
| 589 | mod->tracepoints + mod->num_tracepoints); | 590 | mod->tracepoints_ptrs + mod->num_tracepoints); |
| 590 | break; | 591 | break; |
| 591 | } | 592 | } |
| 592 | return 0; | 593 | return 0; |
