forked from mirrors/linux
		
	atomic: Export fetch_or()
Export fetch_or() that's implemented and used internally by the scheduler. We are going to use it for NO_HZ so make it generally available. Reviewed-by: Chris Metcalf <cmetcalf@ezchip.com> Cc: Christoph Lameter <cl@linux.com> Cc: Chris Metcalf <cmetcalf@ezchip.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Luiz Capitulino <lcapitulino@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
This commit is contained in:
		
							parent
							
								
									36f90b0a2d
								
							
						
					
					
						commit
						5fd7a09cfb
					
				
					 2 changed files with 21 additions and 14 deletions
				
			
		|  | @ -548,6 +548,27 @@ static inline int atomic_dec_if_positive(atomic_t *v) | |||
| } | ||||
| #endif | ||||
| 
 | ||||
| /**
 | ||||
|  * fetch_or - perform *ptr |= mask and return old value of *ptr | ||||
|  * @ptr: pointer to value | ||||
|  * @mask: mask to OR on the value | ||||
|  * | ||||
|  * cmpxchg based fetch_or, macro so it works for different integer types | ||||
|  */ | ||||
| #ifndef fetch_or | ||||
| #define fetch_or(ptr, mask)						\ | ||||
| ({	typeof(*(ptr)) __old, __val = *(ptr);				\ | ||||
| 	for (;;) {							\ | ||||
| 		__old = cmpxchg((ptr), __val, __val | (mask));		\ | ||||
| 		if (__old == __val)					\ | ||||
| 			break;						\ | ||||
| 		__val = __old;						\ | ||||
| 	}								\ | ||||
| 	__old;								\ | ||||
| }) | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #ifdef CONFIG_GENERIC_ATOMIC64 | ||||
| #include <asm-generic/atomic64.h> | ||||
| #endif | ||||
|  |  | |||
|  | @ -453,20 +453,6 @@ static inline void init_hrtick(void) | |||
| } | ||||
| #endif	/* CONFIG_SCHED_HRTICK */ | ||||
| 
 | ||||
| /*
 | ||||
|  * cmpxchg based fetch_or, macro so it works for different integer types | ||||
|  */ | ||||
| #define fetch_or(ptr, val)						\ | ||||
| ({	typeof(*(ptr)) __old, __val = *(ptr);				\ | ||||
|  	for (;;) {							\ | ||||
|  		__old = cmpxchg((ptr), __val, __val | (val));		\ | ||||
|  		if (__old == __val)					\ | ||||
|  			break;						\ | ||||
|  		__val = __old;						\ | ||||
|  	}								\ | ||||
|  	__old;								\ | ||||
| }) | ||||
| 
 | ||||
| #if defined(CONFIG_SMP) && defined(TIF_POLLING_NRFLAG) | ||||
| /*
 | ||||
|  * Atomically set TIF_NEED_RESCHED and test for TIF_POLLING_NRFLAG, | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Frederic Weisbecker
						Frederic Weisbecker