aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/tracepoint.c
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>2008-11-14 17:47:46 -0500
committerIngo Molnar <mingo@elte.hu>2008-11-16 03:01:35 -0500
commit32f85742778dfc2c74975cf0b9f5bdb13470cb32 (patch)
treebec188e2772c3ebbf70b149d78bd36eb24d927c0 /kernel/tracepoint.c
parent5f382671def7cb9c0f4b75d586dc5f60dca5e1c3 (diff)
tracepoints: use modules notifiers
Impact: cleanup Use module notifiers for tracepoint updates rather than adding a hook in module.c. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> Signed-off-by: Ingo Molnar <mingo@elte.hu>
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);