lkml.org 
[lkml]   [2010]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] jump_label: Add atomic_t interface
    Commit-ID:  8b92538d84e50062560ba33adbaed7887b6e4a42
    Gitweb: http://git.kernel.org/tip/8b92538d84e50062560ba33adbaed7887b6e4a42
    Author: Peter Zijlstra <a.p.zijlstra@chello.nl>
    AuthorDate: Thu, 14 Oct 2010 21:39:02 +0200
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Mon, 18 Oct 2010 19:58:57 +0200

    jump_label: Add atomic_t interface

    Add an interface to allow usage of jump_labels with atomic counters.

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
    LKML-Reference: <20101014203625.501657727@chello.nl>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    ---
    include/linux/jump_label_ref.h | 44 ++++++++++++++++++++++++++++++++++++++++
    1 files changed, 44 insertions(+), 0 deletions(-)

    diff --git a/include/linux/jump_label_ref.h b/include/linux/jump_label_ref.h
    new file mode 100644
    index 0000000..e5d012a
    --- /dev/null
    +++ b/include/linux/jump_label_ref.h
    @@ -0,0 +1,44 @@
    +#ifndef _LINUX_JUMP_LABEL_REF_H
    +#define _LINUX_JUMP_LABEL_REF_H
    +
    +#include <linux/jump_label.h>
    +#include <asm/atomic.h>
    +
    +#ifdef HAVE_JUMP_LABEL
    +
    +static inline void jump_label_inc(atomic_t *key)
    +{
    + if (atomic_add_return(1, key) == 1)
    + jump_label_enable(key);
    +}
    +
    +static inline void jump_label_dec(atomic_t *key)
    +{
    + if (atomic_dec_and_test(key))
    + jump_label_disable(key);
    +}
    +
    +#else /* !HAVE_JUMP_LABEL */
    +
    +static inline void jump_label_inc(atomic_t *key)
    +{
    + atomic_inc(key);
    +}
    +
    +static inline void jump_label_dec(atomic_t *key)
    +{
    + atomic_dec(key);
    +}
    +
    +#undef JUMP_LABEL
    +#define JUMP_LABEL(key, label) \
    +do { \
    + if (unlikely(__builtin_choose_expr( \
    + __builtin_types_compatible_p(typeof(key), atomic_t *), \
    + atomic_read((atomic_t *)(key)), *(key)))) \
    + goto label; \
    +} while (0)
    +
    +#endif /* HAVE_JUMP_LABEL */
    +
    +#endif /* _LINUX_JUMP_LABEL_REF_H */

    \
     
     \ /
      Last update: 2010-10-18 21:25    [W:4.108 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site