/Linux-v6.1/Documentation/RCU/ |
D | rcu.rst | 3 RCU Concepts 6 The basic idea behind RCU (read-copy update) is to split destructive 11 since dropped their references. For example, an RCU-protected deletion 14 information on using RCU with linked lists. 19 - Why would anyone want to use RCU? 21 The advantage of RCU's two-part approach is that RCU readers need 25 on modern CPUs is what gives RCU its performance advantages 26 in read-mostly situations. The fact that RCU readers need not 30 if the RCU readers give no indication when they are done? 32 Just as with spinlocks, RCU readers are not permitted to [all …]
|
D | whatisRCU.rst | 3 What is RCU? -- "Read, Copy, Update" 6 Please note that the "What is RCU?" LWN series is an excellent place 7 to start learning about RCU: 9 | 1. What is RCU, Fundamentally? https://lwn.net/Articles/262464/ 10 | 2. What is RCU? Part 2: Usage https://lwn.net/Articles/263130/ 11 | 3. RCU part 3: the RCU API https://lwn.net/Articles/264090/ 12 | 4. The RCU API, 2010 Edition https://lwn.net/Articles/418853/ 14 | 5. The RCU API, 2014 Edition https://lwn.net/Articles/609904/ 16 | 6. The RCU API, 2019 Edition https://lwn.net/Articles/777036/ 20 What is RCU? [all …]
|
D | RTFP.txt | 4 This document describes RCU-related publications, and is followed by 6 be found at http://www.rdrop.com/users/paulmck/RCU/. For others, browsers 9 The first thing resembling RCU was published in 1980, when Kung and Lehman 23 serialization, which is an RCU-like mechanism that relies on the presence 31 (In contrast, implementation of RCU is permitted only in software licensed 35 At first glance, this has nothing to do with RCU, but nevertheless 37 RCU implementation in DYNIX/ptx. In 1988, Barbara Liskov published 66 synchronization [HMassalinPhD]. RCU makes extremely heavy use of 91 1995 also saw the first publication of DYNIX/ptx's RCU mechanism 98 mechanism, which is quite similar to RCU [Gamsa99]. These operating [all …]
|
D | lockdep.rst | 4 RCU and lockdep checking 7 All flavors of RCU have lockdep checking available, so that lockdep is 8 aware of when each task enters and leaves any flavor of RCU read-side 9 critical section. Each flavor of RCU is tracked separately (but note 11 tracking to include RCU state, which can sometimes help when debugging 14 In addition, RCU provides the following primitives that check lockdep's 17 rcu_read_lock_held() for normal RCU. 18 rcu_read_lock_bh_held() for RCU-bh. 19 rcu_read_lock_sched_held() for RCU-sched. 31 Check for RCU read-side critical section. [all …]
|
D | checklist.rst | 4 Review Checklist for RCU Patches 9 that make use of RCU. Violating any of the rules listed below will 14 0. Is RCU being applied to a read-mostly situation? If the data 17 performance measurements show that RCU is nonetheless the right 18 tool for the job. Yes, RCU does reduce read-side overhead by 20 of RCU will do much more reading than updating. 22 Another exception is where performance is not an issue, and RCU 27 Yet another exception is where the low real-time latency of RCU's 30 One final exception is where RCU readers are used to prevent 40 RCU does allow *readers* to run (almost) naked, but *writers* must [all …]
|
D | stallwarn.rst | 4 Using RCU's CPU Stall Detector 7 This document first discusses what sorts of issues RCU's CPU stall 13 What Causes RCU CPU Stall Warnings? 16 So your kernel printed an RCU CPU stall warning. The next question is 17 "What caused it?" The following problems can result in RCU CPU stall 20 - A CPU looping in an RCU read-side critical section. 37 RCU CPU stall warning messages. Especially if you have added 40 - Anything that prevents RCU's grace-period kthreads from running. 48 happen to preempt a low-priority task in the middle of an RCU 51 in which case the next RCU grace period can never complete, which [all …]
|
D | UP.rst | 3 RCU on Uniprocessor Systems 18 Suppose that an RCU-based algorithm scans a linked list containing 40 Suppose that an RCU-based algorithm again scans a linked list containing 45 RCU usage, since call_rcu() must wait for a grace period to elapse. 48 underlying RCU, namely that call_rcu() defers invoking its arguments until 49 all RCU read-side critical sections currently executing have completed. 84 What locking restriction must RCU callbacks respect? 91 Permitting call_rcu() to immediately invoke its arguments breaks RCU, 92 even on a UP system. So do not do it! Even on a UP system, the RCU 101 preemptable RCU? [all …]
|
D | rcubarrier.rst | 3 RCU and Unloadable Modules 8 RCU (read-copy update) is a synchronization mechanism that can be thought 11 and unbounded latency. RCU read-side critical sections are delimited 15 This means that RCU writers are unaware of the presence of concurrent 16 readers, so that RCU updates to shared data must be undertaken quite 19 such readers might hold a reference to them. RCU updates can therefore be 20 rather expensive, and RCU is thus best suited for read-mostly situations. 22 How can an RCU writer possibly determine when all readers are finished, 35 rcu_head struct placed within the RCU-protected data structure and 41 call_rcu(&p->rcu, p_callback); [all …]
|
D | lockdep-splat.rst | 4 Lockdep-RCU Splat 7 Lockdep-RCU was added to the Linux kernel in early 2010 9 misuses of the RCU API, most notably using one of the rcu_dereference() 10 family to access an RCU-protected pointer without the proper protection. 11 When such misuse is detected, an lockdep-RCU splat is emitted. 13 The usual cause of a lockdep-RCU slat is someone accessing an 14 RCU-protected data structure without either (1) being in the right kind of 15 RCU read-side critical section or (2) holding the right update-side lock. 20 So let's look at an example RCU lockdep splat from 3.0-rc5, one that 24 WARNING: suspicious RCU usage [all …]
|
D | torture.rst | 4 RCU Torture Test Operation 11 The CONFIG_RCU_TORTURE_TEST config option is available for all RCU 26 …rcu-torture:--- Start of test: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_… 27 …rcu-torture: rtc: (null) ver: 155441 tfle: 0 rta: 155441 rtaf: 8884 rtf: 155440 rtmbe: 0… 28 rcu-torture: Reader Pipe: 727860534 34213 0 0 0 0 0 0 0 0 0 29 rcu-torture: Reader Batch: 727877838 17003 0 0 0 0 0 0 0 0 0 30 …rcu-torture: Free-Block Circulation: 155440 155440 155440 155440 155440 155440 155440 155440 1554… 31 …rcu-torture:--- End of test: SUCCESS: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_n… 36 the RCU torture test. The printk()s use KERN_ALERT, so they should 41 automatic determination as to whether RCU operated correctly. [all …]
|
/Linux-v6.1/kernel/rcu/ |
D | Kconfig | 3 # RCU-related configuration options 6 menu "RCU Subsystem" 14 This option selects the RCU implementation that is 24 This option selects the RCU implementation that is 36 This option selects the RCU implementation that is 39 memory footprint of RCU. 42 bool "Make expert-level adjustments to RCU configuration" 46 expert-level adjustments to RCU configuration. By default, 50 obscure RCU options to be set up. 52 Say Y if you need to make expert-level adjustments to RCU. [all …]
|
D | Kconfig.debug | 3 # RCU-related debugging configuration options 6 menu "RCU Debugging" 12 bool "RCU list lockdep debugging" 16 Enable RCU lockdep checking for list usages. By default it is 17 turned off since there are several list RCU users that still 27 tristate "performance tests for RCU" 34 tests on the RCU infrastructure. The kernel module may be built 37 Say Y here if you want RCU performance tests to be built into 39 Say M if you want the RCU performance tests to build as a module. 43 tristate "torture tests for RCU" [all …]
|
D | update.c | 49 #include "rcu.h" 67 * rcu_read_lock_held_common() - might we be in RCU-sched read-side critical section? 76 * RCU-sched read-side critical section. In absence of 77 * CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an RCU-sched read-side 79 * of preemption (including disabling irqs) counts as an RCU-sched 81 * that required that they be called within an RCU-sched read-side 87 * Note that if the CPU is in the idle loop from an RCU point of view (ie: 90 * rcu_read_lock(). The reason for this is that RCU ignores CPUs that are 92 * so such a CPU is effectively never in an RCU read-side critical section 93 * regardless of what RCU primitives it invokes. This state of affairs is [all …]
|
/Linux-v6.1/tools/memory-model/ |
D | linux-kernel.cat | 42 let gp = po ; [Sync-rcu | Sync-srcu] ; po? 47 let barrier = fencerel(Barrier | Rmb | Wmb | Mb | Sync-rcu | Sync-srcu | 49 Rcu-lock | Rcu-unlock | Srcu-lock | Srcu-unlock) | 98 (* RCU *) 106 * In the definition of rcu-fence below, the po term at the left-hand side 108 * out. They have been moved into the definitions of rcu-link and rb. 111 let rcu-gp = [Sync-rcu] (* Compare with gp *) 113 let rcu-rscsi = rcu-rscs^-1 118 * one but two non-rf relations, but only in conjunction with an RCU 121 let rcu-link = po? ; hb* ; pb* ; prop ; po [all …]
|
D | linux-kernel.bell | 28 'rcu-lock (*rcu_read_lock*) || 29 'rcu-unlock (*rcu_read_unlock*) || 30 'sync-rcu (*synchronize_rcu*) || 43 (* Compute matching pairs of nested Rcu-lock and Rcu-unlock *) 44 let rcu-rscs = let rec 45 unmatched-locks = Rcu-lock \ domain(matched) 46 and unmatched-unlocks = Rcu-unlock \ range(matched) 56 flag ~empty Rcu-lock \ domain(rcu-rscs) as unbalanced-rcu-locking 57 flag ~empty Rcu-unlock \ range(rcu-rscs) as unbalanced-rcu-locking 75 (* Check for use of synchronize_srcu() inside an RCU critical section *) [all …]
|
/Linux-v6.1/Documentation/RCU/Design/Requirements/ |
D | Requirements.rst | 2 A Tour Through RCU's Requirements 18 Read-copy update (RCU) is a synchronization mechanism that is often used 19 as a replacement for reader-writer locking. RCU is unusual in that 20 updaters do not block readers, which means that RCU's read-side 23 this concurrency between RCU readers and updaters does raise the 24 question of exactly what RCU readers are doing, which in turn raises the 25 question of exactly what RCU's requirements are. 27 This document therefore summarizes RCU's requirements, and can be 28 thought of as an informal, high-level specification for RCU. It is 29 important to understand that RCU's specification is primarily empirical [all …]
|
/Linux-v6.1/kernel/ |
D | context_tracking.c | 6 * This is used by RCU to remove its dependency on the timer tick while a CPU 16 * RCU extended quiescent state bits imported from kernel/rcu/tree.c 26 #include <trace/events/rcu.h> 57 /* Turn on heavyweight RCU tasks trace readers on idle/user entry. */ 66 /* Turn off heavyweight RCU tasks trace readers on idle/user exit. */ 78 * RCU is watching prior to the call to this function and is no longer 86 * CPUs seeing atomic_add_return() must see prior RCU read-side in ct_kernel_exit_state() 92 // RCU is no longer watching. Better be in extended quiescent state! in ct_kernel_exit_state() 98 * called from an extended quiescent state, that is, RCU is not watching 107 * and we also must force ordering with the next RCU read-side in ct_kernel_enter_state() [all …]
|
/Linux-v6.1/include/linux/ |
D | rcupdate.h | 51 // not-yet-completed RCU grace periods. 151 * RCU_NONIDLE - Indicate idle-loop code that needs RCU readers 152 * @a: Code that RCU needs to pay attention to. 154 * RCU read-side critical sections are forbidden in the inner idle loop, 155 * that is, between the ct_idle_enter() and the ct_idle_exit() -- RCU 160 * will tell RCU that it needs to pay attention, invoke its argument 162 * and then tell RCU to go back to ignoring this CPU. It is permissible 176 * Note a quasi-voluntary context switch for RCU-tasks's benefit. 244 * cond_resched_tasks_rcu_qs - Report potential quiescent states to RCU 247 * report potential quiescent states to RCU-tasks even if the cond_resched() [all …]
|
D | rculist.h | 8 * RCU-protected list version 14 * INIT_LIST_HEAD_RCU - Initialize a list_head visible to RCU readers 29 * return the ->next pointer of a list_head in an rcu safe 45 * Check during list traversal that we are within an RCU reader 55 "RCU-list traversed in non-reader section!"); \ 61 "RCU-list traversed without holding the required lock!");\ 89 * list_add_rcu - add a new entry to rcu-protected list 110 * list_add_tail_rcu - add a new entry to rcu-protected list 136 * the entry is in an undefined state. It is useful for RCU based 152 * or call_rcu() must be used to defer freeing until an RCU [all …]
|
D | rcupdate_wait.h | 6 * RCU synchronization types and methods: 13 * Structure allowing asynchronous waiting on RCU. 38 * This macro waits concurrently for multiple types of RCU grace periods. 40 * on concurrent RCU and RCU-tasks grace periods. Waiting on a given SRCU 45 * The first argument tells Tiny RCU's _wait_rcu_gp() not to 46 * bother waiting for RCU. The reason for this is because anywhere
|
/Linux-v6.1/Documentation/filesystems/ |
D | path-lookup.txt | 22 Since 2.5.62 kernel, dcache has been using a new locking model that uses RCU to 34 Since 2.6.38, RCU is used to make a significant part of the entire path walk 36 even stores into cachelines of common dentries). This is known as "rcu-walk" 84 The hash lists are RCU protected, so list walking is not serialised with 85 concurrent updates (insertion, deletion from the hash). This is a standard RCU 100 Back to the rename case. In usual RCU protected lists, the only operations that 102 list. The object will not be reused until an RCU grace period is complete. 103 This ensures the RCU list traversal primitives can run over the object without 104 problems (see RCU documentation for how this works). 114 new list before waiting for a grace period, this can result in a concurrent RCU [all …]
|
/Linux-v6.1/Documentation/devicetree/bindings/phy/ |
D | lantiq,vrx200-pcie-phy.yaml | 45 lantiq,rcu: 47 description: phandle to the RCU syscon 49 lantiq,rcu-endian-offset: 51 description: the offset of the endian registers for this PHY instance in the RCU syscon 53 lantiq,rcu-big-endian-mask: 73 - lantiq,rcu 74 - lantiq,rcu-endian-offset 75 - lantiq,rcu-big-endian-mask 84 lantiq,rcu = <&rcu0>; 85 lantiq,rcu-endian-offset = <0x4c>; [all …]
|
/Linux-v6.1/tools/rcu/ |
D | rcu-cbs.py | 4 # Dump out the number of RCU callbacks outstanding. 6 # On older kernels having multiple flavors of RCU, this dumps out the 9 # Usage: sudo drgn rcu-cbs.py 22 rdp0 = prog.variable('rcu_preempt_data', 'kernel/rcu/tree.c'); 29 'kernel/rcu/tree.c'); 34 rdp0 = prog.variable('rcu_data', 'kernel/rcu/tree.c'); 39 # Sum up RCU callbacks. 44 # print("CPU " + str(cpu) + " RCU callbacks: " + str(len)); 46 print("Number of RCU callbacks in flight: " + str(sum));
|
/Linux-v6.1/include/trace/events/ |
D | rcu.h | 3 #define TRACE_SYSTEM rcu 48 * RCU flavor, the grace-period number, and a string identifying the 99 * "NoGPkthread": The RCU grace-period kthread has not yet started. 142 * distinguished by the type of RCU, the new grace-period number, the 145 * All but the type of RCU are extracted from the rcu_node structure. 179 * the RCU flavor, the expedited grace-period sequence number, and a string 216 * string identifying the RCU flavor, an integer identifying the rcu_node 254 * Tracepoint for RCU no-CBs CPU callback handoffs. This event is intended 257 * The first argument is the name of the RCU flavor, and the second is 307 * Tracepoint for tasks blocking within preemptible-RCU read-side [all …]
|
/Linux-v6.1/Documentation/RCU/Design/Data-Structures/ |
D | Data-Structures.rst | 12 This document describes RCU's major data structures and their relationship 18 RCU is for all intents and purposes a large state machine, and its 19 data structures maintain the state in such a way as to allow RCU readers 20 to execute extremely quickly, while also processing the RCU grace periods 22 The efficiency and scalability of RCU updaters is provided primarily 35 If the actual hardware has only 16 CPUs, RCU will adjust itself 88 32-bit system), then RCU will automatically add more levels to the tree. 90 65,536 CPUs, RCU would configure the ``rcu_node`` tree as follows: 94 RCU currently permits up to a four-level tree, which on a 64-bit system 102 and scalability benefits of partitioning, even though RCU grace-period [all …]
|