[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1300305973.16880.47.camel@gandalf.stny.rr.com>
Date: Wed, 16 Mar 2011 16:06:13 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: Jason Baron <jbaron@...hat.com>
Cc: peterz@...radead.org, hpa@...or.com, mathieu.desnoyers@...ymtl.ca,
mingo@...e.hu, tglx@...utronix.de, andi@...stfloor.org,
roland@...hat.com, rth@...hat.com, masami.hiramatsu.pt@...achi.com,
fweisbec@...il.com, avi@...hat.com, davem@...emloft.net,
sam@...nborg.org, ddaney@...iumnetworks.com,
michael@...erman.id.au, ralf@...ux-mips.org,
jang@...ux.vnet.ibm.com, schwidefsky@...ibm.com,
linux-kernel@...r.kernel.org
Subject: Need ack from sparc maintainer (was: [PATCH 1/4] jump label:
introduce static_branch() interface)
On Wed, 2011-03-16 at 15:58 -0400, Jason Baron wrote:
> 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@...llo.nl>
> Signed-off-by: Jason Baron <jbaron@...hat.com>
> Suggested-by: H. Peter Anvin <hpa@...ux.intel.com>
> Tested-by: David Daney <ddaney@...iumnetworks.com>
> Acked-by: Ralf Baechle <ralf@...ux-mips.org>
> ---
> arch/mips/include/asm/jump_label.h | 22 +-
> arch/sparc/include/asm/jump_label.h | 25 +-
Hi David,
Can you give your Acked-by for this change.
Thanks,
-- Steve
> arch/x86/include/asm/alternative.h | 3 +-
> arch/x86/include/asm/jump_label.h | 26 +-
> arch/x86/kernel/alternative.c | 2 +-
> arch/x86/kernel/module.c | 1 +
> include/asm-generic/vmlinux.lds.h | 14 +-
> include/linux/dynamic_debug.h | 2 -
> include/linux/jump_label.h | 89 ++++---
> include/linux/jump_label_ref.h | 44 ---
> include/linux/perf_event.h | 26 +-
> include/linux/tracepoint.h | 22 +-
> kernel/jump_label.c | 539 ++++++++++++++---------------------
> kernel/perf_event.c | 4 +-
> kernel/tracepoint.c | 23 +-
> 15 files changed, 356 insertions(+), 486 deletions(-)
> delete mode 100644 include/linux/jump_label_ref.h
>
> diff --git a/arch/sparc/include/asm/jump_label.h b/arch/sparc/include/asm/jump_label.h
> index 427d468..fc73a82 100644
> --- a/arch/sparc/include/asm/jump_label.h
> +++ b/arch/sparc/include/asm/jump_label.h
> @@ -7,17 +7,20 @@
>
> #define JUMP_LABEL_NOP_SIZE 4
>
> -#define JUMP_LABEL(key, label) \
> - do { \
> - asm goto("1:\n\t" \
> - "nop\n\t" \
> - "nop\n\t" \
> - ".pushsection __jump_table, \"a\"\n\t"\
> - ".align 4\n\t" \
> - ".word 1b, %l[" #label "], %c0\n\t" \
> - ".popsection \n\t" \
> - : : "i" (key) : : label);\
> - } while (0)
> +static __always_inline bool arch_static_branch(struct jump_label_key *key)
> +{
> + asm goto("1:\n\t"
> + "nop\n\t"
> + "nop\n\t"
> + ".pushsection __jump_table, \"aw\"\n\t"
> + ".align 4\n\t"
> + ".word 1b, %l[l_yes], %c0\n\t"
> + ".popsection \n\t"
> + : : "i" (key) : : l_yes);
> + return false;
> +l_yes:
> + return true;
> +}
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists