USOO8869166B2

(12) United States Patent (10) Patent N0.: US 8,869,166 B2 McKenney (45) Date of Patent: *Oct. 21, 2014

(54) EFFECTIVE MANAGEMENT OF 5,727,209 A 3/1998 Slingwine et a1. BLOCKED_TASKS IN PREEMPTIBLE 6,219,690 B1 4/2001 Slingwine et a1. 6,662,184 B1 12/2003 Friedberg READ-COPY UPDATE 6,886,162 B1 4/2005 McKenney 6,996,812 B2 2/2006 McKenney (75) Inventor: Paul E. McKenney, Beaverton, OR (U S) 7,191,272 B2 3/2007 McKenney 7,287,135 B2 10/2007 McKenney et a1. (73) Assignee: International Business Machines 7349926 B2 3/2008 McKenney et a1. Corporation, Armonk, NY (US) (Continued) ( * ) Notice: Subject to any disclaimer, the term of this FOREIGN PATENT DOCUMENTS patent is extended or adjusted under 35 U.S.C. 154(b) by 312 days. JP 20044326783 9/2002 _ _ _ _ _ W0 W002073417 9/2002 Th1s patent 1s subject to a termmal d1s claimer. OTHER PUBLICATIONS

(21) App1_ NO; 13/437,215 McKenney, Paul et a1. “RCU Semantics: A First Attempt”. Jan. 30, 2005* (22) F11ed: Apr. 2, 2012 (Continued) (65) Prior Publication Data US 2012/0324461 A1 D 20 2012 Primary Examiner T Adam Lee ec' ’ (74) Attorney, Agent, or Firm * Walter W. Duft Related US. Application Data . . . . (57) ABSTRACT (63) Cont1nuatlon of apphcatlon No. 13/164,265, ?led on Jun, 20, 201 1, now Pat, NO_ 8,61 5,771 _ A technique for managing read-copy update readers that have been preempted While executing in a read-copy update read (51) Int. Cl. side critical section. A single blocked-tasks list is used to G06F 9/46 (2006.01) track preempted reader tasks that are blocking an asynchro G06F 13/00 (2006.01) nous grace period, preempted reader tasks that are blocking G06F 7/00 (2006.01) an expedited grace period, and preempted reader tasks that (52) US, Cl, require priority boosting. In example embodiments, a ?rst USPC ______718/107; 718/108; 711/154; 707/704 pointer may be used to segregate the blocked-tasks list into (58) Field of Classi?cation Search preempted reader tasks that are and are not blocking a current None asynchronous grace period. A second pointer may be used to See application ?le for complete search history segregate the blocked-tasks list into preempted reader tasks that are and are not blocking an expedited grace period. A (56) References Cited third pointer may be used to segregate the blocked-tasks list into preempted reader tasks that do and do not require priority US. PATENT DOCUMENTS boo sting. 5,442,758 A 8/1995 Slingwine et al. 5,608,893 A 3/1997 Slingwine et 31. 11 Claims, 32 Drawing Sheets

RCU SUBSVSTEM SUPPORT FUNCTIONS (4D)

RCU READER API RCU UPDATER API RCU GRACE PERIOD API (42) (44) (46) READER REGISTER CHECK CALLBACKS REGISTRATION CALLBACK 42A 44A (46A)

READER EXPEDITED UNREGISTRATION GRACE PERIOD 425 44B

GRACE PERIOD DETECTION AND CALLBACK PROCESSING (45)

BLOCKED READER HANDLER START NORMAL | GRACE PERIOD (ABA) (4B_B)

RECORD OUIESCENT STATE/ END GRACE PERIOD 50021;]?DER (go)

READ—SIDE HELPER PROCESS CALLBACKS (49E) (48F) US 8,869,166 B2 Page 2

(56) References Cited H. Boehm, “The Space Cost of Lazy Reference Counting,” ACM SIGPLAN Notices, Proceedings of the 31st ACM SIGPLAN U.S. PATENT DOCUMENTS SIGACT Symposium on Principles of Programming Languages, POPL ’04, vol. 39, Issue 1, Jan. 2004, p. 210-219. 7,353,346 B2 4/2008 McKenney et al. M. Michael, “Scalable Lock-Free Dynamic Memory Allocation,” 7,395,263 B2 7/2008 McKenney ACM SIGPLAN Notices, Proceedings of the ACM SIGPLAN 2004 7,395,383 B2 7/2008 McKenney 7,426,511 B2 9/2008 McKenney Conference on Programming Language Design and Implementation; 7,454,581 B2 11/2008 McKenney et al. PLDI ’04, vol. 39, Issue 6, Jun. 2004, p. 35-46. 7,472,228 B2 12/2008 McKenney et al. D. Dice et al., “Mostly Lock-Free Malloc,” ACM SIGPLAN Notices, 7,653,791 B2 1/2010 McKenney Proceedings of the 3rd International Symposium on Memory Man 7,689,789 B2 3/2010 McKenney et al. agement, ISMM ’02, vol. 38, Issue 2 Supplement, Jun. 2002, p. 7,734,879 B2 6/2010 McKenney et al. 163-174. 7,734,881 B2 6/2010 McKenney et al. 7,747,805 B2 6/2010 McKenney J. Corbet, “Read-copy-update for realtime,” LWN.net, Sep. 26, 2006, 7,814,082 B2 10/2010 McKenney 3 pages. 7,818,306 B2 10/2010 McKenney et al. McKenney, “Seven real-time approaches (Part C)”, 7,873,612 B2 1/2011 McKenney et al. LinuxDevices.com, Jun. 7, 2005, 13 pages. 7,904,436 B2 3/2011 McKenney P. McKenney, “ RCU and CONFIGiPREEMPTiRT progress,” 7,934,062 B2 4/2011 McKenney et al. Mailing List, May 9, 2005, 2 pages. 7,953,708 B2 5/2011 McKenney et al. 7,953,778 B2 5/2011 McKenney et al. 0. Nesterov, QRCU: ‘Quick’ SRCU Implementation, Linux Kernel 2004/0054861 A1 3/2004 Harres Mailing List, Dec. 1, 2005, 3 pages. 2006/0112121 A1 5/2006 McKenney et al. P. McKenney, “Sleepable RCU”, LWN.net, Oct. 9, 2006, 10 pages. 2006/0117072 A1 6/2006 McKenney P. McKenney, “Read-Copy Update Implementations”, 2001, 3 pages. 2006/0130061 A1 6/2006 McKenney M. Herlihy, “A Methodology for Implementing Highly Concurrent 2006/0265373 A1 11/2006 McKenney et al. Data Objects,” ACM Transactions on Programming Languages and 2007/0067770 A1 3/ 2007 Thomasson Systems, vol. 15, Issue 5, Nov. 1993, pp. 745-770. 2007/0198520 A1 8/2007 McKenney et al. M. Michael, “Safe Memory Reclamation for Dynamic Lock-Free 2008/0082532 A1 4/2008 McKenney Objects Using Atomic Reads and Writes,” Proceedings of the 21st 2008/0140951 A1 6/2008 McKenney et al. Annual ACM Symposium on Principles of Distributed Computing, 2008/0313238 A1 12/2008 McKenney et al. Jul. 2002, 10 pages. 2009/0006403 A1 1/ 2009 McKenney N. Barghouti et al., “Concurrency Control in Advanced Database 2009/0077080 A1 3/ 2009 McKenney 2009/0254764 A1 10/ 2009 McKenney et al. Operations,” Jan. 1994, 83 pages. 2010/0023946 A1 1/2010 McKenney P. McKenney, “Exploiting Deferred Destruction: An Analysis of 2011/0055183 A1 3/2011 McKenney Read-Copy-Update Techniques in Operating System Kernels,” OGI School of School of Science & Engineering at Oregon Health & OTHER PUBLICATIONS Science University, Jul. 2004, pp. 1-380. P. McKenney et al., “Extending RCU for Realtime and Embedded P. Zijlstra, “[PATCH] slab: document SLABiDESTROYiBYi Workloads,” 2006 Ottawa , Aug. 11, 2006, 15 RCU”, LKML.org, Nov. 13, 2008, 1 page. pages. A. Arcangeli et al., “Using Read-Copy-Update Techniques for Sys P. McKenney, “The design of preemptible read-copy-update,” LWN. temV IPC in the Linux 2.5 Kernel,” 2003 FREENIX, Jun. 14, 2003, net, Oct. 8, 2007, 27 pages. 13 pages. P. McKenney, “Integrating and Validating dynticks and Preemptible S. Rostedt, “RCU Preemption Priority Boosting”, LKML .org, Oct. 3, RCU,” LWN.net, Apr. 22, 2008, 19 pages. 2011,13 pages. P. McKenney, “Hierarchical RCU,” LWN.net, Nov. 4, 2008, 19 I. Molnar et al., “linux/kernel/rcutree.h”, Jan. 1, 2008, 6 pages. pages. J. Seigh, “RCU + SMR for preemptive kernel/user threads,” Linux P. McKenney, “Is Parallel Programming Hard, and, If So, What Can Kernel Mailing List, May 9, 2005, 2 pages. You Do About It”, Mar. 8, 2009, 146 pages. M. Michael, “Hazard Pointers: Safe Memory Reclamation for Lock P. McKenney, “Priority-Boosting RCU Read-Side Critical Sections,” Free Objects,” IEEE Transactions on Parallel and Distributed Sys LWN.net, Feb. 5, 2007, 15 pages. tems, Jun. 2004, vol. 15, No. 6, pp. 491-504. P. McKenney et al., “Towards hard realtime response from the Linux D. Sarma et al., “Making RCU Safe for Deep Sub-Millisecond kernel on SMP hardware,” linux.conf.au, Canberra, Australia, Apr. Response Realtime Applications,” 2004 USENIX (UseLinux track) 2005, 16 pages. Jun. 2004, 9 pages. P. McKenney et a1 ., “Exploiting Deferred Destruction: An Analysis of P. McKenney, “RCU vs. Locking Performance on Different CPUs,” Read-Copy-Update Techniques in Operating System Kernels”, Jan. 2004 Linux.conf.au, 2004, 18 pages. 3, 2005, pp. 1-41. P. McKenney et al., “Scaling dcache with RCU,” Linux Journal, Jan. D. Guniguntala et al., “The read-copy-update mechanism for sup 1,2004, 12 pages. porting real-time applications on shared-memory multiprocessor P. McKenney et al., “Using RCU in the Linux 2.5 Kernel,” LInux systems with Linux”, IBM Systems Journal vol. 47 No. 2, 2008, pp. Journal, Oct. 1, 2003, 11 pages. 221-236. P. McKenney et al.,“Read-Copy Update,” 2002 Ottawa Linux Sym P. McKenney, “Introducing Technology Into Linux”, 2008 Linux posium, Jul. 8, 2002, 28 pages. Developer Symposium, China, 2008, 47 pages. H. Lindar et al., “Scalability of the Directory Entry Cache,” 2002 P. McKenney, “Simplicity Through Optimization”, linux.conf.au, Ottawa Linux Symposium, Jun. 26, 2002, pp. 289-300. Jan. 2010, 109 pages. P. McKenney et al., “Read-Copy Update,” 2001 Ottawa Linux sym P. McKenney, “Deterministic Synchronization in Multicore Systems: posium, Jul. 2001, 22 pages. the Role of RCU”, Aug. 18, 2009, pp. 1-9. P. McKenney et al., “Read-Copy Update: Using Execution History to P. McKenney, “RCU cleanups and simpli?ed preemptable RCU”, Solve Concurrency Problems,” PDCS, Oct. 1998, 11 pages. LKML.org, Jul. 23, 2009, 1 page. S. Dietrich et al., “Evolution of Real-Time Linux,” 7th RTL Work P. McKenney, “Expedited “big hammer” RCU grace periods”, shop, Nov. 17, 2005, 18 pages. LKML.org, Jun. 25, 2009, 2 pages. B. Gamsa, “Tornado: Maximizing Locality and Concurrency in a P. McKenney, “RCU: The Bloatwatch Edition”, LWN.net, Mar. 17, Shared Memory Multiprocessor Operating System,” 1999, 14 pages. 2009, 9 pages. Molnar et al., “Realtime and Linux,” 2005 Linux Kernel Summit, 8 M. Desnoyers, “Low-Impact Operating System Tracing”, University pages. of Montreal, PhD Thesis, Dec. 2009, 233 pages. US 8,869,166 B2 Page 3

(56) References Cited P. McKenney, RCU part 3: the RCU API, LWN.net, Jan. 7, 2008, 7 pages. OTHER PUBLICATIONS T. Hart et al., “Performance of memory reclamation for lockless synchronization”, Journal of Parallel and Distributed Computing, P. McKenney, “Using a Malicious User-Level RCU to Torture RCU Dec. 2007, pp. 1270-1285. Based Algorithms”, linuX.conf.au, Jan. 2009, 51 pages. P. McKenney et al., “Introducing Technology Into the Linux Kernel: McKenney, “Using Promela and Spin to verify parallel algorithms”, A Case Study”, Operating Systems Review, Jul. 2008, 16 pages. LWN.net, Aug. 1, 2007, ll pages. P. McKenney, “What is RCU, Fundamentally”, LWN.net, Dec. 17, McKenney, “RCU and Unloadable Modules”, LWN.net, Jan. 14, 2007, 15 pages. 2007, 4 pages. P. McKenney, What is RCU? Part 2: Usage, LWN.net,Dec. 24, 2007, 15 pages. * cited by examiner US. Patent Oct. 21, 2014 Sheet 1 0f 32 US 8,869,166 B2

B

FIG. 1A (PRIOR ART)

B f r1 FIG. 18 (PRIOR ART)

a -

C B /

r1 FIG. 1C (PRIOR ART)

A

FIG. 1D (PRIOR ART) US. Patent 0a. 21, 2014 Sheet 2 0f 32 US 8,869,166 B2

A ‘ B ‘ C + r1 FIG. 2A (PRIOR ART)

W

A B ‘ C + + 1* r2 r1

FIG. 28 (PRIOR ART) l—bO FIG. 2C (PRIOR ART) US. Patent Oct. 21, 2014 Sheet 3 0f 32 US 8,869,166 B2

GRACE PERIOD

TASK O

TASK 1

TASK 3

FIG. 3 (PRIOR ART)

UNIPROCESSOR SYSTEM 2

PROCESSOR 4

UPDATER UPDATER UPDATER 181 182 " ' 1&

READER READER READER 2L 2E - -- 2h MEMORY 8 RCUSUBSYS 20 SHARED DATASETS 16 CACHE MEMORY 10 MEMORY CACHE CONTROLLER CONTROLLER 14 12

SYSTEM BUS(6)

FIG. 4 US. Patent Oct. 21, 2014 Sheet 4 0f 32 US 8,869,166 B2

IVIULTIPROCESSOR COMPUTER SYSTEM 2A

PROCESSOR PROCESSOR PROCESSOR 41 42 4n UPDATER UPDATER UPDATER 18 182 18" 1 MEMORY READER READER READER 8 211 212 21"

RCU SUBSYS RCU SUBSYS RCU SUBSYS SHARED 20 20 20 20 DATA SET

CACHE1 CACHE2 CACHEn MEMORY MEMORY MEMORY 101 102 10.1 MEMORY CACHE CACHE CACHE CONTROLLER CONTROLLER CONTROLLER CONTROLLER 14 121 12 12n

SYSTEM BUS(@

FIG. 5

RCU SUBSYSTEM (20)

RCU SUBSYSTEM RCU SUBSYSTEM DATA STRUCTURES SUPPORT FUNCTIONS (30) (40) RCU CONTROL RCU READER BLOCK AP| (32) (42)

RCU PREEMPT RCU UPDATER CONTROL API BLOCK (44) (34) RCU GRACE RCU SPEC|F|C PERIOD AP| TASK_STRUCT (46) F|ELDS (36) GRACE PERIOD DETECTION AND CALLBACK PROCESSING (48)

FIG. 6 US. Patent 0a. 21, 2014 Sheet 5 0f 32 US 8,869,166 B2

RCU CONTROL BLOCK (32)

CALLBACK LIST N 32A RCU DONETAIL N325 RCU CURTAIL N326

—+ V _> _>NEXT > ->NEXT > ->NEXT ->FUNC ->FUNC ->FUNC

320 320 320

+— FROM NEXTTAIL (348) ~ ->NEXT N320 ->FUNC

FIG. 7

RCU PREEMPT CONTROL BLOCK (34) RCU-SPECIFIC 34AM CTRLBLCK TASK_STRUCT FIELDS 345 \A NEXTTAIL (36) 346 \A BLKD_TASKS 36A \A RCU_READ_LOCK_NESTING 34D \A GP_TASKS 365 \A RCU_READ_UNLOCK_SPECIAL 34E \A EXP_TASKS 366 \A RCU_NODE_ENTRY 34F \A BOOST_TASKS 346 \A GPNUM 0 34H“ GPCPUO FIG. 9 34' \A COMPLETED 0

FIG. 8 US. Patent Oct. 21, 2014 Sheet 6 0f 32 US 8,869,166 B2

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL 346 \A BLKD_TASKS 34D \A GP_TASKS 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 0 34H \A GPCPU 0 34' \A COMPLETED 0

FIG. 10A

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL 346 \A BLKD_TASKS V T1 T2 342% GP_TASKS 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 0 34H \A GPCPU 0 34' \A COMPLETED 0

FIG. lOB US. Patent Oct. 21, 2014 Sheet 7 0f 32 US 8,869,166 B2

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS > T1 => T2 => T3 34D \A GP_TASKS —4 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 0 34' \A COMPLETED 0

FIG. 1 0C

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS > T1 == T3 34D \A GP_TASKS —4 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 0 34' \A COMPLETED 0

FIG. 10D US. Patent Oct. 21, 2014 Sheet 8 0f 32 US 8,869,166 B2

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS = > T4 => T1 => T3 34D \A GP_TASKS ‘ 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 1 34' \A COMPLETED 0

FIG. 1 OE

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS = > T5 => T4 => T1 34D \A GP_TASKS —4 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 1 34' \A COMPLETED 0

FIG. 10F US. Patent Oct. 21, 2014 Sheet 9 0f 32 US 8,869,166 B2

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS = > T5 => T4 => T1 34D \A GP_TASKS “ 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 1 34' \A COMPLETED 0

FIG. 1 OG

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS = > T5 => T4 => T1 34D \A GP_TASKS —4 “

34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 1 34' \A COMPLETED 0

FIG. 10H US. Patent Oct. 21, 2014 Sheet100f32 US 8,869,166 B2

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS T5 = > T1 34D \A GP_TASKS —4 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 1 34' \A COMPLETED 0

FIG. 10!

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL 346 \A BLKD_TASKS 34D \A GP_TASKS 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 1 34' \A COMPLETED 1 FIG. 10] US. Patent Oct. 21, 2014 Sheet 11 0f 32 US 8,869,166 B2

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS = > T6 => T5 34D \A GP_TASKS “ 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 1 34' \A COMPLETED 1

FIG. 1 OK

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS = > T7 => T6 <> T5 34D \A GP_TASKS “ 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 1 34H \A GPCPU 1 34' \A COMPLETED 1

FIG. 10L US. Patent Oct. 21, 2014 Sheet 12 0f 32 US 8,869,166 B2

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS = > T7 => T6 => T5 34D \A GP_TASKS —4 “ 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 2 34H \A GPCPU 1 34' \A COMPLETED 1

FIG. 1 OM

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS = > T6 => T5 34D \A GP_TASKS “ 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 2 34H \A GPCPU 1 34' \A COMPLETED 1

FIG. lON US. Patent Oct. 21, 2014 Sheet 13 0f 32 US 8,869,166 B2

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL

346 \A BLKD_TASKS A V 34D \A GP_TASKS 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 2 34H \A GPCPU 1 34' \A COMPLETED 1

FIG. 100

RCU PREEMPT CONTROL BLOCK (34) 34A \A CTRLBLCK

345 \A NEXTTAIL 346 \A BLKD_TASKS 34D \A GP_TASKS 34E \A EXP_TASKS 34F \A BOOST_TASKS 346 \A GPNUM 2 34H \A GPCPU 2 34' \A COMPLETED 2

FIG. 10P US. Patent Oct. 21, 2014 Sheet 14 0f 32 US 8,869,166 B2

RCU SUBSYSTEM SUPPORT FUNCTIONS (40)

RCU READER API RCU UPDATER AP| RCU GRACE PERIOD API (42) (44) (46) READER REGISTER REGISTRATION CALLBACK CHECK (Egg-BACKS (42A) (44A)

READER EXPEDITED UNREGISTRATION GRACE PERIOD (425) (448)

GRACE PERIOD DETECTION AND CALLBACK PROCESSING (48)

START NORMAL BLOCKED REQDAER HANDLER GRACE PERIOD (48B)

RECORD QUIESCENT STATE/ END GRACE PERIOD BooségD'i/I‘DER (48C)

READ-SIDE HELPER PROCESS CALLBACKS (48E) (48F)

FIG. 11 US. Patent Oct. 21, 2014 Sheet 15 0f 32 US 8,869,166 B2

READER READER REGISTER EXPEDITED REGISTRATION UNREGISTRATION CALLBACK GRACE PERIOD (42A) (42B) (44A) (445)

MANIPULATE RCU READ LOCK NESTINGI CALL _ _ _ READ'S'DE ADD CALLBACKI HELPER START GP. RCU-SPECIFIC v TASK_STRUCT FIELDS (36) READ-SIDE HELPER RCU_READ_LOCK_NESTING (36A) i48E) E RCU_READ_UNLOCK_SPECIAL (36B) SET RCUEREADE END GP RCU_NODE_ENTRY (360) UNLOCKESEEC'AI- AND START TO UNBLOCKED AND NEW ONE RESET TO END G-P- 'F /OR UNBOOSTED IE UNBLOCKED UNLOCKDSPECIALRCU_REAEL I NEEDED I— BLOCKED READER INDICATES HANDLER Q-S- NEEDED REMOVE — (48A) READER FROM RCU PREEMPT RSSLEE-GTé‘STZZES CONTROL BLOCK EXPETAS—KS OR I ADD READER TO (34) DODSTJASKS BLKDJASKS -- ACCORDINGLY SEPT SEES/(AS? CTRLBLCK (34A) GPCPU NEXTTAIL (345) SET EXP_TASKS REQUEST —: BLKD_TASKS (34C) G'P' END GP_TASKS (34D) SET GPDTASKS EXP_TASKS (34E) START NORMAL BOOST_TASKS (34F) GRACE PERIOD _ ADVANCE ‘|IIIIMIII (4|8B) GPNUM T GPNUM (34G) SET BOOST_TASKS GPCPU (34H) REQUEST I G.P. END ADVANCE I_—’ COMPLETED (34l) BOOST GPCPU READER ADVANCE (48D) RECORD Q.S./END J COMPLETED SET —> GRACE PERIOD RCUiREADiUNLOCKiSPECIAL SET (480) ,_>TO IND|CATE Q S NEEDED RCU_READ_UNLOCK_SPECIAL ‘ ' ' TO INDICATE BOOSTED RESET <__ RCUiREADi REQUEST G-P- END RCU CONTROL BLOCK UNLOCK_SPEC|AL | (32) TO INDICATE QS. CHECK NOT NEEDED CALLBACKS CALLBACK LIST (32A) (46A) DONETAIL (325) RAISE SOFTIRQ TO INVOKE CALLBACK PROCESSING CURTAIL (32(3) I— I 32D ‘ E H _> ->NEXT : ->NEXT = ->NEXT CALLBACKS _> ->FUNC ,L ->FUNC x ->FUNC (48F) 32D 32D FROM NEXTTAIL (345) FIG I 12 T ->FUNC N US. Patent 061. 21, 2014 Sheet 16 0f 32 US 8,869,166 B2

RCU READER REGISTRATION (42A) I START I

II INCREMENT RCU_ 5O READ_LOCK_ /\/ NESTING

v I DONE I FIG. 13

RCU READER UNREGISTRATION (428)

I START I

II 52 DECREMENT /\/ RCU_READ_LOCK_NEST|NG

READER OUT OF LAST RCU READ—SIDE CRITICAL SECTION AND RCU_READ_UNLOCK_SPECIAL FLAG SET?

7

INVOKE READ-SIDE HELPER

FIG. 14 US. Patent Oct. 21, 2014 Sheet 17 0f 32 US 8,869,166 B2

BLOCKED READER I START I HANDLER

(48A) I 60 DISABLE INTERRUPTS

READER IN RCU READ—SIDE CRITICAL SECTION AND ' CU_READ_UNLOCK_BLOCKED FLAG NOT SET?

SET 64 RCU_READ_UNLOCK_BLOCKED FLAG

II ADD READER TO BLOCKED—TASKS LIST

68

YES HAS PROCESSOR ACKNOWLEDGED CURRENT GRACE PERIOD?

SET GP_TASKS POINTER TO REFERENCE NEWLY-ADDED READER IN BLOCKED TASKS LIST I 72 RECORD Q.S./END CURRENT GRACE PERIOD

I 74 RESTORE INTERRUPTS

FIG. 15