aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/atomic.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/atomic.h')
-rw-r--r--include/linux/atomic.h34
1 files changed, 17 insertions, 17 deletions
diff --git a/include/linux/atomic.h b/include/linux/atomic.h
index df4f369254c0..506c3531832e 100644
--- a/include/linux/atomic.h
+++ b/include/linux/atomic.h
@@ -559,25 +559,25 @@ static inline int atomic_dec_if_positive(atomic_t *v)
559#endif 559#endif
560 560
561/** 561/**
562 * fetch_or - perform *ptr |= mask and return old value of *ptr 562 * atomic_fetch_or - perform *p |= mask and return old value of *p
563 * @ptr: pointer to value 563 * @p: pointer to atomic_t
564 * @mask: mask to OR on the value 564 * @mask: mask to OR on the atomic_t
565 *
566 * cmpxchg based fetch_or, macro so it works for different integer types
567 */ 565 */
568#ifndef fetch_or 566#ifndef atomic_fetch_or
569#define fetch_or(ptr, mask) \ 567static inline int atomic_fetch_or(atomic_t *p, int mask)
570({ typeof(*(ptr)) __old, __val = *(ptr); \ 568{
571 for (;;) { \ 569 int old, val = atomic_read(p);
572 __old = cmpxchg((ptr), __val, __val | (mask)); \ 570
573 if (__old == __val) \ 571 for (;;) {
574 break; \ 572 old = atomic_cmpxchg(p, val, val | mask);
575 __val = __old; \ 573 if (old == val)
576 } \ 574 break;
577 __old; \ 575 val = old;
578}) 576 }
579#endif
580 577
578 return old;
579}
580#endif
581 581
582#ifdef CONFIG_GENERIC_ATOMIC64 582#ifdef CONFIG_GENERIC_ATOMIC64
583#include <asm-generic/atomic64.h> 583#include <asm-generic/atomic64.h>