Messages in this thread Patch in this message | | | From | Joe Perches <> | Subject | [PATCH V2 1/3] kernel.h: Add DO_ONCE statement expression macro | Date | Thu, 21 May 2009 21:27:30 -0700 |
| |
Add a DO_ONCE statement expression analogous to printk_once that executes any arbitrary statement exactly once.
This will take the place of printk_once so that DO_ONCE(pr_<foo>) can be more easily written.
Signed-off-by: Joe Perches <joe@perches.com> --- include/linux/kernel.h | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 883cd44..179fdac 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -637,6 +637,17 @@ static inline void ftrace_dump(void) { } #define swap(a, b) \ do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) +/* + * Do something once (analogous to WARN_ONCE() et al): + */ +#define DO_ONCE(x...) ({ \ + static unsigned long __done; \ + \ + if (!test_and_set_bit(0, &__done)) { \ + x; \ + } \ +}) + /** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. -- 1.6.3.1.10.g659a0.dirty
| |