diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-06-22 17:01:01 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-06-22 17:01:01 -0400 |
commit | fc934d40178ad4e551a17e2733241d9f29fddd70 (patch) | |
tree | 43e3f3c9019915cc41befec4dad5d1328a4cae63 /include/linux/compiler.h | |
parent | 052b398a43a7de8c68c13e7fa05d6b3d16ce6801 (diff) | |
parent | 085c789783f5f95c253740d3d0a1659ec5ff32a8 (diff) |
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull RCU updates from Ingo Molnar:
- Continued initialization/Kconfig updates: hide most Kconfig options
from unsuspecting users.
There's now a single high level configuration option:
*
* RCU Subsystem
*
Make expert-level adjustments to RCU configuration (RCU_EXPERT) [N/y/?] (NEW)
Which if answered in the negative, leaves us with a single
interactive configuration option:
Offload RCU callback processing from boot-selected CPUs (RCU_NOCB_CPU) [N/y/?] (NEW)
All the rest of the RCU options are configured automatically. Later
on we'll remove this single leftover configuration option as well.
- Remove all uses of RCU-protected array indexes: replace the
rcu_[access|dereference]_index_check() APIs with READ_ONCE() and
rcu_lockdep_assert()
- RCU CPU-hotplug cleanups
- Updates to Tiny RCU: a race fix and further code shrinkage.
- RCU torture-testing updates: fixes, speedups, cleanups and
documentation updates.
- Miscellaneous fixes
- Documentation updates
* 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (60 commits)
rcutorture: Allow repetition factors in Kconfig-fragment lists
rcutorture: Display "make oldconfig" errors
rcutorture: Update TREE_RCU-kconfig.txt
rcutorture: Make rcutorture scripts force RCU_EXPERT
rcutorture: Update configuration fragments for rcutree.rcu_fanout_exact
rcutorture: TASKS_RCU set directly, so don't explicitly set it
rcutorture: Test SRCU cleanup code path
rcutorture: Replace barriers with smp_store_release() and smp_load_acquire()
locktorture: Change longdelay_us to longdelay_ms
rcutorture: Allow negative values of nreaders to oversubscribe
rcutorture: Exchange TREE03 and TREE08 NR_CPUS, speed up CPU hotplug
rcutorture: Exchange TREE03 and TREE04 geometries
locktorture: fix deadlock in 'rw_lock_irq' type
rcu: Correctly handle non-empty Tiny RCU callback list with none ready
rcutorture: Test both RCU-sched and RCU-bh for Tiny RCU
rcu: Further shrink Tiny RCU by making empty functions static inlines
rcu: Conditionally compile RCU's eqs warnings
rcu: Remove prompt for RCU implementation
rcu: Make RCU able to tolerate undefined CONFIG_RCU_KTHREAD_PRIO
rcu: Make RCU able to tolerate undefined CONFIG_RCU_FANOUT_LEAF
...
Diffstat (limited to 'include/linux/compiler.h')
-rw-r--r-- | include/linux/compiler.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 867722591be2..5d66777914db 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
@@ -252,6 +252,22 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s | |||
252 | #define WRITE_ONCE(x, val) \ | 252 | #define WRITE_ONCE(x, val) \ |
253 | ({ typeof(x) __val = (val); __write_once_size(&(x), &__val, sizeof(__val)); __val; }) | 253 | ({ typeof(x) __val = (val); __write_once_size(&(x), &__val, sizeof(__val)); __val; }) |
254 | 254 | ||
255 | /** | ||
256 | * READ_ONCE_CTRL - Read a value heading a control dependency | ||
257 | * @x: The value to be read, heading the control dependency | ||
258 | * | ||
259 | * Control dependencies are tricky. See Documentation/memory-barriers.txt | ||
260 | * for important information on how to use them. Note that in many cases, | ||
261 | * use of smp_load_acquire() will be much simpler. Control dependencies | ||
262 | * should be avoided except on the hottest of hotpaths. | ||
263 | */ | ||
264 | #define READ_ONCE_CTRL(x) \ | ||
265 | ({ \ | ||
266 | typeof(x) __val = READ_ONCE(x); \ | ||
267 | smp_read_barrier_depends(); /* Enforce control dependency. */ \ | ||
268 | __val; \ | ||
269 | }) | ||
270 | |||
255 | #endif /* __KERNEL__ */ | 271 | #endif /* __KERNEL__ */ |
256 | 272 | ||
257 | #endif /* __ASSEMBLY__ */ | 273 | #endif /* __ASSEMBLY__ */ |