| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #ifndef _ASM_GENERIC_PERCPU_H_
 | 
					
						
							|  |  |  | #define _ASM_GENERIC_PERCPU_H_
 | 
					
						
							| 
									
										
										
										
											2009-04-21 23:00:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <linux/compiler.h>
 | 
					
						
							| 
									
										
										
										
											2007-05-02 19:27:10 +02:00
										 |  |  | #include <linux/threads.h>
 | 
					
						
							| 
									
										
										
										
											2009-04-21 23:00:29 +01:00
										 |  |  | #include <linux/percpu-defs.h>
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:32:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #ifdef CONFIG_SMP
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:32:52 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * per_cpu_offset() is the offset that has to be added to a | 
					
						
							|  |  |  |  * percpu variable to get to the instance for a certain processor. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Most arches use the __per_cpu_offset array for those offsets but | 
					
						
							|  |  |  |  * some arches have their own ways of determining the offset (x86_64, s390). | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef __per_cpu_offset
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | extern unsigned long __per_cpu_offset[NR_CPUS]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-03 00:24:26 -07:00
										 |  |  | #define per_cpu_offset(x) (__per_cpu_offset[x])
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:32:52 +01:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Determine the offset for the currently active processor. | 
					
						
							|  |  |  |  * An arch may define __my_cpu_offset to provide a more effective | 
					
						
							|  |  |  |  * means of obtaining the offset to the per cpu variables of the | 
					
						
							|  |  |  |  * current processor. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef __my_cpu_offset
 | 
					
						
							|  |  |  | #define __my_cpu_offset per_cpu_offset(raw_smp_processor_id())
 | 
					
						
							| 
									
										
										
										
											2008-02-23 19:40:17 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef CONFIG_DEBUG_PREEMPT
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:32:52 +01:00
										 |  |  | #define my_cpu_offset per_cpu_offset(smp_processor_id())
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define my_cpu_offset __my_cpu_offset
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:34 -04:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Arch may define arch_raw_cpu_ptr() to provide more efficient address | 
					
						
							|  |  |  |  * translations for raw_cpu_ptr(). | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef arch_raw_cpu_ptr
 | 
					
						
							|  |  |  | #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
 | 
					
						
							| 
									
										
										
										
											2010-09-09 18:17:26 +02:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:34 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:33:32 +01:00
										 |  |  | #ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:32:52 +01:00
										 |  |  | extern void setup_per_cpu_areas(void); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif	/* SMP */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-21 23:00:24 +01:00
										 |  |  | #ifndef PER_CPU_BASE_SECTION
 | 
					
						
							|  |  |  | #ifdef CONFIG_SMP
 | 
					
						
							| 
									
										
										
										
											2010-02-20 01:03:43 +01:00
										 |  |  | #define PER_CPU_BASE_SECTION ".data..percpu"
 | 
					
						
							| 
									
										
										
										
											2009-04-21 23:00:24 +01:00
										 |  |  | #else
 | 
					
						
							|  |  |  | #define PER_CPU_BASE_SECTION ".data"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:32:52 +01:00
										 |  |  | #ifndef PER_CPU_ATTRIBUTES
 | 
					
						
							|  |  |  | #define PER_CPU_ATTRIBUTES
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-30 11:41:18 -07:00
										 |  |  | #ifndef PER_CPU_DEF_ATTRIBUTES
 | 
					
						
							|  |  |  | #define PER_CPU_DEF_ATTRIBUTES
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | #define raw_cpu_generic_to_op(pcp, val, op)				\
 | 
					
						
							|  |  |  | do {									\ | 
					
						
							|  |  |  | 	*raw_cpu_ptr(&(pcp)) op val;					\ | 
					
						
							|  |  |  | } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define raw_cpu_generic_add_return(pcp, val)				\
 | 
					
						
							|  |  |  | ({									\ | 
					
						
							|  |  |  | 	raw_cpu_add(pcp, val);						\ | 
					
						
							|  |  |  | 	raw_cpu_read(pcp);						\ | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define raw_cpu_generic_xchg(pcp, nval)					\
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | ({									\ | 
					
						
							|  |  |  | 	typeof(pcp) __ret;						\ | 
					
						
							|  |  |  | 	__ret = raw_cpu_read(pcp);					\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 	raw_cpu_write(pcp, nval);					\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	__ret;								\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define raw_cpu_generic_cmpxchg(pcp, oval, nval)			\
 | 
					
						
							|  |  |  | ({									\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	typeof(pcp) __ret;						\ | 
					
						
							|  |  |  | 	__ret = raw_cpu_read(pcp);					\ | 
					
						
							|  |  |  | 	if (__ret == (oval))						\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 		raw_cpu_write(pcp, nval);				\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	__ret;								\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #define raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) \
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | ({									\ | 
					
						
							|  |  |  | 	int __ret = 0;							\ | 
					
						
							|  |  |  | 	if (raw_cpu_read(pcp1) == (oval1) &&				\ | 
					
						
							|  |  |  | 			 raw_cpu_read(pcp2)  == (oval2)) {		\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 		raw_cpu_write(pcp1, nval1);				\ | 
					
						
							|  |  |  | 		raw_cpu_write(pcp2, nval2);				\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 		__ret = 1;						\ | 
					
						
							|  |  |  | 	}								\ | 
					
						
							|  |  |  | 	(__ret);							\ | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #define this_cpu_generic_read(pcp)					\
 | 
					
						
							|  |  |  | ({									\ | 
					
						
							|  |  |  | 	typeof(pcp) __ret;						\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 	preempt_disable();						\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	__ret = *this_cpu_ptr(&(pcp));					\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 	preempt_enable();						\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	__ret;								\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #define this_cpu_generic_to_op(pcp, val, op)				\
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | do {									\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	unsigned long __flags;						\ | 
					
						
							|  |  |  | 	raw_local_irq_save(__flags);					\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 	*raw_cpu_ptr(&(pcp)) op val;					\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	raw_local_irq_restore(__flags);					\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #define this_cpu_generic_add_return(pcp, val)				\
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | ({									\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	typeof(pcp) __ret;						\ | 
					
						
							|  |  |  | 	unsigned long __flags;						\ | 
					
						
							|  |  |  | 	raw_local_irq_save(__flags);					\ | 
					
						
							|  |  |  | 	raw_cpu_add(pcp, val);						\ | 
					
						
							|  |  |  | 	__ret = raw_cpu_read(pcp);					\ | 
					
						
							|  |  |  | 	raw_local_irq_restore(__flags);					\ | 
					
						
							|  |  |  | 	__ret;								\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #define this_cpu_generic_xchg(pcp, nval)				\
 | 
					
						
							|  |  |  | ({									\ | 
					
						
							|  |  |  | 	typeof(pcp) __ret;						\ | 
					
						
							|  |  |  | 	unsigned long __flags;						\ | 
					
						
							|  |  |  | 	raw_local_irq_save(__flags);					\ | 
					
						
							|  |  |  | 	__ret = raw_cpu_read(pcp);					\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 	raw_cpu_write(pcp, nval);					\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	raw_local_irq_restore(__flags);					\ | 
					
						
							|  |  |  | 	__ret;								\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #define this_cpu_generic_cmpxchg(pcp, oval, nval)			\
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | ({									\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	typeof(pcp) __ret;						\ | 
					
						
							|  |  |  | 	unsigned long __flags;						\ | 
					
						
							|  |  |  | 	raw_local_irq_save(__flags);					\ | 
					
						
							|  |  |  | 	__ret = raw_cpu_read(pcp);					\ | 
					
						
							|  |  |  | 	if (__ret == (oval))						\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 		raw_cpu_write(pcp, nval);				\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	raw_local_irq_restore(__flags);					\ | 
					
						
							|  |  |  | 	__ret;								\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #define this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2)	\
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | ({									\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	int __ret;							\ | 
					
						
							|  |  |  | 	unsigned long __flags;						\ | 
					
						
							|  |  |  | 	raw_local_irq_save(__flags);					\ | 
					
						
							|  |  |  | 	__ret = raw_cpu_generic_cmpxchg_double(pcp1, pcp2,		\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 			oval1, oval2, nval1, nval2);			\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | 	raw_local_irq_restore(__flags);					\ | 
					
						
							|  |  |  | 	__ret;								\ | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #ifndef raw_cpu_read_1
 | 
					
						
							|  |  |  | #define raw_cpu_read_1(pcp)		(*raw_cpu_ptr(&(pcp)))
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_read_2
 | 
					
						
							|  |  |  | #define raw_cpu_read_2(pcp)		(*raw_cpu_ptr(&(pcp)))
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_read_4
 | 
					
						
							|  |  |  | #define raw_cpu_read_4(pcp)		(*raw_cpu_ptr(&(pcp)))
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_read_8
 | 
					
						
							|  |  |  | #define raw_cpu_read_8(pcp)		(*raw_cpu_ptr(&(pcp)))
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef raw_cpu_write_1
 | 
					
						
							|  |  |  | #define raw_cpu_write_1(pcp, val)	raw_cpu_generic_to_op(pcp, val, =)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_write_2
 | 
					
						
							|  |  |  | #define raw_cpu_write_2(pcp, val)	raw_cpu_generic_to_op(pcp, val, =)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_write_4
 | 
					
						
							|  |  |  | #define raw_cpu_write_4(pcp, val)	raw_cpu_generic_to_op(pcp, val, =)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_write_8
 | 
					
						
							|  |  |  | #define raw_cpu_write_8(pcp, val)	raw_cpu_generic_to_op(pcp, val, =)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef raw_cpu_add_1
 | 
					
						
							|  |  |  | #define raw_cpu_add_1(pcp, val)		raw_cpu_generic_to_op(pcp, val, +=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_add_2
 | 
					
						
							|  |  |  | #define raw_cpu_add_2(pcp, val)		raw_cpu_generic_to_op(pcp, val, +=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_add_4
 | 
					
						
							|  |  |  | #define raw_cpu_add_4(pcp, val)		raw_cpu_generic_to_op(pcp, val, +=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_add_8
 | 
					
						
							|  |  |  | #define raw_cpu_add_8(pcp, val)		raw_cpu_generic_to_op(pcp, val, +=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef raw_cpu_and_1
 | 
					
						
							|  |  |  | #define raw_cpu_and_1(pcp, val)		raw_cpu_generic_to_op(pcp, val, &=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_and_2
 | 
					
						
							|  |  |  | #define raw_cpu_and_2(pcp, val)		raw_cpu_generic_to_op(pcp, val, &=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_and_4
 | 
					
						
							|  |  |  | #define raw_cpu_and_4(pcp, val)		raw_cpu_generic_to_op(pcp, val, &=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_and_8
 | 
					
						
							|  |  |  | #define raw_cpu_and_8(pcp, val)		raw_cpu_generic_to_op(pcp, val, &=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef raw_cpu_or_1
 | 
					
						
							|  |  |  | #define raw_cpu_or_1(pcp, val)		raw_cpu_generic_to_op(pcp, val, |=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_or_2
 | 
					
						
							|  |  |  | #define raw_cpu_or_2(pcp, val)		raw_cpu_generic_to_op(pcp, val, |=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_or_4
 | 
					
						
							|  |  |  | #define raw_cpu_or_4(pcp, val)		raw_cpu_generic_to_op(pcp, val, |=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_or_8
 | 
					
						
							|  |  |  | #define raw_cpu_or_8(pcp, val)		raw_cpu_generic_to_op(pcp, val, |=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef raw_cpu_add_return_1
 | 
					
						
							|  |  |  | #define raw_cpu_add_return_1(pcp, val)	raw_cpu_generic_add_return(pcp, val)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_add_return_2
 | 
					
						
							|  |  |  | #define raw_cpu_add_return_2(pcp, val)	raw_cpu_generic_add_return(pcp, val)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_add_return_4
 | 
					
						
							|  |  |  | #define raw_cpu_add_return_4(pcp, val)	raw_cpu_generic_add_return(pcp, val)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_add_return_8
 | 
					
						
							|  |  |  | #define raw_cpu_add_return_8(pcp, val)	raw_cpu_generic_add_return(pcp, val)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef raw_cpu_xchg_1
 | 
					
						
							|  |  |  | #define raw_cpu_xchg_1(pcp, nval)	raw_cpu_generic_xchg(pcp, nval)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_xchg_2
 | 
					
						
							|  |  |  | #define raw_cpu_xchg_2(pcp, nval)	raw_cpu_generic_xchg(pcp, nval)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_xchg_4
 | 
					
						
							|  |  |  | #define raw_cpu_xchg_4(pcp, nval)	raw_cpu_generic_xchg(pcp, nval)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_xchg_8
 | 
					
						
							|  |  |  | #define raw_cpu_xchg_8(pcp, nval)	raw_cpu_generic_xchg(pcp, nval)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef raw_cpu_cmpxchg_1
 | 
					
						
							|  |  |  | #define raw_cpu_cmpxchg_1(pcp, oval, nval) \
 | 
					
						
							|  |  |  | 	raw_cpu_generic_cmpxchg(pcp, oval, nval) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_cmpxchg_2
 | 
					
						
							|  |  |  | #define raw_cpu_cmpxchg_2(pcp, oval, nval) \
 | 
					
						
							|  |  |  | 	raw_cpu_generic_cmpxchg(pcp, oval, nval) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_cmpxchg_4
 | 
					
						
							|  |  |  | #define raw_cpu_cmpxchg_4(pcp, oval, nval) \
 | 
					
						
							|  |  |  | 	raw_cpu_generic_cmpxchg(pcp, oval, nval) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_cmpxchg_8
 | 
					
						
							|  |  |  | #define raw_cpu_cmpxchg_8(pcp, oval, nval) \
 | 
					
						
							|  |  |  | 	raw_cpu_generic_cmpxchg(pcp, oval, nval) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef raw_cpu_cmpxchg_double_1
 | 
					
						
							|  |  |  | #define raw_cpu_cmpxchg_double_1(pcp1, pcp2, oval1, oval2, nval1, nval2) \
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 	raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_cmpxchg_double_2
 | 
					
						
							|  |  |  | #define raw_cpu_cmpxchg_double_2(pcp1, pcp2, oval1, oval2, nval1, nval2) \
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 	raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_cmpxchg_double_4
 | 
					
						
							|  |  |  | #define raw_cpu_cmpxchg_double_4(pcp1, pcp2, oval1, oval2, nval1, nval2) \
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 	raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef raw_cpu_cmpxchg_double_8
 | 
					
						
							|  |  |  | #define raw_cpu_cmpxchg_double_8(pcp1, pcp2, oval1, oval2, nval1, nval2) \
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 	raw_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:40 -04:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef this_cpu_read_1
 | 
					
						
							|  |  |  | #define this_cpu_read_1(pcp)		this_cpu_generic_read(pcp)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_read_2
 | 
					
						
							|  |  |  | #define this_cpu_read_2(pcp)		this_cpu_generic_read(pcp)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_read_4
 | 
					
						
							|  |  |  | #define this_cpu_read_4(pcp)		this_cpu_generic_read(pcp)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_read_8
 | 
					
						
							|  |  |  | #define this_cpu_read_8(pcp)		this_cpu_generic_read(pcp)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef this_cpu_write_1
 | 
					
						
							|  |  |  | #define this_cpu_write_1(pcp, val)	this_cpu_generic_to_op(pcp, val, =)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_write_2
 | 
					
						
							|  |  |  | #define this_cpu_write_2(pcp, val)	this_cpu_generic_to_op(pcp, val, =)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_write_4
 | 
					
						
							|  |  |  | #define this_cpu_write_4(pcp, val)	this_cpu_generic_to_op(pcp, val, =)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_write_8
 | 
					
						
							|  |  |  | #define this_cpu_write_8(pcp, val)	this_cpu_generic_to_op(pcp, val, =)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef this_cpu_add_1
 | 
					
						
							|  |  |  | #define this_cpu_add_1(pcp, val)	this_cpu_generic_to_op(pcp, val, +=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_add_2
 | 
					
						
							|  |  |  | #define this_cpu_add_2(pcp, val)	this_cpu_generic_to_op(pcp, val, +=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_add_4
 | 
					
						
							|  |  |  | #define this_cpu_add_4(pcp, val)	this_cpu_generic_to_op(pcp, val, +=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_add_8
 | 
					
						
							|  |  |  | #define this_cpu_add_8(pcp, val)	this_cpu_generic_to_op(pcp, val, +=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef this_cpu_and_1
 | 
					
						
							|  |  |  | #define this_cpu_and_1(pcp, val)	this_cpu_generic_to_op(pcp, val, &=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_and_2
 | 
					
						
							|  |  |  | #define this_cpu_and_2(pcp, val)	this_cpu_generic_to_op(pcp, val, &=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_and_4
 | 
					
						
							|  |  |  | #define this_cpu_and_4(pcp, val)	this_cpu_generic_to_op(pcp, val, &=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_and_8
 | 
					
						
							|  |  |  | #define this_cpu_and_8(pcp, val)	this_cpu_generic_to_op(pcp, val, &=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef this_cpu_or_1
 | 
					
						
							|  |  |  | #define this_cpu_or_1(pcp, val)		this_cpu_generic_to_op(pcp, val, |=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_or_2
 | 
					
						
							|  |  |  | #define this_cpu_or_2(pcp, val)		this_cpu_generic_to_op(pcp, val, |=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_or_4
 | 
					
						
							|  |  |  | #define this_cpu_or_4(pcp, val)		this_cpu_generic_to_op(pcp, val, |=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_or_8
 | 
					
						
							|  |  |  | #define this_cpu_or_8(pcp, val)		this_cpu_generic_to_op(pcp, val, |=)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef this_cpu_add_return_1
 | 
					
						
							|  |  |  | #define this_cpu_add_return_1(pcp, val)	this_cpu_generic_add_return(pcp, val)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_add_return_2
 | 
					
						
							|  |  |  | #define this_cpu_add_return_2(pcp, val)	this_cpu_generic_add_return(pcp, val)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_add_return_4
 | 
					
						
							|  |  |  | #define this_cpu_add_return_4(pcp, val)	this_cpu_generic_add_return(pcp, val)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_add_return_8
 | 
					
						
							|  |  |  | #define this_cpu_add_return_8(pcp, val)	this_cpu_generic_add_return(pcp, val)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef this_cpu_xchg_1
 | 
					
						
							|  |  |  | #define this_cpu_xchg_1(pcp, nval)	this_cpu_generic_xchg(pcp, nval)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_xchg_2
 | 
					
						
							|  |  |  | #define this_cpu_xchg_2(pcp, nval)	this_cpu_generic_xchg(pcp, nval)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_xchg_4
 | 
					
						
							|  |  |  | #define this_cpu_xchg_4(pcp, nval)	this_cpu_generic_xchg(pcp, nval)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_xchg_8
 | 
					
						
							|  |  |  | #define this_cpu_xchg_8(pcp, nval)	this_cpu_generic_xchg(pcp, nval)
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef this_cpu_cmpxchg_1
 | 
					
						
							|  |  |  | #define this_cpu_cmpxchg_1(pcp, oval, nval) \
 | 
					
						
							|  |  |  | 	this_cpu_generic_cmpxchg(pcp, oval, nval) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_cmpxchg_2
 | 
					
						
							|  |  |  | #define this_cpu_cmpxchg_2(pcp, oval, nval) \
 | 
					
						
							|  |  |  | 	this_cpu_generic_cmpxchg(pcp, oval, nval) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_cmpxchg_4
 | 
					
						
							|  |  |  | #define this_cpu_cmpxchg_4(pcp, oval, nval) \
 | 
					
						
							|  |  |  | 	this_cpu_generic_cmpxchg(pcp, oval, nval) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_cmpxchg_8
 | 
					
						
							|  |  |  | #define this_cpu_cmpxchg_8(pcp, oval, nval) \
 | 
					
						
							|  |  |  | 	this_cpu_generic_cmpxchg(pcp, oval, nval) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef this_cpu_cmpxchg_double_1
 | 
					
						
							|  |  |  | #define this_cpu_cmpxchg_double_1(pcp1, pcp2, oval1, oval2, nval1, nval2) \
 | 
					
						
							|  |  |  | 	this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_cmpxchg_double_2
 | 
					
						
							|  |  |  | #define this_cpu_cmpxchg_double_2(pcp1, pcp2, oval1, oval2, nval1, nval2) \
 | 
					
						
							|  |  |  | 	this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_cmpxchg_double_4
 | 
					
						
							|  |  |  | #define this_cpu_cmpxchg_double_4(pcp1, pcp2, oval1, oval2, nval1, nval2) \
 | 
					
						
							|  |  |  | 	this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef this_cpu_cmpxchg_double_8
 | 
					
						
							|  |  |  | #define this_cpu_cmpxchg_double_8(pcp1, pcp2, oval1, oval2, nval1, nval2) \
 | 
					
						
							|  |  |  | 	this_cpu_generic_cmpxchg_double(pcp1, pcp2, oval1, oval2, nval1, nval2) | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2014-06-17 19:12:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #endif /* _ASM_GENERIC_PERCPU_H_ */
 |