aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/tracepoint.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/tracepoint.c')
-rw-r--r--kernel/tracepoint.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c
index 47a7303d6cd9..94ac4e35530d 100644
--- a/kernel/tracepoint.c
+++ b/kernel/tracepoint.c
@@ -541,3 +541,32 @@ void tracepoint_iter_reset(struct tracepoint_iter *iter)
541 iter->tracepoint = NULL; 541 iter->tracepoint = NULL;
542} 542}
543EXPORT_SYMBOL_GPL(tracepoint_iter_reset); 543EXPORT_SYMBOL_GPL(tracepoint_iter_reset);
544
545int tracepoint_module_notify(struct notifier_block *self,
546 unsigned long val, void *data)
547{
548 struct module *mod = data;
549
550 switch (val) {
551 case MODULE_STATE_COMING:
552 tracepoint_update_probe_range(mod->tracepoints,
553 mod->tracepoints + mod->num_tracepoints);
554 break;
555 case MODULE_STATE_GOING:
556 tracepoint_update_probe_range(mod->tracepoints,
557 mod->tracepoints + mod->num_tracepoints);
558 break;
559 }
560 return 0;
561}
562
563struct notifier_block tracepoint_module_nb = {
564 .notifier_call = tracepoint_module_notify,
565 .priority = 0,
566};
567
568static int init_tracepoints(void)
569{
570 return register_module_notifier(&tracepoint_module_nb);
571}
572__initcall(init_tracepoints);