diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-generic/bug.h | 7 | ||||
-rw-r--r-- | include/linux/rcupdate.h | 20 |
2 files changed, 27 insertions, 0 deletions
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index f2d2faf4d9ae..e5a3f5880001 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h | |||
@@ -194,6 +194,13 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
194 | #ifdef CONFIG_SMP | 194 | #ifdef CONFIG_SMP |
195 | # define WARN_ON_SMP(x) WARN_ON(x) | 195 | # define WARN_ON_SMP(x) WARN_ON(x) |
196 | #else | 196 | #else |
197 | /* | ||
198 | * Use of ({0;}) because WARN_ON_SMP(x) may be used either as | ||
199 | * a stand alone line statement or as a condition in an if () | ||
200 | * statement. | ||
201 | * A simple "0" would cause gcc to give a "statement has no effect" | ||
202 | * warning. | ||
203 | */ | ||
197 | # define WARN_ON_SMP(x) ({0;}) | 204 | # define WARN_ON_SMP(x) ({0;}) |
198 | #endif | 205 | #endif |
199 | 206 | ||
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index af5614856285..ff422d2b7f90 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -339,6 +339,12 @@ extern int rcu_my_thread_group_empty(void); | |||
339 | ((typeof(*p) __force __kernel *)(p)); \ | 339 | ((typeof(*p) __force __kernel *)(p)); \ |
340 | }) | 340 | }) |
341 | 341 | ||
342 | #define __rcu_access_index(p, space) \ | ||
343 | ({ \ | ||
344 | typeof(p) _________p1 = ACCESS_ONCE(p); \ | ||
345 | rcu_dereference_sparse(p, space); \ | ||
346 | (_________p1); \ | ||
347 | }) | ||
342 | #define __rcu_dereference_index_check(p, c) \ | 348 | #define __rcu_dereference_index_check(p, c) \ |
343 | ({ \ | 349 | ({ \ |
344 | typeof(p) _________p1 = ACCESS_ONCE(p); \ | 350 | typeof(p) _________p1 = ACCESS_ONCE(p); \ |
@@ -429,6 +435,20 @@ extern int rcu_my_thread_group_empty(void); | |||
429 | #define rcu_dereference_raw(p) rcu_dereference_check(p, 1) /*@@@ needed? @@@*/ | 435 | #define rcu_dereference_raw(p) rcu_dereference_check(p, 1) /*@@@ needed? @@@*/ |
430 | 436 | ||
431 | /** | 437 | /** |
438 | * rcu_access_index() - fetch RCU index with no dereferencing | ||
439 | * @p: The index to read | ||
440 | * | ||
441 | * Return the value of the specified RCU-protected index, but omit the | ||
442 | * smp_read_barrier_depends() and keep the ACCESS_ONCE(). This is useful | ||
443 | * when the value of this index is accessed, but the index is not | ||
444 | * dereferenced, for example, when testing an RCU-protected index against | ||
445 | * -1. Although rcu_access_index() may also be used in cases where | ||
446 | * update-side locks prevent the value of the index from changing, you | ||
447 | * should instead use rcu_dereference_index_protected() for this use case. | ||
448 | */ | ||
449 | #define rcu_access_index(p) __rcu_access_index((p), __rcu) | ||
450 | |||
451 | /** | ||
432 | * rcu_dereference_index_check() - rcu_dereference for indices with debug checking | 452 | * rcu_dereference_index_check() - rcu_dereference for indices with debug checking |
433 | * @p: The pointer to read, prior to dereferencing | 453 | * @p: The pointer to read, prior to dereferencing |
434 | * @c: The conditions under which the dereference will take place | 454 | * @c: The conditions under which the dereference will take place |