linux-kernel-test/Documentation/RCU
Paul E. McKenney 621934ee7e [PATCH] srcu-3: RCU variant permitting read-side blocking
Updated patch adding a variant of RCU that permits sleeping in read-side
critical sections.  SRCU is as follows:

o	Each use of SRCU creates its own srcu_struct, and each
	srcu_struct has its own set of grace periods.  This is
	critical, as it prevents one subsystem with a blocking
	reader from holding up SRCU grace periods for other
	subsystems.

o	The SRCU primitives (srcu_read_lock(), srcu_read_unlock(),
	and synchronize_srcu()) all take a pointer to a srcu_struct.

o	The SRCU primitives must be called from process context.

o	srcu_read_lock() returns an int that must be passed to
	the matching srcu_read_unlock().  Realtime RCU avoids the
	need for this by storing the state in the task struct,
	but SRCU needs to allow a given code path to pass through
	multiple SRCU domains -- storing state in the task struct
	would therefore require either arbitrary space in the
	task struct or arbitrary limits on SRCU nesting.  So I
	kicked the state-storage problem up to the caller.

	Of course, it is not permitted to call synchronize_srcu()
	while in an SRCU read-side critical section.

o	There is no call_srcu().  It would not be hard to implement
	one, but it seems like too easy a way to OOM the system.
	(Hey, we have enough trouble with call_rcu(), which does
	-not- permit readers to sleep!!!)  So, if you want it,
	please tell me why...

[josht@us.ibm.com: sparse notation]
Signed-off-by: Paul E. McKenney <paulmck@us.ibm.com>
Signed-off-by: Josh Triplett <josh@freedesktop.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-10-04 07:55:30 -07:00
..
arrayRCU.txt Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
checklist.txt [PATCH] srcu-3: RCU variant permitting read-side blocking 2006-10-04 07:55:30 -07:00
listRCU.txt [PATCH] RCU documentation fixes (January 2006 update) 2006-02-01 08:53:25 -08:00
NMI-RCU.txt [PATCH] NMI: Update NMI users of RCU to use new API 2005-09-07 16:57:19 -07:00
rcu.txt [PATCH] srcu-3: RCU variant permitting read-side blocking 2006-10-04 07:55:30 -07:00
rcuref.txt [PATCH] RCU documentation fixes (January 2006 update) 2006-02-01 08:53:25 -08:00
RTFP.txt [PATCH] RCU documentation fixes (January 2006 update) 2006-02-01 08:53:25 -08:00
torture.txt [PATCH] rcutorture: add ops vector and Classic RCU ops 2006-06-27 17:32:40 -07:00
UP.txt [PATCH] Yet another RCU documentation update 2005-09-10 10:06:24 -07:00
whatisRCU.txt [PATCH] srcu-3: RCU variant permitting read-side blocking 2006-10-04 07:55:30 -07:00