Blame view

kernel/rcutree_plugin.h 31.9 KB
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  /*
   * Read-Copy Update mechanism for mutual exclusion (tree-based version)
   * Internal non-public definitions that provide either classic
   * or preemptable semantics.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   *
   * Copyright Red Hat, 2009
   * Copyright IBM Corporation, 2009
   *
   * Author: Ingo Molnar <mingo@elte.hu>
   *	   Paul E. McKenney <paulmck@linux.vnet.ibm.com>
   */
d9a3da069   Paul E. McKenney   rcu: Add expedite...
26
  #include <linux/delay.h>
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
27

26845c286   Paul E. McKenney   rcu: print boot-t...
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  /*
   * Check the RCU kernel configuration parameters and print informative
   * messages about anything out of the ordinary.  If you like #ifdef, you
   * will love this function.
   */
  static void __init rcu_bootup_announce_oddness(void)
  {
  #ifdef CONFIG_RCU_TRACE
  	printk(KERN_INFO "\tRCU debugfs-based tracing is enabled.
  ");
  #endif
  #if (defined(CONFIG_64BIT) && CONFIG_RCU_FANOUT != 64) || (!defined(CONFIG_64BIT) && CONFIG_RCU_FANOUT != 32)
  	printk(KERN_INFO "\tCONFIG_RCU_FANOUT set to non-default value of %d
  ",
  	       CONFIG_RCU_FANOUT);
  #endif
  #ifdef CONFIG_RCU_FANOUT_EXACT
  	printk(KERN_INFO "\tHierarchical RCU autobalancing is disabled.
  ");
  #endif
  #ifdef CONFIG_RCU_FAST_NO_HZ
  	printk(KERN_INFO
  	       "\tRCU dyntick-idle grace-period acceleration is enabled.
  ");
  #endif
  #ifdef CONFIG_PROVE_RCU
  	printk(KERN_INFO "\tRCU lockdep checking is enabled.
  ");
  #endif
  #ifdef CONFIG_RCU_TORTURE_TEST_RUNNABLE
  	printk(KERN_INFO "\tRCU torture testing starts during boot.
  ");
  #endif
  #ifndef CONFIG_RCU_CPU_STALL_DETECTOR
  	printk(KERN_INFO
  	       "\tRCU-based detection of stalled CPUs is disabled.
  ");
  #endif
  #ifndef CONFIG_RCU_CPU_STALL_VERBOSE
  	printk(KERN_INFO "\tVerbose stalled-CPUs detection is disabled.
  ");
  #endif
  #if NUM_RCU_LVL_4 != 0
  	printk(KERN_INFO "\tExperimental four-level hierarchy is enabled.
  ");
  #endif
  }
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
75
76
77
78
  #ifdef CONFIG_TREE_PREEMPT_RCU
  
  struct rcu_state rcu_preempt_state = RCU_STATE_INITIALIZER(rcu_preempt_state);
  DEFINE_PER_CPU(struct rcu_data, rcu_preempt_data);
d9a3da069   Paul E. McKenney   rcu: Add expedite...
79
  static int rcu_preempted_readers_exp(struct rcu_node *rnp);
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
80
81
82
  /*
   * Tell them what RCU they are running.
   */
0e0fc1c23   Paul E. McKenney   rcu: Mark init-ti...
83
  static void __init rcu_bootup_announce(void)
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
84
  {
26845c286   Paul E. McKenney   rcu: print boot-t...
85
86
87
  	printk(KERN_INFO "Preemptable hierarchical RCU implementation.
  ");
  	rcu_bootup_announce_oddness();
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  }
  
  /*
   * Return the number of RCU-preempt batches processed thus far
   * for debug and statistics.
   */
  long rcu_batches_completed_preempt(void)
  {
  	return rcu_preempt_state.completed;
  }
  EXPORT_SYMBOL_GPL(rcu_batches_completed_preempt);
  
  /*
   * Return the number of RCU batches processed thus far for debug & stats.
   */
  long rcu_batches_completed(void)
  {
  	return rcu_batches_completed_preempt();
  }
  EXPORT_SYMBOL_GPL(rcu_batches_completed);
  
  /*
bf66f18e7   Paul E. McKenney   rcu: Add force_qu...
110
111
112
113
114
115
116
117
118
   * Force a quiescent state for preemptible RCU.
   */
  void rcu_force_quiescent_state(void)
  {
  	force_quiescent_state(&rcu_preempt_state, 0);
  }
  EXPORT_SYMBOL_GPL(rcu_force_quiescent_state);
  
  /*
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
119
120
121
122
   * Record a preemptable-RCU quiescent state for the specified CPU.  Note
   * that this just means that the task currently running on the CPU is
   * not in a quiescent state.  There might be any number of tasks blocked
   * while in an RCU read-side critical section.
25502a6c1   Paul E. McKenney   rcu: refactor RCU...
123
124
125
126
   *
   * Unlike the other rcu_*_qs() functions, callers to this function
   * must disable irqs in order to protect the assignment to
   * ->rcu_read_unlock_special.
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
127
   */
c3422bea5   Paul E. McKenney   rcu: Simplify rcu...
128
  static void rcu_preempt_qs(int cpu)
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
129
130
  {
  	struct rcu_data *rdp = &per_cpu(rcu_preempt_data, cpu);
25502a6c1   Paul E. McKenney   rcu: refactor RCU...
131

c64ac3ce0   Paul E. McKenney   rcu: Simplify ass...
132
  	rdp->passed_quiesc_completed = rdp->gpnum - 1;
c3422bea5   Paul E. McKenney   rcu: Simplify rcu...
133
134
  	barrier();
  	rdp->passed_quiesc = 1;
25502a6c1   Paul E. McKenney   rcu: refactor RCU...
135
  	current->rcu_read_unlock_special &= ~RCU_READ_UNLOCK_NEED_QS;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
136
137
138
  }
  
  /*
c3422bea5   Paul E. McKenney   rcu: Simplify rcu...
139
140
141
142
143
144
145
146
147
148
149
   * We have entered the scheduler, and the current task might soon be
   * context-switched away from.  If this task is in an RCU read-side
   * critical section, we will no longer be able to rely on the CPU to
   * record that fact, so we enqueue the task on the appropriate entry
   * of the blocked_tasks[] array.  The task will dequeue itself when
   * it exits the outermost enclosing RCU read-side critical section.
   * Therefore, the current grace period cannot be permitted to complete
   * until the blocked_tasks[] entry indexed by the low-order bit of
   * rnp->gpnum empties.
   *
   * Caller must disable preemption.
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
150
   */
c3422bea5   Paul E. McKenney   rcu: Simplify rcu...
151
  static void rcu_preempt_note_context_switch(int cpu)
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
152
153
  {
  	struct task_struct *t = current;
c3422bea5   Paul E. McKenney   rcu: Simplify rcu...
154
  	unsigned long flags;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
155
156
157
158
159
160
161
162
163
164
  	int phase;
  	struct rcu_data *rdp;
  	struct rcu_node *rnp;
  
  	if (t->rcu_read_lock_nesting &&
  	    (t->rcu_read_unlock_special & RCU_READ_UNLOCK_BLOCKED) == 0) {
  
  		/* Possibly blocking in an RCU read-side critical section. */
  		rdp = rcu_preempt_state.rda[cpu];
  		rnp = rdp->mynode;
1304afb22   Paul E. McKenney   rcu: Convert to r...
165
  		raw_spin_lock_irqsave(&rnp->lock, flags);
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
166
  		t->rcu_read_unlock_special |= RCU_READ_UNLOCK_BLOCKED;
868489660   Paul E. McKenney   rcu: Changes from...
167
  		t->rcu_blocked_node = rnp;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
168
169
170
171
172
173
174
175
176
177
  
  		/*
  		 * If this CPU has already checked in, then this task
  		 * will hold up the next grace period rather than the
  		 * current grace period.  Queue the task accordingly.
  		 * If the task is queued for the current grace period
  		 * (i.e., this CPU has not yet passed through a quiescent
  		 * state for the current grace period), then as long
  		 * as that task remains queued, the current grace period
  		 * cannot end.
b0e165c03   Paul E. McKenney   rcu: Add debug ch...
178
179
180
  		 *
  		 * But first, note that the current CPU must still be
  		 * on line!
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
181
  		 */
b0e165c03   Paul E. McKenney   rcu: Add debug ch...
182
  		WARN_ON_ONCE((rdp->grpmask & rnp->qsmaskinit) == 0);
e7d8842ed   Paul E. McKenney   rcu: Apply result...
183
184
  		WARN_ON_ONCE(!list_empty(&t->rcu_node_entry));
  		phase = (rnp->gpnum + !(rnp->qsmask & rdp->grpmask)) & 0x1;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
185
  		list_add(&t->rcu_node_entry, &rnp->blocked_tasks[phase]);
1304afb22   Paul E. McKenney   rcu: Convert to r...
186
  		raw_spin_unlock_irqrestore(&rnp->lock, flags);
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
187
188
189
190
191
192
193
194
195
196
197
  	}
  
  	/*
  	 * Either we were not in an RCU read-side critical section to
  	 * begin with, or we have now recorded that critical section
  	 * globally.  Either way, we can now note a quiescent state
  	 * for this CPU.  Again, if we were in an RCU read-side critical
  	 * section, and if that critical section was blocking the current
  	 * grace period, then the fact that the task has been enqueued
  	 * means that we continue to block the current grace period.
  	 */
e7d8842ed   Paul E. McKenney   rcu: Apply result...
198
  	local_irq_save(flags);
25502a6c1   Paul E. McKenney   rcu: refactor RCU...
199
  	rcu_preempt_qs(cpu);
e7d8842ed   Paul E. McKenney   rcu: Apply result...
200
  	local_irq_restore(flags);
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
201
202
203
204
205
206
207
208
209
210
211
212
213
  }
  
  /*
   * Tree-preemptable RCU implementation for rcu_read_lock().
   * Just increment ->rcu_read_lock_nesting, shared state will be updated
   * if we block.
   */
  void __rcu_read_lock(void)
  {
  	ACCESS_ONCE(current->rcu_read_lock_nesting)++;
  	barrier();  /* needed if we ever invoke rcu_read_lock in rcutree.c */
  }
  EXPORT_SYMBOL_GPL(__rcu_read_lock);
fc2219d49   Paul E. McKenney   rcu: Clean up cod...
214
215
216
217
218
219
220
  /*
   * Check for preempted RCU readers blocking the current grace period
   * for the specified rcu_node structure.  If the caller needs a reliable
   * answer, it must hold the rcu_node's ->lock.
   */
  static int rcu_preempted_readers(struct rcu_node *rnp)
  {
d9a3da069   Paul E. McKenney   rcu: Add expedite...
221
222
223
224
  	int phase = rnp->gpnum & 0x1;
  
  	return !list_empty(&rnp->blocked_tasks[phase]) ||
  	       !list_empty(&rnp->blocked_tasks[phase + 2]);
fc2219d49   Paul E. McKenney   rcu: Clean up cod...
225
  }
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
226
227
228
229
230
231
232
  /*
   * Record a quiescent state for all tasks that were previously queued
   * on the specified rcu_node structure and that were blocking the current
   * RCU grace period.  The caller must hold the specified rnp->lock with
   * irqs disabled, and this lock is released upon return, but irqs remain
   * disabled.
   */
d3f6bad39   Paul E. McKenney   rcu: Rename "quie...
233
  static void rcu_report_unblock_qs_rnp(struct rcu_node *rnp, unsigned long flags)
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
234
235
236
237
238
239
  	__releases(rnp->lock)
  {
  	unsigned long mask;
  	struct rcu_node *rnp_p;
  
  	if (rnp->qsmask != 0 || rcu_preempted_readers(rnp)) {
1304afb22   Paul E. McKenney   rcu: Convert to r...
240
  		raw_spin_unlock_irqrestore(&rnp->lock, flags);
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
241
242
243
244
245
246
247
248
249
250
  		return;  /* Still need more quiescent states! */
  	}
  
  	rnp_p = rnp->parent;
  	if (rnp_p == NULL) {
  		/*
  		 * Either there is only one rcu_node in the tree,
  		 * or tasks were kicked up to root rcu_node due to
  		 * CPUs going offline.
  		 */
d3f6bad39   Paul E. McKenney   rcu: Rename "quie...
251
  		rcu_report_qs_rsp(&rcu_preempt_state, flags);
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
252
253
254
255
256
  		return;
  	}
  
  	/* Report up the rest of the hierarchy. */
  	mask = rnp->grpmask;
1304afb22   Paul E. McKenney   rcu: Convert to r...
257
258
  	raw_spin_unlock(&rnp->lock);	/* irqs remain disabled. */
  	raw_spin_lock(&rnp_p->lock);	/* irqs already disabled. */
d3f6bad39   Paul E. McKenney   rcu: Rename "quie...
259
  	rcu_report_qs_rnp(mask, &rcu_preempt_state, rnp_p, flags);
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
260
261
262
263
264
265
266
  }
  
  /*
   * Handle special cases during rcu_read_unlock(), such as needing to
   * notify RCU core processing or task having blocked during the RCU
   * read-side critical section.
   */
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
267
268
269
  static void rcu_read_unlock_special(struct task_struct *t)
  {
  	int empty;
d9a3da069   Paul E. McKenney   rcu: Add expedite...
270
  	int empty_exp;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
271
  	unsigned long flags;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
  	struct rcu_node *rnp;
  	int special;
  
  	/* NMI handlers cannot block and cannot safely manipulate state. */
  	if (in_nmi())
  		return;
  
  	local_irq_save(flags);
  
  	/*
  	 * If RCU core is waiting for this CPU to exit critical section,
  	 * let it know that we have done so.
  	 */
  	special = t->rcu_read_unlock_special;
  	if (special & RCU_READ_UNLOCK_NEED_QS) {
c3422bea5   Paul E. McKenney   rcu: Simplify rcu...
287
  		rcu_preempt_qs(smp_processor_id());
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
288
289
290
291
292
293
294
295
296
297
298
  	}
  
  	/* Hardware IRQ handlers cannot block. */
  	if (in_irq()) {
  		local_irq_restore(flags);
  		return;
  	}
  
  	/* Clean up if blocked during RCU read-side critical section. */
  	if (special & RCU_READ_UNLOCK_BLOCKED) {
  		t->rcu_read_unlock_special &= ~RCU_READ_UNLOCK_BLOCKED;
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
299
300
301
302
303
304
  		/*
  		 * Remove this task from the list it blocked on.  The
  		 * task can migrate while we acquire the lock, but at
  		 * most one time.  So at most two passes through loop.
  		 */
  		for (;;) {
868489660   Paul E. McKenney   rcu: Changes from...
305
  			rnp = t->rcu_blocked_node;
1304afb22   Paul E. McKenney   rcu: Convert to r...
306
  			raw_spin_lock(&rnp->lock);  /* irqs already disabled. */
868489660   Paul E. McKenney   rcu: Changes from...
307
  			if (rnp == t->rcu_blocked_node)
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
308
  				break;
1304afb22   Paul E. McKenney   rcu: Convert to r...
309
  			raw_spin_unlock(&rnp->lock); /* irqs remain disabled. */
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
310
  		}
fc2219d49   Paul E. McKenney   rcu: Clean up cod...
311
  		empty = !rcu_preempted_readers(rnp);
d9a3da069   Paul E. McKenney   rcu: Add expedite...
312
313
  		empty_exp = !rcu_preempted_readers_exp(rnp);
  		smp_mb(); /* ensure expedited fastpath sees end of RCU c-s. */
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
314
  		list_del_init(&t->rcu_node_entry);
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
315
  		t->rcu_blocked_node = NULL;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
316
317
318
319
  
  		/*
  		 * If this was the last task on the current list, and if
  		 * we aren't waiting on any CPUs, report the quiescent state.
d3f6bad39   Paul E. McKenney   rcu: Rename "quie...
320
  		 * Note that rcu_report_unblock_qs_rnp() releases rnp->lock.
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
321
  		 */
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
322
  		if (empty)
1304afb22   Paul E. McKenney   rcu: Convert to r...
323
  			raw_spin_unlock_irqrestore(&rnp->lock, flags);
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
324
  		else
d3f6bad39   Paul E. McKenney   rcu: Rename "quie...
325
  			rcu_report_unblock_qs_rnp(rnp, flags);
d9a3da069   Paul E. McKenney   rcu: Add expedite...
326
327
328
329
330
331
332
  
  		/*
  		 * If this was the last task on the expedited lists,
  		 * then we need to report up the rcu_node hierarchy.
  		 */
  		if (!empty_exp && !rcu_preempted_readers_exp(rnp))
  			rcu_report_exp_rnp(&rcu_preempt_state, rnp);
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
333
334
  	} else {
  		local_irq_restore(flags);
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
335
  	}
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
  }
  
  /*
   * Tree-preemptable RCU implementation for rcu_read_unlock().
   * Decrement ->rcu_read_lock_nesting.  If the result is zero (outermost
   * rcu_read_unlock()) and ->rcu_read_unlock_special is non-zero, then
   * invoke rcu_read_unlock_special() to clean up after a context switch
   * in an RCU read-side critical section and other special cases.
   */
  void __rcu_read_unlock(void)
  {
  	struct task_struct *t = current;
  
  	barrier();  /* needed if we ever invoke rcu_read_unlock in rcutree.c */
  	if (--ACCESS_ONCE(t->rcu_read_lock_nesting) == 0 &&
  	    unlikely(ACCESS_ONCE(t->rcu_read_unlock_special)))
  		rcu_read_unlock_special(t);
cba8244a0   Paul E. McKenney   rcu: Add debug ch...
353
354
355
  #ifdef CONFIG_PROVE_LOCKING
  	WARN_ON_ONCE(ACCESS_ONCE(t->rcu_read_lock_nesting) < 0);
  #endif /* #ifdef CONFIG_PROVE_LOCKING */
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
356
357
358
359
  }
  EXPORT_SYMBOL_GPL(__rcu_read_unlock);
  
  #ifdef CONFIG_RCU_CPU_STALL_DETECTOR
1ed509a22   Paul E. McKenney   rcu: Add RCU_CPU_...
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
  #ifdef CONFIG_RCU_CPU_STALL_VERBOSE
  
  /*
   * Dump detailed information for all tasks blocking the current RCU
   * grace period on the specified rcu_node structure.
   */
  static void rcu_print_detail_task_stall_rnp(struct rcu_node *rnp)
  {
  	unsigned long flags;
  	struct list_head *lp;
  	int phase;
  	struct task_struct *t;
  
  	if (rcu_preempted_readers(rnp)) {
  		raw_spin_lock_irqsave(&rnp->lock, flags);
  		phase = rnp->gpnum & 0x1;
  		lp = &rnp->blocked_tasks[phase];
  		list_for_each_entry(t, lp, rcu_node_entry)
  			sched_show_task(t);
  		raw_spin_unlock_irqrestore(&rnp->lock, flags);
  	}
  }
  
  /*
   * Dump detailed information for all tasks blocking the current RCU
   * grace period.
   */
  static void rcu_print_detail_task_stall(struct rcu_state *rsp)
  {
  	struct rcu_node *rnp = rcu_get_root(rsp);
  
  	rcu_print_detail_task_stall_rnp(rnp);
  	rcu_for_each_leaf_node(rsp, rnp)
  		rcu_print_detail_task_stall_rnp(rnp);
  }
  
  #else /* #ifdef CONFIG_RCU_CPU_STALL_VERBOSE */
  
  static void rcu_print_detail_task_stall(struct rcu_state *rsp)
  {
  }
  
  #endif /* #else #ifdef CONFIG_RCU_CPU_STALL_VERBOSE */
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
403
404
405
406
407
408
  /*
   * Scan the current list of tasks blocked within RCU read-side critical
   * sections, printing out the tid of each.
   */
  static void rcu_print_task_stall(struct rcu_node *rnp)
  {
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
409
  	struct list_head *lp;
fc2219d49   Paul E. McKenney   rcu: Clean up cod...
410
  	int phase;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
411
  	struct task_struct *t;
fc2219d49   Paul E. McKenney   rcu: Clean up cod...
412
  	if (rcu_preempted_readers(rnp)) {
fc2219d49   Paul E. McKenney   rcu: Clean up cod...
413
  		phase = rnp->gpnum & 0x1;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
414
415
416
  		lp = &rnp->blocked_tasks[phase];
  		list_for_each_entry(t, lp, rcu_node_entry)
  			printk(" P%d", t->pid);
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
417
418
419
420
421
422
  	}
  }
  
  #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
  
  /*
b0e165c03   Paul E. McKenney   rcu: Add debug ch...
423
424
425
426
427
428
429
430
   * Check that the list of blocked tasks for the newly completed grace
   * period is in fact empty.  It is a serious bug to complete a grace
   * period that still has RCU readers blocked!  This function must be
   * invoked -before- updating this rnp's ->gpnum, and the rnp's ->lock
   * must be held by the caller.
   */
  static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp)
  {
fc2219d49   Paul E. McKenney   rcu: Clean up cod...
431
  	WARN_ON_ONCE(rcu_preempted_readers(rnp));
28ecd5802   Paul E. McKenney   rcu: Add WARN_ON_...
432
  	WARN_ON_ONCE(rnp->qsmask);
b0e165c03   Paul E. McKenney   rcu: Add debug ch...
433
  }
33f76148c   Paul E. McKenney   rcu: Add CPU-offl...
434
435
436
  #ifdef CONFIG_HOTPLUG_CPU
  
  /*
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
437
438
439
440
441
   * Handle tasklist migration for case in which all CPUs covered by the
   * specified rcu_node have gone offline.  Move them up to the root
   * rcu_node.  The reason for not just moving them to the immediate
   * parent is to remove the need for rcu_read_unlock_special() to
   * make more than two attempts to acquire the target rcu_node's lock.
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
442
443
   * Returns true if there were tasks blocking the current RCU grace
   * period.
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
444
   *
237c80c5c   Paul E. McKenney   rcu: Fix TREE_PRE...
445
446
447
   * Returns 1 if there was previously a task blocking the current grace
   * period on the specified rcu_node structure.
   *
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
448
449
   * The caller must hold rnp->lock with irqs disabled.
   */
237c80c5c   Paul E. McKenney   rcu: Fix TREE_PRE...
450
451
452
  static int rcu_preempt_offline_tasks(struct rcu_state *rsp,
  				     struct rcu_node *rnp,
  				     struct rcu_data *rdp)
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
453
454
455
456
  {
  	int i;
  	struct list_head *lp;
  	struct list_head *lp_root;
d9a3da069   Paul E. McKenney   rcu: Add expedite...
457
  	int retval = 0;
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
458
459
  	struct rcu_node *rnp_root = rcu_get_root(rsp);
  	struct task_struct *tp;
868489660   Paul E. McKenney   rcu: Changes from...
460
461
  	if (rnp == rnp_root) {
  		WARN_ONCE(1, "Last CPU thought to be offlined?");
237c80c5c   Paul E. McKenney   rcu: Fix TREE_PRE...
462
  		return 0;  /* Shouldn't happen: at least one CPU online. */
868489660   Paul E. McKenney   rcu: Changes from...
463
  	}
28ecd5802   Paul E. McKenney   rcu: Add WARN_ON_...
464
465
  	WARN_ON_ONCE(rnp != rdp->mynode &&
  		     (!list_empty(&rnp->blocked_tasks[0]) ||
d9a3da069   Paul E. McKenney   rcu: Add expedite...
466
467
468
  		      !list_empty(&rnp->blocked_tasks[1]) ||
  		      !list_empty(&rnp->blocked_tasks[2]) ||
  		      !list_empty(&rnp->blocked_tasks[3])));
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
469
470
471
472
473
474
475
  
  	/*
  	 * Move tasks up to root rcu_node.  Rely on the fact that the
  	 * root rcu_node can be at most one ahead of the rest of the
  	 * rcu_nodes in terms of gp_num value.  This fact allows us to
  	 * move the blocked_tasks[] array directly, element by element.
  	 */
d9a3da069   Paul E. McKenney   rcu: Add expedite...
476
477
478
479
480
  	if (rcu_preempted_readers(rnp))
  		retval |= RCU_OFL_TASKS_NORM_GP;
  	if (rcu_preempted_readers_exp(rnp))
  		retval |= RCU_OFL_TASKS_EXP_GP;
  	for (i = 0; i < 4; i++) {
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
481
482
483
484
  		lp = &rnp->blocked_tasks[i];
  		lp_root = &rnp_root->blocked_tasks[i];
  		while (!list_empty(lp)) {
  			tp = list_entry(lp->next, typeof(*tp), rcu_node_entry);
1304afb22   Paul E. McKenney   rcu: Convert to r...
485
  			raw_spin_lock(&rnp_root->lock); /* irqs already disabled */
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
486
487
488
  			list_del(&tp->rcu_node_entry);
  			tp->rcu_blocked_node = rnp_root;
  			list_add(&tp->rcu_node_entry, lp_root);
1304afb22   Paul E. McKenney   rcu: Convert to r...
489
  			raw_spin_unlock(&rnp_root->lock); /* irqs remain disabled */
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
490
491
  		}
  	}
237c80c5c   Paul E. McKenney   rcu: Fix TREE_PRE...
492
  	return retval;
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
493
494
495
  }
  
  /*
33f76148c   Paul E. McKenney   rcu: Add CPU-offl...
496
497
498
499
500
501
502
503
   * Do CPU-offline processing for preemptable RCU.
   */
  static void rcu_preempt_offline_cpu(int cpu)
  {
  	__rcu_offline_cpu(cpu, &rcu_preempt_state);
  }
  
  #endif /* #ifdef CONFIG_HOTPLUG_CPU */
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
504
505
506
507
508
509
510
511
512
513
514
515
  /*
   * Check for a quiescent state from the current CPU.  When a task blocks,
   * the task is recorded in the corresponding CPU's rcu_node structure,
   * which is checked elsewhere.
   *
   * Caller must disable hard irqs.
   */
  static void rcu_preempt_check_callbacks(int cpu)
  {
  	struct task_struct *t = current;
  
  	if (t->rcu_read_lock_nesting == 0) {
c3422bea5   Paul E. McKenney   rcu: Simplify rcu...
516
  		rcu_preempt_qs(cpu);
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
517
518
  		return;
  	}
a71fca58b   Paul E. McKenney   rcu: Fix whitespa...
519
  	if (per_cpu(rcu_preempt_data, cpu).qs_pending)
c3422bea5   Paul E. McKenney   rcu: Simplify rcu...
520
  		t->rcu_read_unlock_special |= RCU_READ_UNLOCK_NEED_QS;
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
  }
  
  /*
   * Process callbacks for preemptable RCU.
   */
  static void rcu_preempt_process_callbacks(void)
  {
  	__rcu_process_callbacks(&rcu_preempt_state,
  				&__get_cpu_var(rcu_preempt_data));
  }
  
  /*
   * Queue a preemptable-RCU callback for invocation after a grace period.
   */
  void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
  {
  	__call_rcu(head, func, &rcu_preempt_state);
  }
  EXPORT_SYMBOL_GPL(call_rcu);
6ebb237be   Paul E. McKenney   rcu: Re-arrange c...
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
  /**
   * synchronize_rcu - wait until a grace period has elapsed.
   *
   * Control will return to the caller some time after a full grace
   * period has elapsed, in other words after all currently executing RCU
   * read-side critical sections have completed.  RCU read-side critical
   * sections are delimited by rcu_read_lock() and rcu_read_unlock(),
   * and may be nested.
   */
  void synchronize_rcu(void)
  {
  	struct rcu_synchronize rcu;
  
  	if (!rcu_scheduler_active)
  		return;
72d5a9f7a   Paul E. McKenney   rcu: remove all r...
555
  	init_rcu_head_on_stack(&rcu.head);
6ebb237be   Paul E. McKenney   rcu: Re-arrange c...
556
557
558
559
560
  	init_completion(&rcu.completion);
  	/* Will wake me after RCU finished. */
  	call_rcu(&rcu.head, wakeme_after_rcu);
  	/* Wait for it. */
  	wait_for_completion(&rcu.completion);
72d5a9f7a   Paul E. McKenney   rcu: remove all r...
561
  	destroy_rcu_head_on_stack(&rcu.head);
6ebb237be   Paul E. McKenney   rcu: Re-arrange c...
562
563
  }
  EXPORT_SYMBOL_GPL(synchronize_rcu);
d9a3da069   Paul E. McKenney   rcu: Add expedite...
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
  static DECLARE_WAIT_QUEUE_HEAD(sync_rcu_preempt_exp_wq);
  static long sync_rcu_preempt_exp_count;
  static DEFINE_MUTEX(sync_rcu_preempt_exp_mutex);
  
  /*
   * Return non-zero if there are any tasks in RCU read-side critical
   * sections blocking the current preemptible-RCU expedited grace period.
   * If there is no preemptible-RCU expedited grace period currently in
   * progress, returns zero unconditionally.
   */
  static int rcu_preempted_readers_exp(struct rcu_node *rnp)
  {
  	return !list_empty(&rnp->blocked_tasks[2]) ||
  	       !list_empty(&rnp->blocked_tasks[3]);
  }
  
  /*
   * return non-zero if there is no RCU expedited grace period in progress
   * for the specified rcu_node structure, in other words, if all CPUs and
   * tasks covered by the specified rcu_node structure have done their bit
   * for the current expedited grace period.  Works only for preemptible
   * RCU -- other RCU implementation use other means.
   *
   * Caller must hold sync_rcu_preempt_exp_mutex.
   */
  static int sync_rcu_preempt_exp_done(struct rcu_node *rnp)
  {
  	return !rcu_preempted_readers_exp(rnp) &&
  	       ACCESS_ONCE(rnp->expmask) == 0;
  }
  
  /*
   * Report the exit from RCU read-side critical section for the last task
   * that queued itself during or before the current expedited preemptible-RCU
   * grace period.  This event is reported either to the rcu_node structure on
   * which the task was queued or to one of that rcu_node structure's ancestors,
   * recursively up the tree.  (Calm down, calm down, we do the recursion
   * iteratively!)
   *
   * Caller must hold sync_rcu_preempt_exp_mutex.
   */
  static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp)
  {
  	unsigned long flags;
  	unsigned long mask;
1304afb22   Paul E. McKenney   rcu: Convert to r...
609
  	raw_spin_lock_irqsave(&rnp->lock, flags);
d9a3da069   Paul E. McKenney   rcu: Add expedite...
610
611
612
613
614
615
616
617
  	for (;;) {
  		if (!sync_rcu_preempt_exp_done(rnp))
  			break;
  		if (rnp->parent == NULL) {
  			wake_up(&sync_rcu_preempt_exp_wq);
  			break;
  		}
  		mask = rnp->grpmask;
1304afb22   Paul E. McKenney   rcu: Convert to r...
618
  		raw_spin_unlock(&rnp->lock); /* irqs remain disabled */
d9a3da069   Paul E. McKenney   rcu: Add expedite...
619
  		rnp = rnp->parent;
1304afb22   Paul E. McKenney   rcu: Convert to r...
620
  		raw_spin_lock(&rnp->lock); /* irqs already disabled */
d9a3da069   Paul E. McKenney   rcu: Add expedite...
621
622
  		rnp->expmask &= ~mask;
  	}
1304afb22   Paul E. McKenney   rcu: Convert to r...
623
  	raw_spin_unlock_irqrestore(&rnp->lock, flags);
d9a3da069   Paul E. McKenney   rcu: Add expedite...
624
625
626
627
628
629
630
631
632
633
634
635
636
  }
  
  /*
   * Snapshot the tasks blocking the newly started preemptible-RCU expedited
   * grace period for the specified rcu_node structure.  If there are no such
   * tasks, report it up the rcu_node hierarchy.
   *
   * Caller must hold sync_rcu_preempt_exp_mutex and rsp->onofflock.
   */
  static void
  sync_rcu_preempt_exp_init(struct rcu_state *rsp, struct rcu_node *rnp)
  {
  	int must_wait;
1304afb22   Paul E. McKenney   rcu: Convert to r...
637
  	raw_spin_lock(&rnp->lock); /* irqs already disabled */
d9a3da069   Paul E. McKenney   rcu: Add expedite...
638
639
640
  	list_splice_init(&rnp->blocked_tasks[0], &rnp->blocked_tasks[2]);
  	list_splice_init(&rnp->blocked_tasks[1], &rnp->blocked_tasks[3]);
  	must_wait = rcu_preempted_readers_exp(rnp);
1304afb22   Paul E. McKenney   rcu: Convert to r...
641
  	raw_spin_unlock(&rnp->lock); /* irqs remain disabled */
d9a3da069   Paul E. McKenney   rcu: Add expedite...
642
643
644
  	if (!must_wait)
  		rcu_report_exp_rnp(rsp, rnp);
  }
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
645
  /*
d9a3da069   Paul E. McKenney   rcu: Add expedite...
646
647
648
649
650
   * Wait for an rcu-preempt grace period, but expedite it.  The basic idea
   * is to invoke synchronize_sched_expedited() to push all the tasks to
   * the ->blocked_tasks[] lists, move all entries from the first set of
   * ->blocked_tasks[] lists to the second set, and finally wait for this
   * second set to drain.
019129d59   Paul E. McKenney   rcu: Stopgap fix ...
651
652
653
   */
  void synchronize_rcu_expedited(void)
  {
d9a3da069   Paul E. McKenney   rcu: Add expedite...
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
  	unsigned long flags;
  	struct rcu_node *rnp;
  	struct rcu_state *rsp = &rcu_preempt_state;
  	long snap;
  	int trycount = 0;
  
  	smp_mb(); /* Caller's modifications seen first by other CPUs. */
  	snap = ACCESS_ONCE(sync_rcu_preempt_exp_count) + 1;
  	smp_mb(); /* Above access cannot bleed into critical section. */
  
  	/*
  	 * Acquire lock, falling back to synchronize_rcu() if too many
  	 * lock-acquisition failures.  Of course, if someone does the
  	 * expedited grace period for us, just leave.
  	 */
  	while (!mutex_trylock(&sync_rcu_preempt_exp_mutex)) {
  		if (trycount++ < 10)
  			udelay(trycount * num_online_cpus());
  		else {
  			synchronize_rcu();
  			return;
  		}
  		if ((ACCESS_ONCE(sync_rcu_preempt_exp_count) - snap) > 0)
  			goto mb_ret; /* Others did our work for us. */
  	}
  	if ((ACCESS_ONCE(sync_rcu_preempt_exp_count) - snap) > 0)
  		goto unlock_mb_ret; /* Others did our work for us. */
  
  	/* force all RCU readers onto blocked_tasks[]. */
  	synchronize_sched_expedited();
1304afb22   Paul E. McKenney   rcu: Convert to r...
684
  	raw_spin_lock_irqsave(&rsp->onofflock, flags);
d9a3da069   Paul E. McKenney   rcu: Add expedite...
685
686
687
  
  	/* Initialize ->expmask for all non-leaf rcu_node structures. */
  	rcu_for_each_nonleaf_node_breadth_first(rsp, rnp) {
1304afb22   Paul E. McKenney   rcu: Convert to r...
688
  		raw_spin_lock(&rnp->lock); /* irqs already disabled. */
d9a3da069   Paul E. McKenney   rcu: Add expedite...
689
  		rnp->expmask = rnp->qsmaskinit;
1304afb22   Paul E. McKenney   rcu: Convert to r...
690
  		raw_spin_unlock(&rnp->lock); /* irqs remain disabled. */
d9a3da069   Paul E. McKenney   rcu: Add expedite...
691
692
693
694
695
696
697
  	}
  
  	/* Snapshot current state of ->blocked_tasks[] lists. */
  	rcu_for_each_leaf_node(rsp, rnp)
  		sync_rcu_preempt_exp_init(rsp, rnp);
  	if (NUM_RCU_NODES > 1)
  		sync_rcu_preempt_exp_init(rsp, rcu_get_root(rsp));
1304afb22   Paul E. McKenney   rcu: Convert to r...
698
  	raw_spin_unlock_irqrestore(&rsp->onofflock, flags);
d9a3da069   Paul E. McKenney   rcu: Add expedite...
699
700
701
702
703
704
705
706
707
708
709
710
711
  
  	/* Wait for snapshotted ->blocked_tasks[] lists to drain. */
  	rnp = rcu_get_root(rsp);
  	wait_event(sync_rcu_preempt_exp_wq,
  		   sync_rcu_preempt_exp_done(rnp));
  
  	/* Clean up and exit. */
  	smp_mb(); /* ensure expedited GP seen before counter increment. */
  	ACCESS_ONCE(sync_rcu_preempt_exp_count)++;
  unlock_mb_ret:
  	mutex_unlock(&sync_rcu_preempt_exp_mutex);
  mb_ret:
  	smp_mb(); /* ensure subsequent action seen after grace period. */
019129d59   Paul E. McKenney   rcu: Stopgap fix ...
712
713
714
715
  }
  EXPORT_SYMBOL_GPL(synchronize_rcu_expedited);
  
  /*
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
   * Check to see if there is any immediate preemptable-RCU-related work
   * to be done.
   */
  static int rcu_preempt_pending(int cpu)
  {
  	return __rcu_pending(&rcu_preempt_state,
  			     &per_cpu(rcu_preempt_data, cpu));
  }
  
  /*
   * Does preemptable RCU need the CPU to stay out of dynticks mode?
   */
  static int rcu_preempt_needs_cpu(int cpu)
  {
  	return !!per_cpu(rcu_preempt_data, cpu).nxtlist;
  }
e74f4c456   Paul E. McKenney   rcu: Make hot-unp...
732
733
734
735
736
737
738
739
  /**
   * rcu_barrier - Wait until all in-flight call_rcu() callbacks complete.
   */
  void rcu_barrier(void)
  {
  	_rcu_barrier(&rcu_preempt_state, call_rcu);
  }
  EXPORT_SYMBOL_GPL(rcu_barrier);
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
740
741
742
743
744
745
746
747
748
  /*
   * Initialize preemptable RCU's per-CPU data.
   */
  static void __cpuinit rcu_preempt_init_percpu_data(int cpu)
  {
  	rcu_init_percpu_data(cpu, &rcu_preempt_state, 1);
  }
  
  /*
e74f4c456   Paul E. McKenney   rcu: Make hot-unp...
749
750
751
752
753
754
755
756
   * Move preemptable RCU's callbacks to ->orphan_cbs_list.
   */
  static void rcu_preempt_send_cbs_to_orphanage(void)
  {
  	rcu_send_cbs_to_orphanage(&rcu_preempt_state);
  }
  
  /*
1eba8f843   Paul E. McKenney   rcu: Clean up cod...
757
758
759
760
   * Initialize preemptable RCU's state structures.
   */
  static void __init __rcu_init_preempt(void)
  {
1eba8f843   Paul E. McKenney   rcu: Clean up cod...
761
762
763
764
  	RCU_INIT_FLAVOR(&rcu_preempt_state, rcu_preempt_data);
  }
  
  /*
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
   * Check for a task exiting while in a preemptable-RCU read-side
   * critical section, clean up if so.  No need to issue warnings,
   * as debug_check_no_locks_held() already does this if lockdep
   * is enabled.
   */
  void exit_rcu(void)
  {
  	struct task_struct *t = current;
  
  	if (t->rcu_read_lock_nesting == 0)
  		return;
  	t->rcu_read_lock_nesting = 1;
  	rcu_read_unlock();
  }
  
  #else /* #ifdef CONFIG_TREE_PREEMPT_RCU */
  
  /*
   * Tell them what RCU they are running.
   */
0e0fc1c23   Paul E. McKenney   rcu: Mark init-ti...
785
  static void __init rcu_bootup_announce(void)
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
786
787
788
  {
  	printk(KERN_INFO "Hierarchical RCU implementation.
  ");
26845c286   Paul E. McKenney   rcu: print boot-t...
789
  	rcu_bootup_announce_oddness();
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
790
791
792
793
794
795
796
797
798
799
800
801
  }
  
  /*
   * Return the number of RCU batches processed thus far for debug & stats.
   */
  long rcu_batches_completed(void)
  {
  	return rcu_batches_completed_sched();
  }
  EXPORT_SYMBOL_GPL(rcu_batches_completed);
  
  /*
bf66f18e7   Paul E. McKenney   rcu: Add force_qu...
802
803
804
805
806
807
808
809
810
811
   * Force a quiescent state for RCU, which, because there is no preemptible
   * RCU, becomes the same as rcu-sched.
   */
  void rcu_force_quiescent_state(void)
  {
  	rcu_sched_force_quiescent_state();
  }
  EXPORT_SYMBOL_GPL(rcu_force_quiescent_state);
  
  /*
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
812
813
814
   * Because preemptable RCU does not exist, we never have to check for
   * CPUs being in quiescent states.
   */
c3422bea5   Paul E. McKenney   rcu: Simplify rcu...
815
  static void rcu_preempt_note_context_switch(int cpu)
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
816
817
  {
  }
fc2219d49   Paul E. McKenney   rcu: Clean up cod...
818
819
820
821
822
823
824
825
  /*
   * Because preemptable RCU does not exist, there are never any preempted
   * RCU readers.
   */
  static int rcu_preempted_readers(struct rcu_node *rnp)
  {
  	return 0;
  }
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
826
827
828
  #ifdef CONFIG_HOTPLUG_CPU
  
  /* Because preemptible RCU does not exist, no quieting of tasks. */
d3f6bad39   Paul E. McKenney   rcu: Rename "quie...
829
  static void rcu_report_unblock_qs_rnp(struct rcu_node *rnp, unsigned long flags)
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
830
  {
1304afb22   Paul E. McKenney   rcu: Convert to r...
831
  	raw_spin_unlock_irqrestore(&rnp->lock, flags);
b668c9cf3   Paul E. McKenney   rcu: Fix grace-pe...
832
833
834
  }
  
  #endif /* #ifdef CONFIG_HOTPLUG_CPU */
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
835
836
837
838
839
840
  #ifdef CONFIG_RCU_CPU_STALL_DETECTOR
  
  /*
   * Because preemptable RCU does not exist, we never have to check for
   * tasks blocked within RCU read-side critical sections.
   */
1ed509a22   Paul E. McKenney   rcu: Add RCU_CPU_...
841
842
843
844
845
846
847
848
  static void rcu_print_detail_task_stall(struct rcu_state *rsp)
  {
  }
  
  /*
   * Because preemptable RCU does not exist, we never have to check for
   * tasks blocked within RCU read-side critical sections.
   */
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
849
850
851
852
853
854
855
  static void rcu_print_task_stall(struct rcu_node *rnp)
  {
  }
  
  #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */
  
  /*
b0e165c03   Paul E. McKenney   rcu: Add debug ch...
856
   * Because there is no preemptable RCU, there can be no readers blocked,
49e291266   Paul E. McKenney   rcu: Fix thinko, ...
857
858
   * so there is no need to check for blocked tasks.  So check only for
   * bogus qsmask values.
b0e165c03   Paul E. McKenney   rcu: Add debug ch...
859
860
861
   */
  static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp)
  {
49e291266   Paul E. McKenney   rcu: Fix thinko, ...
862
  	WARN_ON_ONCE(rnp->qsmask);
b0e165c03   Paul E. McKenney   rcu: Add debug ch...
863
  }
33f76148c   Paul E. McKenney   rcu: Add CPU-offl...
864
865
866
  #ifdef CONFIG_HOTPLUG_CPU
  
  /*
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
867
   * Because preemptable RCU does not exist, it never needs to migrate
237c80c5c   Paul E. McKenney   rcu: Fix TREE_PRE...
868
869
870
   * tasks that were blocked within RCU read-side critical sections, and
   * such non-existent tasks cannot possibly have been blocking the current
   * grace period.
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
871
   */
237c80c5c   Paul E. McKenney   rcu: Fix TREE_PRE...
872
873
874
  static int rcu_preempt_offline_tasks(struct rcu_state *rsp,
  				     struct rcu_node *rnp,
  				     struct rcu_data *rdp)
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
875
  {
237c80c5c   Paul E. McKenney   rcu: Fix TREE_PRE...
876
  	return 0;
dd5d19baf   Paul E. McKenney   rcu: Create rcutr...
877
878
879
  }
  
  /*
33f76148c   Paul E. McKenney   rcu: Add CPU-offl...
880
881
882
883
884
885
886
887
   * Because preemptable RCU does not exist, it never needs CPU-offline
   * processing.
   */
  static void rcu_preempt_offline_cpu(int cpu)
  {
  }
  
  #endif /* #ifdef CONFIG_HOTPLUG_CPU */
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
888
889
890
891
  /*
   * Because preemptable RCU does not exist, it never has any callbacks
   * to check.
   */
1eba8f843   Paul E. McKenney   rcu: Clean up cod...
892
  static void rcu_preempt_check_callbacks(int cpu)
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
893
894
895
896
897
898
899
  {
  }
  
  /*
   * Because preemptable RCU does not exist, it never has any callbacks
   * to process.
   */
1eba8f843   Paul E. McKenney   rcu: Clean up cod...
900
  static void rcu_preempt_process_callbacks(void)
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
901
902
903
904
905
906
907
908
909
910
911
912
913
  {
  }
  
  /*
   * In classic RCU, call_rcu() is just call_rcu_sched().
   */
  void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
  {
  	call_rcu_sched(head, func);
  }
  EXPORT_SYMBOL_GPL(call_rcu);
  
  /*
019129d59   Paul E. McKenney   rcu: Stopgap fix ...
914
915
916
917
918
919
920
921
   * Wait for an rcu-preempt grace period, but make it happen quickly.
   * But because preemptable RCU does not exist, map to rcu-sched.
   */
  void synchronize_rcu_expedited(void)
  {
  	synchronize_sched_expedited();
  }
  EXPORT_SYMBOL_GPL(synchronize_rcu_expedited);
d9a3da069   Paul E. McKenney   rcu: Add expedite...
922
923
924
925
926
927
928
929
930
931
932
933
934
  #ifdef CONFIG_HOTPLUG_CPU
  
  /*
   * Because preemptable RCU does not exist, there is never any need to
   * report on tasks preempted in RCU read-side critical sections during
   * expedited RCU grace periods.
   */
  static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp)
  {
  	return;
  }
  
  #endif /* #ifdef CONFIG_HOTPLUG_CPU */
019129d59   Paul E. McKenney   rcu: Stopgap fix ...
935
  /*
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
   * Because preemptable RCU does not exist, it never has any work to do.
   */
  static int rcu_preempt_pending(int cpu)
  {
  	return 0;
  }
  
  /*
   * Because preemptable RCU does not exist, it never needs any CPU.
   */
  static int rcu_preempt_needs_cpu(int cpu)
  {
  	return 0;
  }
  
  /*
e74f4c456   Paul E. McKenney   rcu: Make hot-unp...
952
953
954
955
956
957
958
959
960
961
   * Because preemptable RCU does not exist, rcu_barrier() is just
   * another name for rcu_barrier_sched().
   */
  void rcu_barrier(void)
  {
  	rcu_barrier_sched();
  }
  EXPORT_SYMBOL_GPL(rcu_barrier);
  
  /*
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
962
963
964
965
966
967
   * Because preemptable RCU does not exist, there is no per-CPU
   * data to initialize.
   */
  static void __cpuinit rcu_preempt_init_percpu_data(int cpu)
  {
  }
1eba8f843   Paul E. McKenney   rcu: Clean up cod...
968
  /*
e74f4c456   Paul E. McKenney   rcu: Make hot-unp...
969
970
971
972
973
974
975
   * Because there is no preemptable RCU, there are no callbacks to move.
   */
  static void rcu_preempt_send_cbs_to_orphanage(void)
  {
  }
  
  /*
1eba8f843   Paul E. McKenney   rcu: Clean up cod...
976
977
978
979
980
   * Because preemptable RCU does not exist, it need not be initialized.
   */
  static void __init __rcu_init_preempt(void)
  {
  }
f41d911f8   Paul E. McKenney   rcu: Merge preemp...
981
  #endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
  
  #if !defined(CONFIG_RCU_FAST_NO_HZ)
  
  /*
   * Check to see if any future RCU-related work will need to be done
   * by the current CPU, even if none need be done immediately, returning
   * 1 if so.  This function is part of the RCU implementation; it is -not-
   * an exported member of the RCU API.
   *
   * Because we have preemptible RCU, just check whether this CPU needs
   * any flavor of RCU.  Do not chew up lots of CPU cycles with preemption
   * disabled in a most-likely vain attempt to cause RCU not to need this CPU.
   */
  int rcu_needs_cpu(int cpu)
  {
  	return rcu_needs_cpu_quick_check(cpu);
  }
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
999
1000
1001
1002
1003
1004
1005
1006
  /*
   * Check to see if we need to continue a callback-flush operations to
   * allow the last CPU to enter dyntick-idle mode.  But fast dyntick-idle
   * entry is not configured, so we never do need to.
   */
  static void rcu_needs_cpu_flush(void)
  {
  }
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1007
1008
1009
  #else /* #if !defined(CONFIG_RCU_FAST_NO_HZ) */
  
  #define RCU_NEEDS_CPU_FLUSHES 5
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1010
  static DEFINE_PER_CPU(int, rcu_dyntick_drain);
71da81324   Paul E. McKenney   rcu: Fix accelera...
1011
  static DEFINE_PER_CPU(unsigned long, rcu_dyntick_holdoff);
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
  
  /*
   * Check to see if any future RCU-related work will need to be done
   * by the current CPU, even if none need be done immediately, returning
   * 1 if so.  This function is part of the RCU implementation; it is -not-
   * an exported member of the RCU API.
   *
   * Because we are not supporting preemptible RCU, attempt to accelerate
   * any current grace periods so that RCU no longer needs this CPU, but
   * only if all other CPUs are already in dynticks-idle mode.  This will
   * allow the CPU cores to be powered down immediately, as opposed to after
   * waiting many milliseconds for grace periods to elapse.
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1024
1025
1026
1027
1028
   *
   * Because it is not legal to invoke rcu_process_callbacks() with irqs
   * disabled, we do one pass of force_quiescent_state(), then do a
   * raise_softirq() to cause rcu_process_callbacks() to be invoked later.
   * The per-cpu rcu_dyntick_drain variable controls the sequencing.
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1029
1030
1031
   */
  int rcu_needs_cpu(int cpu)
  {
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1032
  	int c = 0;
77e38ed34   Paul E. McKenney   rcu: RCU_FAST_NO_...
1033
1034
  	int snap;
  	int snap_nmi;
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1035
  	int thatcpu;
622ea685f   Paul E. McKenney   rcu: Fix holdoff ...
1036
1037
1038
  	/* Check for being in the holdoff period. */
  	if (per_cpu(rcu_dyntick_holdoff, cpu) == jiffies)
  		return rcu_needs_cpu_quick_check(cpu);
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1039
  	/* Don't bother unless we are the last non-dyntick-idle CPU. */
77e38ed34   Paul E. McKenney   rcu: RCU_FAST_NO_...
1040
1041
1042
  	for_each_online_cpu(thatcpu) {
  		if (thatcpu == cpu)
  			continue;
d822ed109   Paul E. McKenney   rcu: fix build bu...
1043
1044
  		snap = per_cpu(rcu_dynticks, thatcpu).dynticks;
  		snap_nmi = per_cpu(rcu_dynticks, thatcpu).dynticks_nmi;
77e38ed34   Paul E. McKenney   rcu: RCU_FAST_NO_...
1045
1046
  		smp_mb(); /* Order sampling of snap with end of grace period. */
  		if (((snap & 0x1) != 0) || ((snap_nmi & 0x1) != 0)) {
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1047
  			per_cpu(rcu_dyntick_drain, cpu) = 0;
71da81324   Paul E. McKenney   rcu: Fix accelera...
1048
  			per_cpu(rcu_dyntick_holdoff, cpu) = jiffies - 1;
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1049
  			return rcu_needs_cpu_quick_check(cpu);
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1050
  		}
77e38ed34   Paul E. McKenney   rcu: RCU_FAST_NO_...
1051
  	}
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1052
1053
1054
1055
1056
1057
1058
  
  	/* Check and update the rcu_dyntick_drain sequencing. */
  	if (per_cpu(rcu_dyntick_drain, cpu) <= 0) {
  		/* First time through, initialize the counter. */
  		per_cpu(rcu_dyntick_drain, cpu) = RCU_NEEDS_CPU_FLUSHES;
  	} else if (--per_cpu(rcu_dyntick_drain, cpu) <= 0) {
  		/* We have hit the limit, so time to give up. */
71da81324   Paul E. McKenney   rcu: Fix accelera...
1059
  		per_cpu(rcu_dyntick_holdoff, cpu) = jiffies;
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
  		return rcu_needs_cpu_quick_check(cpu);
  	}
  
  	/* Do one step pushing remaining RCU callbacks through. */
  	if (per_cpu(rcu_sched_data, cpu).nxtlist) {
  		rcu_sched_qs(cpu);
  		force_quiescent_state(&rcu_sched_state, 0);
  		c = c || per_cpu(rcu_sched_data, cpu).nxtlist;
  	}
  	if (per_cpu(rcu_bh_data, cpu).nxtlist) {
  		rcu_bh_qs(cpu);
  		force_quiescent_state(&rcu_bh_state, 0);
  		c = c || per_cpu(rcu_bh_data, cpu).nxtlist;
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1073
1074
1075
  	}
  
  	/* If RCU callbacks are still pending, RCU still needs this CPU. */
622ea685f   Paul E. McKenney   rcu: Fix holdoff ...
1076
  	if (c)
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1077
  		raise_softirq(RCU_SOFTIRQ);
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1078
1079
  	return c;
  }
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1080
1081
1082
1083
1084
1085
1086
  /*
   * Check to see if we need to continue a callback-flush operations to
   * allow the last CPU to enter dyntick-idle mode.
   */
  static void rcu_needs_cpu_flush(void)
  {
  	int cpu = smp_processor_id();
71da81324   Paul E. McKenney   rcu: Fix accelera...
1087
  	unsigned long flags;
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1088
1089
1090
  
  	if (per_cpu(rcu_dyntick_drain, cpu) <= 0)
  		return;
71da81324   Paul E. McKenney   rcu: Fix accelera...
1091
  	local_irq_save(flags);
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1092
  	(void)rcu_needs_cpu(cpu);
71da81324   Paul E. McKenney   rcu: Fix accelera...
1093
  	local_irq_restore(flags);
a47cd880b   Paul E. McKenney   rcu: Fix accelera...
1094
  }
8bd93a2c5   Paul E. McKenney   rcu: Accelerate g...
1095
  #endif /* #else #if !defined(CONFIG_RCU_FAST_NO_HZ) */