diff options
author | Jason Baron <jbaron@redhat.com> | 2010-09-17 11:09:00 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-09-22 16:29:41 -0400 |
commit | bf5438fca2950b03c21ad868090cc1a8fcd49536 (patch) | |
tree | 9fc5693763263704de8d8ba1c37a84172dbe5eb7 /kernel/module.c | |
parent | fa6f2cc77081792e4edca9168420a3422299ef15 (diff) |
jump label: Base patch for jump label
base patch to implement 'jump labeling'. Based on a new 'asm goto' inline
assembly gcc mechanism, we can now branch to labels from an 'asm goto'
statment. This allows us to create a 'no-op' fastpath, which can subsequently
be patched with a jump to the slowpath code. This is useful for code which
might be rarely used, but which we'd like to be able to call, if needed.
Tracepoints are the current usecase that these are being implemented for.
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jason Baron <jbaron@redhat.com>
LKML-Reference: <ee8b3595967989fdaf84e698dc7447d315ce972a.1284733808.git.jbaron@redhat.com>
[ cleaned up some formating ]
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/module.c')
-rw-r--r-- | kernel/module.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/module.c b/kernel/module.c index d0b5f8db11b4..eba134157ef6 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
@@ -55,6 +55,7 @@ | |||
55 | #include <linux/async.h> | 55 | #include <linux/async.h> |
56 | #include <linux/percpu.h> | 56 | #include <linux/percpu.h> |
57 | #include <linux/kmemleak.h> | 57 | #include <linux/kmemleak.h> |
58 | #include <linux/jump_label.h> | ||
58 | 59 | ||
59 | #define CREATE_TRACE_POINTS | 60 | #define CREATE_TRACE_POINTS |
60 | #include <trace/events/module.h> | 61 | #include <trace/events/module.h> |
@@ -2308,6 +2309,11 @@ static void find_module_sections(struct module *mod, struct load_info *info) | |||
2308 | sizeof(*mod->tracepoints), | 2309 | sizeof(*mod->tracepoints), |
2309 | &mod->num_tracepoints); | 2310 | &mod->num_tracepoints); |
2310 | #endif | 2311 | #endif |
2312 | #ifdef HAVE_JUMP_LABEL | ||
2313 | mod->jump_entries = section_objs(info, "__jump_table", | ||
2314 | sizeof(*mod->jump_entries), | ||
2315 | &mod->num_jump_entries); | ||
2316 | #endif | ||
2311 | #ifdef CONFIG_EVENT_TRACING | 2317 | #ifdef CONFIG_EVENT_TRACING |
2312 | mod->trace_events = section_objs(info, "_ftrace_events", | 2318 | mod->trace_events = section_objs(info, "_ftrace_events", |
2313 | sizeof(*mod->trace_events), | 2319 | sizeof(*mod->trace_events), |