~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/asm-generic/percpu.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef _ASM_GENERIC_PERCPU_H_
  3 #define _ASM_GENERIC_PERCPU_H_
  4 
  5 #include <linux/compiler.h>
  6 #include <linux/threads.h>
  7 #include <linux/percpu-defs.h>
  8 
  9 #ifdef CONFIG_SMP
 10 
 11 /*
 12  * per_cpu_offset() is the offset that has to be added to a
 13  * percpu variable to get to the instance for a certain processor.
 14  *
 15  * Most arches use the __per_cpu_offset array for those offsets but
 16  * some arches have their own ways of determining the offset (x86_64, s390).
 17  */
 18 #ifndef __per_cpu_offset
 19 extern unsigned long __per_cpu_offset[NR_CPUS];
 20 
 21 #define per_cpu_offset(x) (__per_cpu_offset[x])
 22 #endif
 23 
 24 /*
 25  * Determine the offset for the currently active processor.
 26  * An arch may define __my_cpu_offset to provide a more effective
 27  * means of obtaining the offset to the per cpu variables of the
 28  * current processor.
 29  */
 30 #ifndef __my_cpu_offset
 31 #define __my_cpu_offset per_cpu_offset(raw_smp_processor_id())
 32 #endif
 33 #ifdef CONFIG_DEBUG_PREEMPT
 34 #define my_cpu_offset per_cpu_offset(smp_processor_id())
 35 #else
 36 #define my_cpu_offset __my_cpu_offset
 37 #endif
 38 
 39 /*
 40  * Arch may define arch_raw_cpu_ptr() to provide more efficient address
 41  * translations for raw_cpu_ptr().
 42  */
 43 #ifndef arch_raw_cpu_ptr
 44 #define arch_raw_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, __my_cpu_offset)
 45 #endif
 46 
 47 #ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA
 48 extern void setup_per_cpu_areas(void);
 49 #endif
 50 
 51 #endif  /* SMP */
 52 
 53 #ifndef PER_CPU_BASE_SECTION
 54 #ifdef CONFIG_SMP
 55 #define PER_CPU_BASE_SECTION ".data..percpu"
 56 #else
 57 #define PER_CPU_BASE_SECTION ".data"
 58 #endif
 59 #endif
 60 
 61 #ifndef PER_CPU_ATTRIBUTES
 62 #define PER_CPU_ATTRIBUTES
 63 #endif
 64 
 65 #define raw_cpu_generic_read(pcp)                                       \
 66 ({                                                                      \
 67         *raw_cpu_ptr(&(pcp));                                           \
 68 })
 69 
 70 #define raw_cpu_generic_to_op(pcp, val, op)                             \
 71 do {                                                                    \
 72         *raw_cpu_ptr(&(pcp)) op val;                                    \
 73 } while (0)
 74 
 75 #define raw_cpu_generic_add_return(pcp, val)                            \
 76 ({                                                                      \
 77         typeof(pcp) *__p = raw_cpu_ptr(&(pcp));                         \
 78                                                                         \
 79         *__p += val;                                                    \
 80         *__p;                                                           \
 81 })
 82 
 83 #define raw_cpu_generic_xchg(pcp, nval)                                 \
 84 ({                                                                      \
 85         typeof(pcp) *__p = raw_cpu_ptr(&(pcp));                         \
 86         typeof(pcp) __ret;                                              \
 87         __ret = *__p;                                                   \
 88         *__p = nval;                                                    \
 89         __ret;                                                          \
 90 })
 91 
 92 #define __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, _cmpxchg)          \
 93 ({                                                                      \
 94         typeof(pcp) __val, __old = *(ovalp);                            \
 95         __val = _cmpxchg(pcp, __old, nval);                             \
 96         if (__val != __old)                                             \
 97                 *(ovalp) = __val;                                       \
 98         __val == __old;                                                 \
 99 })
100 
101 #define raw_cpu_generic_try_cmpxchg(pcp, ovalp, nval)                   \
102 ({                                                                      \
103         typeof(pcp) *__p = raw_cpu_ptr(&(pcp));                         \
104         typeof(pcp) __val = *__p, ___old = *(ovalp);                    \
105         bool __ret;                                                     \
106         if (__val == ___old) {                                          \
107                 *__p = nval;                                            \
108                 __ret = true;                                           \
109         } else {                                                        \
110                 *(ovalp) = __val;                                       \
111                 __ret = false;                                          \
112         }                                                               \
113         __ret;                                                          \
114 })
115 
116 #define raw_cpu_generic_cmpxchg(pcp, oval, nval)                        \
117 ({                                                                      \
118         typeof(pcp) __old = (oval);                                     \
119         raw_cpu_generic_try_cmpxchg(pcp, &__old, nval);                 \
120         __old;                                                          \
121 })
122 
123 #define __this_cpu_generic_read_nopreempt(pcp)                          \
124 ({                                                                      \
125         typeof(pcp) ___ret;                                             \
126         preempt_disable_notrace();                                      \
127         ___ret = READ_ONCE(*raw_cpu_ptr(&(pcp)));                       \
128         preempt_enable_notrace();                                       \
129         ___ret;                                                         \
130 })
131 
132 #define __this_cpu_generic_read_noirq(pcp)                              \
133 ({                                                                      \
134         typeof(pcp) ___ret;                                             \
135         unsigned long ___flags;                                         \
136         raw_local_irq_save(___flags);                                   \
137         ___ret = raw_cpu_generic_read(pcp);                             \
138         raw_local_irq_restore(___flags);                                \
139         ___ret;                                                         \
140 })
141 
142 #define this_cpu_generic_read(pcp)                                      \
143 ({                                                                      \
144         typeof(pcp) __ret;                                              \
145         if (__native_word(pcp))                                         \
146                 __ret = __this_cpu_generic_read_nopreempt(pcp);         \
147         else                                                            \
148                 __ret = __this_cpu_generic_read_noirq(pcp);             \
149         __ret;                                                          \
150 })
151 
152 #define this_cpu_generic_to_op(pcp, val, op)                            \
153 do {                                                                    \
154         unsigned long __flags;                                          \
155         raw_local_irq_save(__flags);                                    \
156         raw_cpu_generic_to_op(pcp, val, op);                            \
157         raw_local_irq_restore(__flags);                                 \
158 } while (0)
159 
160 
161 #define this_cpu_generic_add_return(pcp, val)                           \
162 ({                                                                      \
163         typeof(pcp) __ret;                                              \
164         unsigned long __flags;                                          \
165         raw_local_irq_save(__flags);                                    \
166         __ret = raw_cpu_generic_add_return(pcp, val);                   \
167         raw_local_irq_restore(__flags);                                 \
168         __ret;                                                          \
169 })
170 
171 #define this_cpu_generic_xchg(pcp, nval)                                \
172 ({                                                                      \
173         typeof(pcp) __ret;                                              \
174         unsigned long __flags;                                          \
175         raw_local_irq_save(__flags);                                    \
176         __ret = raw_cpu_generic_xchg(pcp, nval);                        \
177         raw_local_irq_restore(__flags);                                 \
178         __ret;                                                          \
179 })
180 
181 #define this_cpu_generic_try_cmpxchg(pcp, ovalp, nval)                  \
182 ({                                                                      \
183         bool __ret;                                                     \
184         unsigned long __flags;                                          \
185         raw_local_irq_save(__flags);                                    \
186         __ret = raw_cpu_generic_try_cmpxchg(pcp, ovalp, nval);          \
187         raw_local_irq_restore(__flags);                                 \
188         __ret;                                                          \
189 })
190 
191 #define this_cpu_generic_cmpxchg(pcp, oval, nval)                       \
192 ({                                                                      \
193         typeof(pcp) __ret;                                              \
194         unsigned long __flags;                                          \
195         raw_local_irq_save(__flags);                                    \
196         __ret = raw_cpu_generic_cmpxchg(pcp, oval, nval);               \
197         raw_local_irq_restore(__flags);                                 \
198         __ret;                                                          \
199 })
200 
201 #ifndef raw_cpu_read_1
202 #define raw_cpu_read_1(pcp)             raw_cpu_generic_read(pcp)
203 #endif
204 #ifndef raw_cpu_read_2
205 #define raw_cpu_read_2(pcp)             raw_cpu_generic_read(pcp)
206 #endif
207 #ifndef raw_cpu_read_4
208 #define raw_cpu_read_4(pcp)             raw_cpu_generic_read(pcp)
209 #endif
210 #ifndef raw_cpu_read_8
211 #define raw_cpu_read_8(pcp)             raw_cpu_generic_read(pcp)
212 #endif
213 
214 #ifndef raw_cpu_write_1
215 #define raw_cpu_write_1(pcp, val)       raw_cpu_generic_to_op(pcp, val, =)
216 #endif
217 #ifndef raw_cpu_write_2
218 #define raw_cpu_write_2(pcp, val)       raw_cpu_generic_to_op(pcp, val, =)
219 #endif
220 #ifndef raw_cpu_write_4
221 #define raw_cpu_write_4(pcp, val)       raw_cpu_generic_to_op(pcp, val, =)
222 #endif
223 #ifndef raw_cpu_write_8
224 #define raw_cpu_write_8(pcp, val)       raw_cpu_generic_to_op(pcp, val, =)
225 #endif
226 
227 #ifndef raw_cpu_add_1
228 #define raw_cpu_add_1(pcp, val)         raw_cpu_generic_to_op(pcp, val, +=)
229 #endif
230 #ifndef raw_cpu_add_2
231 #define raw_cpu_add_2(pcp, val)         raw_cpu_generic_to_op(pcp, val, +=)
232 #endif
233 #ifndef raw_cpu_add_4
234 #define raw_cpu_add_4(pcp, val)         raw_cpu_generic_to_op(pcp, val, +=)
235 #endif
236 #ifndef raw_cpu_add_8
237 #define raw_cpu_add_8(pcp, val)         raw_cpu_generic_to_op(pcp, val, +=)
238 #endif
239 
240 #ifndef raw_cpu_and_1
241 #define raw_cpu_and_1(pcp, val)         raw_cpu_generic_to_op(pcp, val, &=)
242 #endif
243 #ifndef raw_cpu_and_2
244 #define raw_cpu_and_2(pcp, val)         raw_cpu_generic_to_op(pcp, val, &=)
245 #endif
246 #ifndef raw_cpu_and_4
247 #define raw_cpu_and_4(pcp, val)         raw_cpu_generic_to_op(pcp, val, &=)
248 #endif
249 #ifndef raw_cpu_and_8
250 #define raw_cpu_and_8(pcp, val)         raw_cpu_generic_to_op(pcp, val, &=)
251 #endif
252 
253 #ifndef raw_cpu_or_1
254 #define raw_cpu_or_1(pcp, val)          raw_cpu_generic_to_op(pcp, val, |=)
255 #endif
256 #ifndef raw_cpu_or_2
257 #define raw_cpu_or_2(pcp, val)          raw_cpu_generic_to_op(pcp, val, |=)
258 #endif
259 #ifndef raw_cpu_or_4
260 #define raw_cpu_or_4(pcp, val)          raw_cpu_generic_to_op(pcp, val, |=)
261 #endif
262 #ifndef raw_cpu_or_8
263 #define raw_cpu_or_8(pcp, val)          raw_cpu_generic_to_op(pcp, val, |=)
264 #endif
265 
266 #ifndef raw_cpu_add_return_1
267 #define raw_cpu_add_return_1(pcp, val)  raw_cpu_generic_add_return(pcp, val)
268 #endif
269 #ifndef raw_cpu_add_return_2
270 #define raw_cpu_add_return_2(pcp, val)  raw_cpu_generic_add_return(pcp, val)
271 #endif
272 #ifndef raw_cpu_add_return_4
273 #define raw_cpu_add_return_4(pcp, val)  raw_cpu_generic_add_return(pcp, val)
274 #endif
275 #ifndef raw_cpu_add_return_8
276 #define raw_cpu_add_return_8(pcp, val)  raw_cpu_generic_add_return(pcp, val)
277 #endif
278 
279 #ifndef raw_cpu_xchg_1
280 #define raw_cpu_xchg_1(pcp, nval)       raw_cpu_generic_xchg(pcp, nval)
281 #endif
282 #ifndef raw_cpu_xchg_2
283 #define raw_cpu_xchg_2(pcp, nval)       raw_cpu_generic_xchg(pcp, nval)
284 #endif
285 #ifndef raw_cpu_xchg_4
286 #define raw_cpu_xchg_4(pcp, nval)       raw_cpu_generic_xchg(pcp, nval)
287 #endif
288 #ifndef raw_cpu_xchg_8
289 #define raw_cpu_xchg_8(pcp, nval)       raw_cpu_generic_xchg(pcp, nval)
290 #endif
291 
292 #ifndef raw_cpu_try_cmpxchg_1
293 #ifdef raw_cpu_cmpxchg_1
294 #define raw_cpu_try_cmpxchg_1(pcp, ovalp, nval) \
295         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, raw_cpu_cmpxchg_1)
296 #else
297 #define raw_cpu_try_cmpxchg_1(pcp, ovalp, nval) \
298         raw_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
299 #endif
300 #endif
301 #ifndef raw_cpu_try_cmpxchg_2
302 #ifdef raw_cpu_cmpxchg_2
303 #define raw_cpu_try_cmpxchg_2(pcp, ovalp, nval) \
304         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, raw_cpu_cmpxchg_2)
305 #else
306 #define raw_cpu_try_cmpxchg_2(pcp, ovalp, nval) \
307         raw_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
308 #endif
309 #endif
310 #ifndef raw_cpu_try_cmpxchg_4
311 #ifdef raw_cpu_cmpxchg_4
312 #define raw_cpu_try_cmpxchg_4(pcp, ovalp, nval) \
313         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, raw_cpu_cmpxchg_4)
314 #else
315 #define raw_cpu_try_cmpxchg_4(pcp, ovalp, nval) \
316         raw_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
317 #endif
318 #endif
319 #ifndef raw_cpu_try_cmpxchg_8
320 #ifdef raw_cpu_cmpxchg_8
321 #define raw_cpu_try_cmpxchg_8(pcp, ovalp, nval) \
322         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, raw_cpu_cmpxchg_8)
323 #else
324 #define raw_cpu_try_cmpxchg_8(pcp, ovalp, nval) \
325         raw_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
326 #endif
327 #endif
328 
329 #ifndef raw_cpu_try_cmpxchg64
330 #ifdef raw_cpu_cmpxchg64
331 #define raw_cpu_try_cmpxchg64(pcp, ovalp, nval) \
332         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, raw_cpu_cmpxchg64)
333 #else
334 #define raw_cpu_try_cmpxchg64(pcp, ovalp, nval) \
335         raw_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
336 #endif
337 #endif
338 #ifndef raw_cpu_try_cmpxchg128
339 #ifdef raw_cpu_cmpxchg128
340 #define raw_cpu_try_cmpxchg128(pcp, ovalp, nval) \
341         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, raw_cpu_cmpxchg128)
342 #else
343 #define raw_cpu_try_cmpxchg128(pcp, ovalp, nval) \
344         raw_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
345 #endif
346 #endif
347 
348 #ifndef raw_cpu_cmpxchg_1
349 #define raw_cpu_cmpxchg_1(pcp, oval, nval) \
350         raw_cpu_generic_cmpxchg(pcp, oval, nval)
351 #endif
352 #ifndef raw_cpu_cmpxchg_2
353 #define raw_cpu_cmpxchg_2(pcp, oval, nval) \
354         raw_cpu_generic_cmpxchg(pcp, oval, nval)
355 #endif
356 #ifndef raw_cpu_cmpxchg_4
357 #define raw_cpu_cmpxchg_4(pcp, oval, nval) \
358         raw_cpu_generic_cmpxchg(pcp, oval, nval)
359 #endif
360 #ifndef raw_cpu_cmpxchg_8
361 #define raw_cpu_cmpxchg_8(pcp, oval, nval) \
362         raw_cpu_generic_cmpxchg(pcp, oval, nval)
363 #endif
364 
365 #ifndef raw_cpu_cmpxchg64
366 #define raw_cpu_cmpxchg64(pcp, oval, nval) \
367         raw_cpu_generic_cmpxchg(pcp, oval, nval)
368 #endif
369 #ifndef raw_cpu_cmpxchg128
370 #define raw_cpu_cmpxchg128(pcp, oval, nval) \
371         raw_cpu_generic_cmpxchg(pcp, oval, nval)
372 #endif
373 
374 #ifndef this_cpu_read_1
375 #define this_cpu_read_1(pcp)            this_cpu_generic_read(pcp)
376 #endif
377 #ifndef this_cpu_read_2
378 #define this_cpu_read_2(pcp)            this_cpu_generic_read(pcp)
379 #endif
380 #ifndef this_cpu_read_4
381 #define this_cpu_read_4(pcp)            this_cpu_generic_read(pcp)
382 #endif
383 #ifndef this_cpu_read_8
384 #define this_cpu_read_8(pcp)            this_cpu_generic_read(pcp)
385 #endif
386 
387 #ifndef this_cpu_write_1
388 #define this_cpu_write_1(pcp, val)      this_cpu_generic_to_op(pcp, val, =)
389 #endif
390 #ifndef this_cpu_write_2
391 #define this_cpu_write_2(pcp, val)      this_cpu_generic_to_op(pcp, val, =)
392 #endif
393 #ifndef this_cpu_write_4
394 #define this_cpu_write_4(pcp, val)      this_cpu_generic_to_op(pcp, val, =)
395 #endif
396 #ifndef this_cpu_write_8
397 #define this_cpu_write_8(pcp, val)      this_cpu_generic_to_op(pcp, val, =)
398 #endif
399 
400 #ifndef this_cpu_add_1
401 #define this_cpu_add_1(pcp, val)        this_cpu_generic_to_op(pcp, val, +=)
402 #endif
403 #ifndef this_cpu_add_2
404 #define this_cpu_add_2(pcp, val)        this_cpu_generic_to_op(pcp, val, +=)
405 #endif
406 #ifndef this_cpu_add_4
407 #define this_cpu_add_4(pcp, val)        this_cpu_generic_to_op(pcp, val, +=)
408 #endif
409 #ifndef this_cpu_add_8
410 #define this_cpu_add_8(pcp, val)        this_cpu_generic_to_op(pcp, val, +=)
411 #endif
412 
413 #ifndef this_cpu_and_1
414 #define this_cpu_and_1(pcp, val)        this_cpu_generic_to_op(pcp, val, &=)
415 #endif
416 #ifndef this_cpu_and_2
417 #define this_cpu_and_2(pcp, val)        this_cpu_generic_to_op(pcp, val, &=)
418 #endif
419 #ifndef this_cpu_and_4
420 #define this_cpu_and_4(pcp, val)        this_cpu_generic_to_op(pcp, val, &=)
421 #endif
422 #ifndef this_cpu_and_8
423 #define this_cpu_and_8(pcp, val)        this_cpu_generic_to_op(pcp, val, &=)
424 #endif
425 
426 #ifndef this_cpu_or_1
427 #define this_cpu_or_1(pcp, val)         this_cpu_generic_to_op(pcp, val, |=)
428 #endif
429 #ifndef this_cpu_or_2
430 #define this_cpu_or_2(pcp, val)         this_cpu_generic_to_op(pcp, val, |=)
431 #endif
432 #ifndef this_cpu_or_4
433 #define this_cpu_or_4(pcp, val)         this_cpu_generic_to_op(pcp, val, |=)
434 #endif
435 #ifndef this_cpu_or_8
436 #define this_cpu_or_8(pcp, val)         this_cpu_generic_to_op(pcp, val, |=)
437 #endif
438 
439 #ifndef this_cpu_add_return_1
440 #define this_cpu_add_return_1(pcp, val) this_cpu_generic_add_return(pcp, val)
441 #endif
442 #ifndef this_cpu_add_return_2
443 #define this_cpu_add_return_2(pcp, val) this_cpu_generic_add_return(pcp, val)
444 #endif
445 #ifndef this_cpu_add_return_4
446 #define this_cpu_add_return_4(pcp, val) this_cpu_generic_add_return(pcp, val)
447 #endif
448 #ifndef this_cpu_add_return_8
449 #define this_cpu_add_return_8(pcp, val) this_cpu_generic_add_return(pcp, val)
450 #endif
451 
452 #ifndef this_cpu_xchg_1
453 #define this_cpu_xchg_1(pcp, nval)      this_cpu_generic_xchg(pcp, nval)
454 #endif
455 #ifndef this_cpu_xchg_2
456 #define this_cpu_xchg_2(pcp, nval)      this_cpu_generic_xchg(pcp, nval)
457 #endif
458 #ifndef this_cpu_xchg_4
459 #define this_cpu_xchg_4(pcp, nval)      this_cpu_generic_xchg(pcp, nval)
460 #endif
461 #ifndef this_cpu_xchg_8
462 #define this_cpu_xchg_8(pcp, nval)      this_cpu_generic_xchg(pcp, nval)
463 #endif
464 
465 #ifndef this_cpu_try_cmpxchg_1
466 #ifdef this_cpu_cmpxchg_1
467 #define this_cpu_try_cmpxchg_1(pcp, ovalp, nval) \
468         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, this_cpu_cmpxchg_1)
469 #else
470 #define this_cpu_try_cmpxchg_1(pcp, ovalp, nval) \
471         this_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
472 #endif
473 #endif
474 #ifndef this_cpu_try_cmpxchg_2
475 #ifdef this_cpu_cmpxchg_2
476 #define this_cpu_try_cmpxchg_2(pcp, ovalp, nval) \
477         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, this_cpu_cmpxchg_2)
478 #else
479 #define this_cpu_try_cmpxchg_2(pcp, ovalp, nval) \
480         this_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
481 #endif
482 #endif
483 #ifndef this_cpu_try_cmpxchg_4
484 #ifdef this_cpu_cmpxchg_4
485 #define this_cpu_try_cmpxchg_4(pcp, ovalp, nval) \
486         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, this_cpu_cmpxchg_4)
487 #else
488 #define this_cpu_try_cmpxchg_4(pcp, ovalp, nval) \
489         this_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
490 #endif
491 #endif
492 #ifndef this_cpu_try_cmpxchg_8
493 #ifdef this_cpu_cmpxchg_8
494 #define this_cpu_try_cmpxchg_8(pcp, ovalp, nval) \
495         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, this_cpu_cmpxchg_8)
496 #else
497 #define this_cpu_try_cmpxchg_8(pcp, ovalp, nval) \
498         this_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
499 #endif
500 #endif
501 
502 #ifndef this_cpu_try_cmpxchg64
503 #ifdef this_cpu_cmpxchg64
504 #define this_cpu_try_cmpxchg64(pcp, ovalp, nval) \
505         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, this_cpu_cmpxchg64)
506 #else
507 #define this_cpu_try_cmpxchg64(pcp, ovalp, nval) \
508         this_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
509 #endif
510 #endif
511 #ifndef this_cpu_try_cmpxchg128
512 #ifdef this_cpu_cmpxchg128
513 #define this_cpu_try_cmpxchg128(pcp, ovalp, nval) \
514         __cpu_fallback_try_cmpxchg(pcp, ovalp, nval, this_cpu_cmpxchg128)
515 #else
516 #define this_cpu_try_cmpxchg128(pcp, ovalp, nval) \
517         this_cpu_generic_try_cmpxchg(pcp, ovalp, nval)
518 #endif
519 #endif
520 
521 #ifndef this_cpu_cmpxchg_1
522 #define this_cpu_cmpxchg_1(pcp, oval, nval) \
523         this_cpu_generic_cmpxchg(pcp, oval, nval)
524 #endif
525 #ifndef this_cpu_cmpxchg_2
526 #define this_cpu_cmpxchg_2(pcp, oval, nval) \
527         this_cpu_generic_cmpxchg(pcp, oval, nval)
528 #endif
529 #ifndef this_cpu_cmpxchg_4
530 #define this_cpu_cmpxchg_4(pcp, oval, nval) \
531         this_cpu_generic_cmpxchg(pcp, oval, nval)
532 #endif
533 #ifndef this_cpu_cmpxchg_8
534 #define this_cpu_cmpxchg_8(pcp, oval, nval) \
535         this_cpu_generic_cmpxchg(pcp, oval, nval)
536 #endif
537 
538 #ifndef this_cpu_cmpxchg64
539 #define this_cpu_cmpxchg64(pcp, oval, nval) \
540         this_cpu_generic_cmpxchg(pcp, oval, nval)
541 #endif
542 #ifndef this_cpu_cmpxchg128
543 #define this_cpu_cmpxchg128(pcp, oval, nval) \
544         this_cpu_generic_cmpxchg(pcp, oval, nval)
545 #endif
546 
547 #endif /* _ASM_GENERIC_PERCPU_H_ */
548 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php