Messages in this thread Patch in this message |  | | | Date | Thu, 14 Oct 2010 22:34:09 +0200 | | From | Peter Zijlstra <> | | Subject | [RFC][PATCH 5/7] jump_label: 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> --- include/linux/jump_label_ref.h | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) Index: linux-2.6/include/linux/jump_label_ref.h =================================================================== --- /dev/null +++ linux-2.6/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 */
|  |