@@ -80,36 +80,35 @@ struct rcu_cblist {
8080 * | SEGCBLIST_RCU_CORE | SEGCBLIST_LOCKING | SEGCBLIST_OFFLOADED |
8181 * | |
8282 * | Callbacks processed by rcu_core() from softirqs or local |
83- * | rcuc kthread, while holding nocb_lock. Waking up CB and GP kthreads, |
84- * | allowing nocb_timer to be armed. |
83+ * | rcuc kthread, while holding nocb_lock. Waking up CB and GP kthreads. |
8584 * ----------------------------------------------------------------------------
8685 * |
8786 * v
88- * -----------------------------------
89- * | |
90- * v v
91- * --------------------------------------- ---------------------------------- |
92- * | SEGCBLIST_RCU_CORE | | | SEGCBLIST_RCU_CORE | |
93- * | SEGCBLIST_LOCKING | | | SEGCBLIST_LOCKING | |
94- * | SEGCBLIST_OFFLOADED | | | SEGCBLIST_OFFLOADED | |
95- * | SEGCBLIST_KTHREAD_CB | | SEGCBLIST_KTHREAD_GP |
96- * | | | |
97- * | | | |
98- * | CB kthread woke up and | | GP kthread woke up and |
99- * | acknowledged SEGCBLIST_OFFLOADED. | | acknowledged SEGCBLIST_OFFLOADED |
100- * | Processes callbacks concurrently | | |
101- * | with rcu_core(), holding | | |
102- * | nocb_lock. | | |
103- * --------------------------------------- -----------------------------------
104- * | |
105- * -----------------------------------
87+ * ----------------------------------------- -----------------------------------
88+ * | SEGCBLIST_RCU_CORE | SEGCBLIST_LOCKING | SEGCBLIST_OFFLOADED |
89+ * | + unparked CB kthread |
90+ * | |
91+ * | CB kthread got unparked and processes callbacks concurrently with |
92+ * | rcu_core(), holding nocb_lock. |
93+ * ---------------------------------------------------------------------------
94+ * |
95+ * v
96+ * --------------------------------------------------------------------------- |
97+ * | SEGCBLIST_RCU_CORE | |
98+ * | SEGCBLIST_LOCKING | |
99+ * | SEGCBLIST_OFFLOADED | |
100+ * | SEGCBLIST_KTHREAD_GP |
101+ * | + unparked CB kthread |
102+ * | |
103+ * | GP kthread woke up and acknowledged nocb_lock. |
104+ * ---------------------------------------- -----------------------------------
106105 * |
107106 * v
108107 * |--------------------------------------------------------------------------|
109- * | SEGCBLIST_LOCKING | |
110- * | SEGCBLIST_OFFLOADED | |
108+ * | SEGCBLIST_LOCKING | |
109+ * | SEGCBLIST_OFFLOADED | |
111110 * | SEGCBLIST_KTHREAD_GP | |
112- * | SEGCBLIST_KTHREAD_CB |
111+ * | + unparked CB kthread |
113112 * | |
114113 * | Kthreads handle callbacks holding nocb_lock, local rcu_core() stops |
115114 * | handling callbacks. Enable bypass queueing. |
@@ -125,8 +124,8 @@ struct rcu_cblist {
125124 * |--------------------------------------------------------------------------|
126125 * | SEGCBLIST_LOCKING | |
127126 * | SEGCBLIST_OFFLOADED | |
128- * | SEGCBLIST_KTHREAD_CB | |
129127 * | SEGCBLIST_KTHREAD_GP |
128+ * | + unparked CB kthread |
130129 * | |
131130 * | CB/GP kthreads handle callbacks holding nocb_lock, local rcu_core() |
132131 * | ignores callbacks. Bypass enqueue is enabled. |
@@ -137,11 +136,11 @@ struct rcu_cblist {
137136 * | SEGCBLIST_RCU_CORE | |
138137 * | SEGCBLIST_LOCKING | |
139138 * | SEGCBLIST_OFFLOADED | |
140- * | SEGCBLIST_KTHREAD_CB | |
141139 * | SEGCBLIST_KTHREAD_GP |
140+ * | + unparked CB kthread |
142141 * | |
143142 * | CB/GP kthreads handle callbacks holding nocb_lock, local rcu_core() |
144- * | handles callbacks concurrently. Bypass enqueue is enabled. |
143+ * | handles callbacks concurrently. Bypass enqueue is disabled. |
145144 * | Invoke RCU core so we make sure not to preempt it in the middle with |
146145 * | leaving some urgent work unattended within a jiffy. |
147146 * ----------------------------------------------------------------------------
@@ -150,42 +149,31 @@ struct rcu_cblist {
150149 * |--------------------------------------------------------------------------|
151150 * | SEGCBLIST_RCU_CORE | |
152151 * | SEGCBLIST_LOCKING | |
153- * | SEGCBLIST_KTHREAD_CB | |
154152 * | SEGCBLIST_KTHREAD_GP |
153+ * | + unparked CB kthread |
155154 * | |
156155 * | CB/GP kthreads and local rcu_core() handle callbacks concurrently |
157- * | holding nocb_lock. Wake up CB and GP kthreads if necessary. Disable |
158- * | bypass enqueue. |
156+ * | holding nocb_lock. Wake up GP kthread if necessary. |
159157 * ----------------------------------------------------------------------------
160158 * |
161159 * v
162- * -----------------------------------
163- * | |
164- * v v
165- * ---------------------------------------------------------------------------|
166- * | | |
167- * | SEGCBLIST_RCU_CORE | | SEGCBLIST_RCU_CORE | |
168- * | SEGCBLIST_LOCKING | | SEGCBLIST_LOCKING | |
169- * | SEGCBLIST_KTHREAD_CB | SEGCBLIST_KTHREAD_GP |
170- * | | |
171- * | GP kthread woke up and | CB kthread woke up and |
172- * | acknowledged the fact that | acknowledged the fact that |
173- * | SEGCBLIST_OFFLOADED got cleared. | SEGCBLIST_OFFLOADED got cleared. |
174- * | | The CB kthread goes to sleep |
175- * | The callbacks from the target CPU | until it ever gets re-offloaded. |
176- * | will be ignored from the GP kthread | |
177- * | loop. | |
160+ * |--------------------------------------------------------------------------|
161+ * | SEGCBLIST_RCU_CORE | |
162+ * | SEGCBLIST_LOCKING | |
163+ * | + unparked CB kthread |
164+ * | |
165+ * | GP kthread woke up and acknowledged the fact that SEGCBLIST_OFFLOADED |
166+ * | got cleared. The callbacks from the target CPU will be ignored from the|
167+ * | GP kthread loop. |
178168 * ----------------------------------------------------------------------------
179- * | |
180- * -----------------------------------
181169 * |
182170 * v
183171 * ----------------------------------------------------------------------------
184172 * | SEGCBLIST_RCU_CORE | SEGCBLIST_LOCKING |
173+ * | + parked CB kthread |
185174 * | |
186- * | Callbacks processed by rcu_core() from softirqs or local |
187- * | rcuc kthread, while holding nocb_lock. Forbid nocb_timer to be armed. |
188- * | Flush pending nocb_timer. Flush nocb bypass callbacks. |
175+ * | CB kthread is parked. Callbacks processed by rcu_core() from softirqs or |
176+ * | local rcuc kthread, while holding nocb_lock. |
189177 * ----------------------------------------------------------------------------
190178 * |
191179 * v
0 commit comments