jump label: Tracepoint support for jump labels

Make use of the jump label infrastructure for tracepoints.

Signed-off-by: Jason Baron <[email protected]>
LKML-Reference: <a9ba2056e2c9cf332c3c300b577463ce66ff23a8.1284733808.git.jbaron@redhat.com>
Signed-off-by: Steven Rostedt <[email protected]>
This commit is contained in:
Jason Baron 2010-09-17 11:09:13 -04:00 • committed by Steven Rostedt
commit 8f7b50c514
2 changed files with 16 additions and 3 deletions

View file

@ -25,6 +25,7 @@
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/jump_label.h>
extern struct tracepoint __start___tracepoints[];
extern struct tracepoint __stop___tracepoints[];
@ -263,7 +264,13 @@ static void set_tracepoint(struct tracepoint_entry **entry,
* is used.
*/
rcu_assign_pointer(elem->funcs, (*entry)->funcs);
elem->state = active;
if (!elem->state && active) {
enable_jump_label(&elem->state);
elem->state = active;
} else if (elem->state && !active) {
disable_jump_label(&elem->state);
elem->state = active;
}
}
/*
@ -277,7 +284,10 @@ static void disable_tracepoint(struct tracepoint *elem)
if (elem->unregfunc && elem->state)
elem->unregfunc();
elem->state = 0;
if (elem->state) {
disable_jump_label(&elem->state);
elem->state = 0;
}
rcu_assign_pointer(elem->funcs, NULL);
}