-
- Downloads
jump label: Introduce static_branch() interface
Introduce: static __always_inline bool static_branch(struct jump_label_key *key); instead of the old JUMP_LABEL(key, label) macro. In this way, jump labels become really easy to use: Define: struct jump_label_key jump_key; Can be used as: if (static_branch(&jump_key)) do unlikely code enable/disale via: jump_label_inc(&jump_key); jump_label_dec(&jump_key); that's it! For the jump labels disabled case, the static_branch() becomes an atomic_read(), and jump_label_inc()/dec() are simply atomic_inc(), atomic_dec() operations. We show testing results for this change below. Thanks to H. Peter Anvin for suggesting the 'static_branch()' construct. Since we now require a 'struct jump_label_key *key', we can store a pointer into the jump table addresses. In this way, we can enable/disable jump labels, in basically constant time. This change allows us to completely remove the previous hashtable scheme. Thanks to Peter Zijlstra for this re-write. Testing: I ran a series of 'tbench 20' runs 5 times (with reboots) for 3 configurations, where tracepoints were disabled. jump label configured in avg: 815.6 jump label *not* configured in (using atomic reads) avg: 800.1 jump label *not* configured in (regular reads) avg: 803.4 Signed-off-by:Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <20110316212947.GA8792@redhat.com> Signed-off-by:
Jason Baron <jbaron@redhat.com> Suggested-by:
H. Peter Anvin <hpa@linux.intel.com> Tested-by:
David Daney <ddaney@caviumnetworks.com> Acked-by:
Ralf Baechle <ralf@linux-mips.org> Acked-by:
David S. Miller <davem@davemloft.net> Acked-by:
Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by:
Steven Rostedt <rostedt@goodmis.org>
Showing
- arch/mips/include/asm/jump_label.h 12 additions, 10 deletionsarch/mips/include/asm/jump_label.h
- arch/sparc/include/asm/jump_label.h 14 additions, 11 deletionsarch/sparc/include/asm/jump_label.h
- arch/x86/include/asm/alternative.h 1 addition, 2 deletionsarch/x86/include/asm/alternative.h
- arch/x86/include/asm/jump_label.h 15 additions, 11 deletionsarch/x86/include/asm/jump_label.h
- arch/x86/kernel/alternative.c 1 addition, 1 deletionarch/x86/kernel/alternative.c
- arch/x86/kernel/module.c 1 addition, 0 deletionsarch/x86/kernel/module.c
- include/asm-generic/vmlinux.lds.h 4 additions, 10 deletionsinclude/asm-generic/vmlinux.lds.h
- include/linux/dynamic_debug.h 0 additions, 2 deletionsinclude/linux/dynamic_debug.h
- include/linux/jump_label.h 56 additions, 33 deletionsinclude/linux/jump_label.h
- include/linux/jump_label_ref.h 0 additions, 44 deletionsinclude/linux/jump_label_ref.h
- include/linux/perf_event.h 13 additions, 13 deletionsinclude/linux/perf_event.h
- include/linux/tracepoint.h 10 additions, 12 deletionsinclude/linux/tracepoint.h
- kernel/jump_label.c 218 additions, 321 deletionskernel/jump_label.c
- kernel/perf_event.c 2 additions, 2 deletionskernel/perf_event.c
- kernel/tracepoint.c 9 additions, 14 deletionskernel/tracepoint.c
Loading
Please register or sign in to comment