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
26
27#include <linux/delay.h>
28
29#define RCU_KTHREAD_PRIO 1
30
31#ifdef CONFIG_RCU_BOOST
32#define RCU_BOOST_PRIO CONFIG_RCU_BOOST_PRIO
33#else
34#define RCU_BOOST_PRIO RCU_KTHREAD_PRIO
35#endif
36
37
38
39
40
41
42static void __init rcu_bootup_announce_oddness(void)
43{
44#ifdef CONFIG_RCU_TRACE
45 printk(KERN_INFO "\tRCU debugfs-based tracing is enabled.\n");
46#endif
47#if (defined(CONFIG_64BIT) && CONFIG_RCU_FANOUT != 64) || (!defined(CONFIG_64BIT) && CONFIG_RCU_FANOUT != 32)
48 printk(KERN_INFO "\tCONFIG_RCU_FANOUT set to non-default value of %d\n",
49 CONFIG_RCU_FANOUT);
50#endif
51#ifdef CONFIG_RCU_FANOUT_EXACT
52 printk(KERN_INFO "\tHierarchical RCU autobalancing is disabled.\n");
53#endif
54#ifdef CONFIG_RCU_FAST_NO_HZ
55 printk(KERN_INFO
56 "\tRCU dyntick-idle grace-period acceleration is enabled.\n");
57#endif
58#ifdef CONFIG_PROVE_RCU
59 printk(KERN_INFO "\tRCU lockdep checking is enabled.\n");
60#endif
61#ifdef CONFIG_RCU_TORTURE_TEST_RUNNABLE
62 printk(KERN_INFO "\tRCU torture testing starts during boot.\n");
63#endif
64#if defined(CONFIG_TREE_PREEMPT_RCU) && !defined(CONFIG_RCU_CPU_STALL_VERBOSE)
65 printk(KERN_INFO "\tDump stacks of tasks blocking RCU-preempt GP.\n");
66#endif
67#if defined(CONFIG_RCU_CPU_STALL_INFO)
68 printk(KERN_INFO "\tAdditional per-CPU info printed with stalls.\n");
69#endif
70#if NUM_RCU_LVL_4 != 0
71 printk(KERN_INFO "\tFour-level hierarchy is enabled.\n");
72#endif
73 if (rcu_fanout_leaf != CONFIG_RCU_FANOUT_LEAF)
74 printk(KERN_INFO "\tExperimental boot-time adjustment of leaf fanout to %d.\n", rcu_fanout_leaf);
75 if (nr_cpu_ids != NR_CPUS)
76 printk(KERN_INFO "\tRCU restricting CPUs from NR_CPUS=%d to nr_cpu_ids=%d.\n", NR_CPUS, nr_cpu_ids);
77}
78
79#ifdef CONFIG_TREE_PREEMPT_RCU
80
81struct rcu_state rcu_preempt_state =
82 RCU_STATE_INITIALIZER(rcu_preempt, call_rcu);
83DEFINE_PER_CPU(struct rcu_data, rcu_preempt_data);
84static struct rcu_state *rcu_state = &rcu_preempt_state;
85
86static int rcu_preempted_readers_exp(struct rcu_node *rnp);
87
88
89
90
91static void __init rcu_bootup_announce(void)
92{
93 printk(KERN_INFO "Preemptible hierarchical RCU implementation.\n");
94 rcu_bootup_announce_oddness();
95}
96
97
98
99
100
101long rcu_batches_completed_preempt(void)
102{
103 return rcu_preempt_state.completed;
104}
105EXPORT_SYMBOL_GPL(rcu_batches_completed_preempt);
106
107
108
109
110long rcu_batches_completed(void)
111{
112 return rcu_batches_completed_preempt();
113}
114EXPORT_SYMBOL_GPL(rcu_batches_completed);
115
116
117
118
119void rcu_force_quiescent_state(void)
120{
121 force_quiescent_state(&rcu_preempt_state, 0);
122}
123EXPORT_SYMBOL_GPL(rcu_force_quiescent_state);
124
125
126
127
128
129
130
131
132
133
134
135static void rcu_preempt_qs(int cpu)
136{
137 struct rcu_data *rdp = &per_cpu(rcu_preempt_data, cpu);
138
139 rdp->passed_quiesce_gpnum = rdp->gpnum;
140 barrier();
141 if (rdp->passed_quiesce == 0)
142 trace_rcu_grace_period("rcu_preempt", rdp->gpnum, "cpuqs");
143 rdp->passed_quiesce = 1;
144 current->rcu_read_unlock_special &= ~RCU_READ_UNLOCK_NEED_QS;
145}
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160static void rcu_preempt_note_context_switch(int cpu)
161{
162 struct task_struct *t = current;
163 unsigned long flags;
164 struct rcu_data *rdp;
165 struct rcu_node *rnp;
166
167 if (t->rcu_read_lock_nesting > 0 &&
168 (t->rcu_read_unlock_special & RCU_READ_UNLOCK_BLOCKED) == 0) {
169
170
171 rdp = per_cpu_ptr(rcu_preempt_state.rda, cpu);
172 rnp = rdp->mynode;
173 raw_spin_lock_irqsave(&rnp->lock, flags);
174 t->rcu_read_unlock_special |= RCU_READ_UNLOCK_BLOCKED;
175 t->rcu_blocked_node = rnp;
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195 WARN_ON_ONCE((rdp->grpmask & rnp->qsmaskinit) == 0);
196 WARN_ON_ONCE(!list_empty(&t->rcu_node_entry));
197 if ((rnp->qsmask & rdp->grpmask) && rnp->gp_tasks != NULL) {
198 list_add(&t->rcu_node_entry, rnp->gp_tasks->prev);
199 rnp->gp_tasks = &t->rcu_node_entry;
200#ifdef CONFIG_RCU_BOOST
201 if (rnp->boost_tasks != NULL)
202 rnp->boost_tasks = rnp->gp_tasks;
203#endif
204 } else {
205 list_add(&t->rcu_node_entry, &rnp->blkd_tasks);
206 if (rnp->qsmask & rdp->grpmask)
207 rnp->gp_tasks = &t->rcu_node_entry;
208 }
209 trace_rcu_preempt_task(rdp->rsp->name,
210 t->pid,
211 (rnp->qsmask & rdp->grpmask)
212 ? rnp->gpnum
213 : rnp->gpnum + 1);
214 raw_spin_unlock_irqrestore(&rnp->lock, flags);
215 } else if (t->rcu_read_lock_nesting < 0 &&
216 t->rcu_read_unlock_special) {
217
218
219
220
221
222 rcu_read_unlock_special(t);
223 }
224
225
226
227
228
229
230
231
232
233
234 local_irq_save(flags);
235 rcu_preempt_qs(cpu);
236 local_irq_restore(flags);
237}
238
239
240
241
242
243
244static int rcu_preempt_blocked_readers_cgp(struct rcu_node *rnp)
245{
246 return rnp->gp_tasks != NULL;
247}
248
249
250
251
252
253
254
255
256static void rcu_report_unblock_qs_rnp(struct rcu_node *rnp, unsigned long flags)
257 __releases(rnp->lock)
258{
259 unsigned long mask;
260 struct rcu_node *rnp_p;
261
262 if (rnp->qsmask != 0 || rcu_preempt_blocked_readers_cgp(rnp)) {
263 raw_spin_unlock_irqrestore(&rnp->lock, flags);
264 return;
265 }
266
267 rnp_p = rnp->parent;
268 if (rnp_p == NULL) {
269
270
271
272
273
274 rcu_report_qs_rsp(&rcu_preempt_state, flags);
275 return;
276 }
277
278
279 mask = rnp->grpmask;
280 raw_spin_unlock(&rnp->lock);
281 raw_spin_lock(&rnp_p->lock);
282 rcu_report_qs_rnp(mask, &rcu_preempt_state, rnp_p, flags);
283}
284
285
286
287
288
289static struct list_head *rcu_next_node_entry(struct task_struct *t,
290 struct rcu_node *rnp)
291{
292 struct list_head *np;
293
294 np = t->rcu_node_entry.next;
295 if (np == &rnp->blkd_tasks)
296 np = NULL;
297 return np;
298}
299
300
301
302
303
304
305void rcu_read_unlock_special(struct task_struct *t)
306{
307 int empty;
308 int empty_exp;
309 int empty_exp_now;
310 unsigned long flags;
311 struct list_head *np;
312#ifdef CONFIG_RCU_BOOST
313 struct rt_mutex *rbmp = NULL;
314#endif
315 struct rcu_node *rnp;
316 int special;
317
318
319 if (in_nmi())
320 return;
321
322 local_irq_save(flags);
323
324
325
326
327
328 special = t->rcu_read_unlock_special;
329 if (special & RCU_READ_UNLOCK_NEED_QS) {
330 rcu_preempt_qs(smp_processor_id());
331 }
332
333
334 if (in_irq() || in_serving_softirq()) {
335 local_irq_restore(flags);
336 return;
337 }
338
339
340 if (special & RCU_READ_UNLOCK_BLOCKED) {
341 t->rcu_read_unlock_special &= ~RCU_READ_UNLOCK_BLOCKED;
342
343
344
345
346
347
348 for (;;) {
349 rnp = t->rcu_blocked_node;
350 raw_spin_lock(&rnp->lock);
351 if (rnp == t->rcu_blocked_node)
352 break;
353 raw_spin_unlock(&rnp->lock);
354 }
355 empty = !rcu_preempt_blocked_readers_cgp(rnp);
356 empty_exp = !rcu_preempted_readers_exp(rnp);
357 smp_mb();
358 np = rcu_next_node_entry(t, rnp);
359 list_del_init(&t->rcu_node_entry);
360 t->rcu_blocked_node = NULL;
361 trace_rcu_unlock_preempted_task("rcu_preempt",
362 rnp->gpnum, t->pid);
363 if (&t->rcu_node_entry == rnp->gp_tasks)
364 rnp->gp_tasks = np;
365 if (&t->rcu_node_entry == rnp->exp_tasks)
366 rnp->exp_tasks = np;
367#ifdef CONFIG_RCU_BOOST
368 if (&t->rcu_node_entry == rnp->boost_tasks)
369 rnp->boost_tasks = np;
370
371 if (t->rcu_boost_mutex) {
372 rbmp = t->rcu_boost_mutex;
373 t->rcu_boost_mutex = NULL;
374 }
375#endif
376
377
378
379
380
381
382
383 empty_exp_now = !rcu_preempted_readers_exp(rnp);
384 if (!empty && !rcu_preempt_blocked_readers_cgp(rnp)) {
385 trace_rcu_quiescent_state_report("preempt_rcu",
386 rnp->gpnum,
387 0, rnp->qsmask,
388 rnp->level,
389 rnp->grplo,
390 rnp->grphi,
391 !!rnp->gp_tasks);
392 rcu_report_unblock_qs_rnp(rnp, flags);
393 } else {
394 raw_spin_unlock_irqrestore(&rnp->lock, flags);
395 }
396
397#ifdef CONFIG_RCU_BOOST
398
399 if (rbmp)
400 rt_mutex_unlock(rbmp);
401#endif
402
403
404
405
406
407 if (!empty_exp && empty_exp_now)
408 rcu_report_exp_rnp(&rcu_preempt_state, rnp, true);
409 } else {
410 local_irq_restore(flags);
411 }
412}
413
414#ifdef CONFIG_RCU_CPU_STALL_VERBOSE
415
416
417
418
419
420static void rcu_print_detail_task_stall_rnp(struct rcu_node *rnp)
421{
422 unsigned long flags;
423 struct task_struct *t;
424
425 if (!rcu_preempt_blocked_readers_cgp(rnp))
426 return;
427 raw_spin_lock_irqsave(&rnp->lock, flags);
428 t = list_entry(rnp->gp_tasks,
429 struct task_struct, rcu_node_entry);
430 list_for_each_entry_continue(t, &rnp->blkd_tasks, rcu_node_entry)
431 sched_show_task(t);
432 raw_spin_unlock_irqrestore(&rnp->lock, flags);
433}
434
435
436
437
438
439static void rcu_print_detail_task_stall(struct rcu_state *rsp)
440{
441 struct rcu_node *rnp = rcu_get_root(rsp);
442
443 rcu_print_detail_task_stall_rnp(rnp);
444 rcu_for_each_leaf_node(rsp, rnp)
445 rcu_print_detail_task_stall_rnp(rnp);
446}
447
448#else
449
450static void rcu_print_detail_task_stall(struct rcu_state *rsp)
451{
452}
453
454#endif
455
456#ifdef CONFIG_RCU_CPU_STALL_INFO
457
458static void rcu_print_task_stall_begin(struct rcu_node *rnp)
459{
460 printk(KERN_ERR "\tTasks blocked on level-%d rcu_node (CPUs %d-%d):",
461 rnp->level, rnp->grplo, rnp->grphi);
462}
463
464static void rcu_print_task_stall_end(void)
465{
466 printk(KERN_CONT "\n");
467}
468
469#else
470
471static void rcu_print_task_stall_begin(struct rcu_node *rnp)
472{
473}
474
475static void rcu_print_task_stall_end(void)
476{
477}
478
479#endif
480
481
482
483
484
485static int rcu_print_task_stall(struct rcu_node *rnp)
486{
487 struct task_struct *t;
488 int ndetected = 0;
489
490 if (!rcu_preempt_blocked_readers_cgp(rnp))
491 return 0;
492 rcu_print_task_stall_begin(rnp);
493 t = list_entry(rnp->gp_tasks,
494 struct task_struct, rcu_node_entry);
495 list_for_each_entry_continue(t, &rnp->blkd_tasks, rcu_node_entry) {
496 printk(KERN_CONT " P%d", t->pid);
497 ndetected++;
498 }
499 rcu_print_task_stall_end();
500 return ndetected;
501}
502
503
504
505
506
507
508
509
510
511
512
513static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp)
514{
515 WARN_ON_ONCE(rcu_preempt_blocked_readers_cgp(rnp));
516 if (!list_empty(&rnp->blkd_tasks))
517 rnp->gp_tasks = rnp->blkd_tasks.next;
518 WARN_ON_ONCE(rnp->qsmask);
519}
520
521#ifdef CONFIG_HOTPLUG_CPU
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537static int rcu_preempt_offline_tasks(struct rcu_state *rsp,
538 struct rcu_node *rnp,
539 struct rcu_data *rdp)
540{
541 struct list_head *lp;
542 struct list_head *lp_root;
543 int retval = 0;
544 struct rcu_node *rnp_root = rcu_get_root(rsp);
545 struct task_struct *t;
546
547 if (rnp == rnp_root) {
548 WARN_ONCE(1, "Last CPU thought to be offlined?");
549 return 0;
550 }
551
552
553 WARN_ON_ONCE(rnp != rdp->mynode);
554
555
556
557
558
559
560
561
562
563
564 if (rcu_preempt_blocked_readers_cgp(rnp) && rnp->qsmask == 0)
565 retval |= RCU_OFL_TASKS_NORM_GP;
566 if (rcu_preempted_readers_exp(rnp))
567 retval |= RCU_OFL_TASKS_EXP_GP;
568 lp = &rnp->blkd_tasks;
569 lp_root = &rnp_root->blkd_tasks;
570 while (!list_empty(lp)) {
571 t = list_entry(lp->next, typeof(*t), rcu_node_entry);
572 raw_spin_lock(&rnp_root->lock);
573 list_del(&t->rcu_node_entry);
574 t->rcu_blocked_node = rnp_root;
575 list_add(&t->rcu_node_entry, lp_root);
576 if (&t->rcu_node_entry == rnp->gp_tasks)
577 rnp_root->gp_tasks = rnp->gp_tasks;
578 if (&t->rcu_node_entry == rnp->exp_tasks)
579 rnp_root->exp_tasks = rnp->exp_tasks;
580#ifdef CONFIG_RCU_BOOST
581 if (&t->rcu_node_entry == rnp->boost_tasks)
582 rnp_root->boost_tasks = rnp->boost_tasks;
583#endif
584 raw_spin_unlock(&rnp_root->lock);
585 }
586
587#ifdef CONFIG_RCU_BOOST
588
589 raw_spin_lock(&rnp_root->lock);
590 if (rnp_root->boost_tasks != NULL &&
591 rnp_root->boost_tasks != rnp_root->gp_tasks)
592 rnp_root->boost_tasks = rnp_root->gp_tasks;
593 raw_spin_unlock(&rnp_root->lock);
594#endif
595
596 rnp->gp_tasks = NULL;
597 rnp->exp_tasks = NULL;
598 return retval;
599}
600
601#endif
602
603
604
605
606
607
608
609
610static void rcu_preempt_check_callbacks(int cpu)
611{
612 struct task_struct *t = current;
613
614 if (t->rcu_read_lock_nesting == 0) {
615 rcu_preempt_qs(cpu);
616 return;
617 }
618 if (t->rcu_read_lock_nesting > 0 &&
619 per_cpu(rcu_preempt_data, cpu).qs_pending)
620 t->rcu_read_unlock_special |= RCU_READ_UNLOCK_NEED_QS;
621}
622
623#ifdef CONFIG_RCU_BOOST
624
625static void rcu_preempt_do_callbacks(void)
626{
627 rcu_do_batch(&rcu_preempt_state, &__get_cpu_var(rcu_preempt_data));
628}
629
630#endif
631
632
633
634
635void call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu))
636{
637 __call_rcu(head, func, &rcu_preempt_state, 0);
638}
639EXPORT_SYMBOL_GPL(call_rcu);
640
641
642
643
644
645
646
647
648void kfree_call_rcu(struct rcu_head *head,
649 void (*func)(struct rcu_head *rcu))
650{
651 __call_rcu(head, func, &rcu_preempt_state, 1);
652}
653EXPORT_SYMBOL_GPL(kfree_call_rcu);
654
655
656
657
658
659
660
661
662
663
664
665
666void synchronize_rcu(void)
667{
668 rcu_lockdep_assert(!lock_is_held(&rcu_bh_lock_map) &&
669 !lock_is_held(&rcu_lock_map) &&
670 !lock_is_held(&rcu_sched_lock_map),
671 "Illegal synchronize_rcu() in RCU read-side critical section");
672 if (!rcu_scheduler_active)
673 return;
674 wait_rcu_gp(call_rcu);
675}
676EXPORT_SYMBOL_GPL(synchronize_rcu);
677
678static DECLARE_WAIT_QUEUE_HEAD(sync_rcu_preempt_exp_wq);
679static long sync_rcu_preempt_exp_count;
680static DEFINE_MUTEX(sync_rcu_preempt_exp_mutex);
681
682
683
684
685
686
687
688static int rcu_preempted_readers_exp(struct rcu_node *rnp)
689{
690 return rnp->exp_tasks != NULL;
691}
692
693
694
695
696
697
698
699
700
701
702static int sync_rcu_preempt_exp_done(struct rcu_node *rnp)
703{
704 return !rcu_preempted_readers_exp(rnp) &&
705 ACCESS_ONCE(rnp->expmask) == 0;
706}
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp,
722 bool wake)
723{
724 unsigned long flags;
725 unsigned long mask;
726
727 raw_spin_lock_irqsave(&rnp->lock, flags);
728 for (;;) {
729 if (!sync_rcu_preempt_exp_done(rnp)) {
730 raw_spin_unlock_irqrestore(&rnp->lock, flags);
731 break;
732 }
733 if (rnp->parent == NULL) {
734 raw_spin_unlock_irqrestore(&rnp->lock, flags);
735 if (wake)
736 wake_up(&sync_rcu_preempt_exp_wq);
737 break;
738 }
739 mask = rnp->grpmask;
740 raw_spin_unlock(&rnp->lock);
741 rnp = rnp->parent;
742 raw_spin_lock(&rnp->lock);
743 rnp->expmask &= ~mask;
744 }
745}
746
747
748
749
750
751
752
753
754static void
755sync_rcu_preempt_exp_init(struct rcu_state *rsp, struct rcu_node *rnp)
756{
757 unsigned long flags;
758 int must_wait = 0;
759
760 raw_spin_lock_irqsave(&rnp->lock, flags);
761 if (list_empty(&rnp->blkd_tasks)) {
762 raw_spin_unlock_irqrestore(&rnp->lock, flags);
763 } else {
764 rnp->exp_tasks = rnp->blkd_tasks.next;
765 rcu_initiate_boost(rnp, flags);
766 must_wait = 1;
767 }
768 if (!must_wait)
769 rcu_report_exp_rnp(rsp, rnp, false);
770}
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789void synchronize_rcu_expedited(void)
790{
791 unsigned long flags;
792 struct rcu_node *rnp;
793 struct rcu_state *rsp = &rcu_preempt_state;
794 long snap;
795 int trycount = 0;
796
797 smp_mb();
798 snap = ACCESS_ONCE(sync_rcu_preempt_exp_count) + 1;
799 smp_mb();
800
801
802
803
804
805
806 while (!mutex_trylock(&sync_rcu_preempt_exp_mutex)) {
807 if (trycount++ < 10) {
808 udelay(trycount * num_online_cpus());
809 } else {
810 synchronize_rcu();
811 return;
812 }
813 if ((ACCESS_ONCE(sync_rcu_preempt_exp_count) - snap) > 0)
814 goto mb_ret;
815 }
816 if ((ACCESS_ONCE(sync_rcu_preempt_exp_count) - snap) > 0)
817 goto unlock_mb_ret;
818
819
820 synchronize_sched_expedited();
821
822 raw_spin_lock_irqsave(&rsp->onofflock, flags);
823
824
825 rcu_for_each_nonleaf_node_breadth_first(rsp, rnp) {
826 raw_spin_lock(&rnp->lock);
827 rnp->expmask = rnp->qsmaskinit;
828 raw_spin_unlock(&rnp->lock);
829 }
830
831
832 rcu_for_each_leaf_node(rsp, rnp)
833 sync_rcu_preempt_exp_init(rsp, rnp);
834 if (NUM_RCU_NODES > 1)
835 sync_rcu_preempt_exp_init(rsp, rcu_get_root(rsp));
836
837 raw_spin_unlock_irqrestore(&rsp->onofflock, flags);
838
839
840 rnp = rcu_get_root(rsp);
841 wait_event(sync_rcu_preempt_exp_wq,
842 sync_rcu_preempt_exp_done(rnp));
843
844
845 smp_mb();
846 ACCESS_ONCE(sync_rcu_preempt_exp_count)++;
847unlock_mb_ret:
848 mutex_unlock(&sync_rcu_preempt_exp_mutex);
849mb_ret:
850 smp_mb();
851}
852EXPORT_SYMBOL_GPL(synchronize_rcu_expedited);
853
854
855
856
857void rcu_barrier(void)
858{
859 _rcu_barrier(&rcu_preempt_state);
860}
861EXPORT_SYMBOL_GPL(rcu_barrier);
862
863
864
865
866static void __init __rcu_init_preempt(void)
867{
868 rcu_init_one(&rcu_preempt_state, &rcu_preempt_data);
869}
870
871#else
872
873static struct rcu_state *rcu_state = &rcu_sched_state;
874
875
876
877
878static void __init rcu_bootup_announce(void)
879{
880 printk(KERN_INFO "Hierarchical RCU implementation.\n");
881 rcu_bootup_announce_oddness();
882}
883
884
885
886
887long rcu_batches_completed(void)
888{
889 return rcu_batches_completed_sched();
890}
891EXPORT_SYMBOL_GPL(rcu_batches_completed);
892
893
894
895
896
897void rcu_force_quiescent_state(void)
898{
899 rcu_sched_force_quiescent_state();
900}
901EXPORT_SYMBOL_GPL(rcu_force_quiescent_state);
902
903
904
905
906
907static void rcu_preempt_note_context_switch(int cpu)
908{
909}
910
911
912
913
914
915static int rcu_preempt_blocked_readers_cgp(struct rcu_node *rnp)
916{
917 return 0;
918}
919
920#ifdef CONFIG_HOTPLUG_CPU
921
922
923static void rcu_report_unblock_qs_rnp(struct rcu_node *rnp, unsigned long flags)
924{
925 raw_spin_unlock_irqrestore(&rnp->lock, flags);
926}
927
928#endif
929
930
931
932
933
934static void rcu_print_detail_task_stall(struct rcu_state *rsp)
935{
936}
937
938
939
940
941
942static int rcu_print_task_stall(struct rcu_node *rnp)
943{
944 return 0;
945}
946
947
948
949
950
951
952static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp)
953{
954 WARN_ON_ONCE(rnp->qsmask);
955}
956
957#ifdef CONFIG_HOTPLUG_CPU
958
959
960
961
962
963
964
965static int rcu_preempt_offline_tasks(struct rcu_state *rsp,
966 struct rcu_node *rnp,
967 struct rcu_data *rdp)
968{
969 return 0;
970}
971
972#endif
973
974
975
976
977
978static void rcu_preempt_check_callbacks(int cpu)
979{
980}
981
982
983
984
985
986
987
988
989
990
991void kfree_call_rcu(struct rcu_head *head,
992 void (*func)(struct rcu_head *rcu))
993{
994 __call_rcu(head, func, &rcu_sched_state, 1);
995}
996EXPORT_SYMBOL_GPL(kfree_call_rcu);
997
998
999
1000
1001
1002void synchronize_rcu_expedited(void)
1003{
1004 synchronize_sched_expedited();
1005}
1006EXPORT_SYMBOL_GPL(synchronize_rcu_expedited);
1007
1008#ifdef CONFIG_HOTPLUG_CPU
1009
1010
1011
1012
1013
1014
1015static void rcu_report_exp_rnp(struct rcu_state *rsp, struct rcu_node *rnp,
1016 bool wake)
1017{
1018}
1019
1020#endif
1021
1022
1023
1024
1025
1026void rcu_barrier(void)
1027{
1028 rcu_barrier_sched();
1029}
1030EXPORT_SYMBOL_GPL(rcu_barrier);
1031
1032
1033
1034
1035static void __init __rcu_init_preempt(void)
1036{
1037}
1038
1039#endif
1040
1041#ifdef CONFIG_RCU_BOOST
1042
1043#include "rtmutex_common.h"
1044
1045#ifdef CONFIG_RCU_TRACE
1046
1047static void rcu_initiate_boost_trace(struct rcu_node *rnp)
1048{
1049 if (list_empty(&rnp->blkd_tasks))
1050 rnp->n_balk_blkd_tasks++;
1051 else if (rnp->exp_tasks == NULL && rnp->gp_tasks == NULL)
1052 rnp->n_balk_exp_gp_tasks++;
1053 else if (rnp->gp_tasks != NULL && rnp->boost_tasks != NULL)
1054 rnp->n_balk_boost_tasks++;
1055 else if (rnp->gp_tasks != NULL && rnp->qsmask != 0)
1056 rnp->n_balk_notblocked++;
1057 else if (rnp->gp_tasks != NULL &&
1058 ULONG_CMP_LT(jiffies, rnp->boost_time))
1059 rnp->n_balk_notyet++;
1060 else
1061 rnp->n_balk_nos++;
1062}
1063
1064#else
1065
1066static void rcu_initiate_boost_trace(struct rcu_node *rnp)
1067{
1068}
1069
1070#endif
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080static int rcu_boost(struct rcu_node *rnp)
1081{
1082 unsigned long flags;
1083 struct rt_mutex mtx;
1084 struct task_struct *t;
1085 struct list_head *tb;
1086
1087 if (rnp->exp_tasks == NULL && rnp->boost_tasks == NULL)
1088 return 0;
1089
1090 raw_spin_lock_irqsave(&rnp->lock, flags);
1091
1092
1093
1094
1095
1096 if (rnp->exp_tasks == NULL && rnp->boost_tasks == NULL) {
1097 raw_spin_unlock_irqrestore(&rnp->lock, flags);
1098 return 0;
1099 }
1100
1101
1102
1103
1104
1105
1106
1107 if (rnp->exp_tasks != NULL) {
1108 tb = rnp->exp_tasks;
1109 rnp->n_exp_boosts++;
1110 } else {
1111 tb = rnp->boost_tasks;
1112 rnp->n_normal_boosts++;
1113 }
1114 rnp->n_tasks_boosted++;
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132 t = container_of(tb, struct task_struct, rcu_node_entry);
1133 rt_mutex_init_proxy_locked(&mtx, t);
1134 t->rcu_boost_mutex = &mtx;
1135 raw_spin_unlock_irqrestore(&rnp->lock, flags);
1136 rt_mutex_lock(&mtx);
1137 rt_mutex_unlock(&mtx);
1138
1139 return ACCESS_ONCE(rnp->exp_tasks) != NULL ||
1140 ACCESS_ONCE(rnp->boost_tasks) != NULL;
1141}
1142
1143
1144
1145
1146
1147
1148
1149static void rcu_boost_kthread_timer(unsigned long arg)
1150{
1151 invoke_rcu_node_kthread((struct rcu_node *)arg);
1152}
1153
1154
1155
1156
1157
1158static int rcu_boost_kthread(void *arg)
1159{
1160 struct rcu_node *rnp = (struct rcu_node *)arg;
1161 int spincnt = 0;
1162 int more2boost;
1163
1164 trace_rcu_utilization("Start boost kthread@init");
1165 for (;;) {
1166 rnp->boost_kthread_status = RCU_KTHREAD_WAITING;
1167 trace_rcu_utilization("End boost kthread@rcu_wait");
1168 rcu_wait(rnp->boost_tasks || rnp->exp_tasks);
1169 trace_rcu_utilization("Start boost kthread@rcu_wait");
1170 rnp->boost_kthread_status = RCU_KTHREAD_RUNNING;
1171 more2boost = rcu_boost(rnp);
1172 if (more2boost)
1173 spincnt++;
1174 else
1175 spincnt = 0;
1176 if (spincnt > 10) {
1177 trace_rcu_utilization("End boost kthread@rcu_yield");
1178 rcu_yield(rcu_boost_kthread_timer, (unsigned long)rnp);
1179 trace_rcu_utilization("Start boost kthread@rcu_yield");
1180 spincnt = 0;
1181 }
1182 }
1183
1184 trace_rcu_utilization("End boost kthread@notreached");
1185 return 0;
1186}
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags)
1199{
1200 struct task_struct *t;
1201
1202 if (!rcu_preempt_blocked_readers_cgp(rnp) && rnp->exp_tasks == NULL) {
1203 rnp->n_balk_exp_gp_tasks++;
1204 raw_spin_unlock_irqrestore(&rnp->lock, flags);
1205 return;
1206 }
1207 if (rnp->exp_tasks != NULL ||
1208 (rnp->gp_tasks != NULL &&
1209 rnp->boost_tasks == NULL &&
1210 rnp->qsmask == 0 &&
1211 ULONG_CMP_GE(jiffies, rnp->boost_time))) {
1212 if (rnp->exp_tasks == NULL)
1213 rnp->boost_tasks = rnp->gp_tasks;
1214 raw_spin_unlock_irqrestore(&rnp->lock, flags);
1215 t = rnp->boost_kthread_task;
1216 if (t != NULL)
1217 wake_up_process(t);
1218 } else {
1219 rcu_initiate_boost_trace(rnp);
1220 raw_spin_unlock_irqrestore(&rnp->lock, flags);
1221 }
1222}
1223
1224
1225
1226
1227static void invoke_rcu_callbacks_kthread(void)
1228{
1229 unsigned long flags;
1230
1231 local_irq_save(flags);
1232 __this_cpu_write(rcu_cpu_has_work, 1);
1233 if (__this_cpu_read(rcu_cpu_kthread_task) != NULL &&
1234 current != __this_cpu_read(rcu_cpu_kthread_task))
1235 wake_up_process(__this_cpu_read(rcu_cpu_kthread_task));
1236 local_irq_restore(flags);
1237}
1238
1239
1240
1241
1242
1243static bool rcu_is_callbacks_kthread(void)
1244{
1245 return __get_cpu_var(rcu_cpu_kthread_task) == current;
1246}
1247
1248
1249
1250
1251
1252
1253static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp,
1254 cpumask_var_t cm)
1255{
1256 struct task_struct *t;
1257
1258 t = rnp->boost_kthread_task;
1259 if (t != NULL)
1260 set_cpus_allowed_ptr(rnp->boost_kthread_task, cm);
1261}
1262
1263#define RCU_BOOST_DELAY_JIFFIES DIV_ROUND_UP(CONFIG_RCU_BOOST_DELAY * HZ, 1000)
1264
1265
1266
1267
1268static void rcu_preempt_boost_start_gp(struct rcu_node *rnp)
1269{
1270 rnp->boost_time = jiffies + RCU_BOOST_DELAY_JIFFIES;
1271}
1272
1273
1274
1275
1276
1277
1278static int __cpuinit rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
1279 struct rcu_node *rnp,
1280 int rnp_index)
1281{
1282 unsigned long flags;
1283 struct sched_param sp;
1284 struct task_struct *t;
1285
1286 if (&rcu_preempt_state != rsp)
1287 return 0;
1288 rsp->boost = 1;
1289 if (rnp->boost_kthread_task != NULL)
1290 return 0;
1291 t = kthread_create(rcu_boost_kthread, (void *)rnp,
1292 "rcub/%d", rnp_index);
1293 if (IS_ERR(t))
1294 return PTR_ERR(t);
1295 raw_spin_lock_irqsave(&rnp->lock, flags);
1296 rnp->boost_kthread_task = t;
1297 raw_spin_unlock_irqrestore(&rnp->lock, flags);
1298 sp.sched_priority = RCU_BOOST_PRIO;
1299 sched_setscheduler_nocheck(t, SCHED_FIFO, &sp);
1300 wake_up_process(t);
1301 return 0;
1302}
1303
1304#ifdef CONFIG_HOTPLUG_CPU
1305
1306
1307
1308
1309static void rcu_stop_cpu_kthread(int cpu)
1310{
1311 struct task_struct *t;
1312
1313
1314 t = per_cpu(rcu_cpu_kthread_task, cpu);
1315 if (t != NULL) {
1316 per_cpu(rcu_cpu_kthread_task, cpu) = NULL;
1317 kthread_stop(t);
1318 }
1319}
1320
1321#endif
1322
1323static void rcu_kthread_do_work(void)
1324{
1325 rcu_do_batch(&rcu_sched_state, &__get_cpu_var(rcu_sched_data));
1326 rcu_do_batch(&rcu_bh_state, &__get_cpu_var(rcu_bh_data));
1327 rcu_preempt_do_callbacks();
1328}
1329
1330
1331
1332
1333
1334
1335static void invoke_rcu_node_kthread(struct rcu_node *rnp)
1336{
1337 struct task_struct *t;
1338
1339 t = rnp->node_kthread_task;
1340 if (t != NULL)
1341 wake_up_process(t);
1342}
1343
1344
1345
1346
1347
1348
1349static void rcu_cpu_kthread_setrt(int cpu, int to_rt)
1350{
1351 int policy;
1352 struct sched_param sp;
1353 struct task_struct *t;
1354
1355 t = per_cpu(rcu_cpu_kthread_task, cpu);
1356 if (t == NULL)
1357 return;
1358 if (to_rt) {
1359 policy = SCHED_FIFO;
1360 sp.sched_priority = RCU_KTHREAD_PRIO;
1361 } else {
1362 policy = SCHED_NORMAL;
1363 sp.sched_priority = 0;
1364 }
1365 sched_setscheduler_nocheck(t, policy, &sp);
1366}
1367
1368
1369
1370
1371
1372
1373
1374static void rcu_cpu_kthread_timer(unsigned long arg)
1375{
1376 struct rcu_data *rdp = per_cpu_ptr(rcu_state->rda, arg);
1377 struct rcu_node *rnp = rdp->mynode;
1378
1379 atomic_or(rdp->grpmask, &rnp->wakemask);
1380 invoke_rcu_node_kthread(rnp);
1381}
1382
1383
1384
1385
1386
1387
1388
1389static void rcu_yield(void (*f)(unsigned long), unsigned long arg)
1390{
1391 struct sched_param sp;
1392 struct timer_list yield_timer;
1393 int prio = current->rt_priority;
1394
1395 setup_timer_on_stack(&yield_timer, f, arg);
1396 mod_timer(&yield_timer, jiffies + 2);
1397 sp.sched_priority = 0;
1398 sched_setscheduler_nocheck(current, SCHED_NORMAL, &sp);
1399 set_user_nice(current, 19);
1400 schedule();
1401 set_user_nice(current, 0);
1402 sp.sched_priority = prio;
1403 sched_setscheduler_nocheck(current, SCHED_FIFO, &sp);
1404 del_timer(&yield_timer);
1405}
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419static int rcu_cpu_kthread_should_stop(int cpu)
1420{
1421 while (cpu_is_offline(cpu) ||
1422 !cpumask_equal(¤t->cpus_allowed, cpumask_of(cpu)) ||
1423 smp_processor_id() != cpu) {
1424 if (kthread_should_stop())
1425 return 1;
1426 per_cpu(rcu_cpu_kthread_status, cpu) = RCU_KTHREAD_OFFCPU;
1427 per_cpu(rcu_cpu_kthread_cpu, cpu) = raw_smp_processor_id();
1428 local_bh_enable();
1429 schedule_timeout_uninterruptible(1);
1430 if (!cpumask_equal(¤t->cpus_allowed, cpumask_of(cpu)))
1431 set_cpus_allowed_ptr(current, cpumask_of(cpu));
1432 local_bh_disable();
1433 }
1434 per_cpu(rcu_cpu_kthread_cpu, cpu) = cpu;
1435 return 0;
1436}
1437
1438
1439
1440
1441
1442
1443static int rcu_cpu_kthread(void *arg)
1444{
1445 int cpu = (int)(long)arg;
1446 unsigned long flags;
1447 int spincnt = 0;
1448 unsigned int *statusp = &per_cpu(rcu_cpu_kthread_status, cpu);
1449 char work;
1450 char *workp = &per_cpu(rcu_cpu_has_work, cpu);
1451
1452 trace_rcu_utilization("Start CPU kthread@init");
1453 for (;;) {
1454 *statusp = RCU_KTHREAD_WAITING;
1455 trace_rcu_utilization("End CPU kthread@rcu_wait");
1456 rcu_wait(*workp != 0 || kthread_should_stop());
1457 trace_rcu_utilization("Start CPU kthread@rcu_wait");
1458 local_bh_disable();
1459 if (rcu_cpu_kthread_should_stop(cpu)) {
1460 local_bh_enable();
1461 break;
1462 }
1463 *statusp = RCU_KTHREAD_RUNNING;
1464 per_cpu(rcu_cpu_kthread_loops, cpu)++;
1465 local_irq_save(flags);
1466 work = *workp;
1467 *workp = 0;
1468 local_irq_restore(flags);
1469 if (work)
1470 rcu_kthread_do_work();
1471 local_bh_enable();
1472 if (*workp != 0)
1473 spincnt++;
1474 else
1475 spincnt = 0;
1476 if (spincnt > 10) {
1477 *statusp = RCU_KTHREAD_YIELDING;
1478 trace_rcu_utilization("End CPU kthread@rcu_yield");
1479 rcu_yield(rcu_cpu_kthread_timer, (unsigned long)cpu);
1480 trace_rcu_utilization("Start CPU kthread@rcu_yield");
1481 spincnt = 0;
1482 }
1483 }
1484 *statusp = RCU_KTHREAD_STOPPED;
1485 trace_rcu_utilization("End CPU kthread@term");
1486 return 0;
1487}
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510static int __cpuinit rcu_spawn_one_cpu_kthread(int cpu)
1511{
1512 struct sched_param sp;
1513 struct task_struct *t;
1514
1515 if (!rcu_scheduler_fully_active ||
1516 per_cpu(rcu_cpu_kthread_task, cpu) != NULL)
1517 return 0;
1518 t = kthread_create_on_node(rcu_cpu_kthread,
1519 (void *)(long)cpu,
1520 cpu_to_node(cpu),
1521 "rcuc/%d", cpu);
1522 if (IS_ERR(t))
1523 return PTR_ERR(t);
1524 if (cpu_online(cpu))
1525 kthread_bind(t, cpu);
1526 per_cpu(rcu_cpu_kthread_cpu, cpu) = cpu;
1527 WARN_ON_ONCE(per_cpu(rcu_cpu_kthread_task, cpu) != NULL);
1528 sp.sched_priority = RCU_KTHREAD_PRIO;
1529 sched_setscheduler_nocheck(t, SCHED_FIFO, &sp);
1530 per_cpu(rcu_cpu_kthread_task, cpu) = t;
1531 wake_up_process(t);
1532 return 0;
1533}
1534
1535
1536
1537
1538
1539
1540
1541static int rcu_node_kthread(void *arg)
1542{
1543 int cpu;
1544 unsigned long flags;
1545 unsigned long mask;
1546 struct rcu_node *rnp = (struct rcu_node *)arg;
1547 struct sched_param sp;
1548 struct task_struct *t;
1549
1550 for (;;) {
1551 rnp->node_kthread_status = RCU_KTHREAD_WAITING;
1552 rcu_wait(atomic_read(&rnp->wakemask) != 0);
1553 rnp->node_kthread_status = RCU_KTHREAD_RUNNING;
1554 raw_spin_lock_irqsave(&rnp->lock, flags);
1555 mask = atomic_xchg(&rnp->wakemask, 0);
1556 rcu_initiate_boost(rnp, flags);
1557 for (cpu = rnp->grplo; cpu <= rnp->grphi; cpu++, mask >>= 1) {
1558 if ((mask & 0x1) == 0)
1559 continue;
1560 preempt_disable();
1561 t = per_cpu(rcu_cpu_kthread_task, cpu);
1562 if (!cpu_online(cpu) || t == NULL) {
1563 preempt_enable();
1564 continue;
1565 }
1566 per_cpu(rcu_cpu_has_work, cpu) = 1;
1567 sp.sched_priority = RCU_KTHREAD_PRIO;
1568 sched_setscheduler_nocheck(t, SCHED_FIFO, &sp);
1569 preempt_enable();
1570 }
1571 }
1572
1573 rnp->node_kthread_status = RCU_KTHREAD_STOPPED;
1574 return 0;
1575}
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586static void rcu_node_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
1587{
1588 cpumask_var_t cm;
1589 int cpu;
1590 unsigned long mask = rnp->qsmaskinit;
1591
1592 if (rnp->node_kthread_task == NULL)
1593 return;
1594 if (!alloc_cpumask_var(&cm, GFP_KERNEL))
1595 return;
1596 cpumask_clear(cm);
1597 for (cpu = rnp->grplo; cpu <= rnp->grphi; cpu++, mask >>= 1)
1598 if ((mask & 0x1) && cpu != outgoingcpu)
1599 cpumask_set_cpu(cpu, cm);
1600 if (cpumask_weight(cm) == 0) {
1601 cpumask_setall(cm);
1602 for (cpu = rnp->grplo; cpu <= rnp->grphi; cpu++)
1603 cpumask_clear_cpu(cpu, cm);
1604 WARN_ON_ONCE(cpumask_weight(cm) == 0);
1605 }
1606 set_cpus_allowed_ptr(rnp->node_kthread_task, cm);
1607 rcu_boost_kthread_setaffinity(rnp, cm);
1608 free_cpumask_var(cm);
1609}
1610
1611
1612
1613
1614
1615
1616
1617static int __cpuinit rcu_spawn_one_node_kthread(struct rcu_state *rsp,
1618 struct rcu_node *rnp)
1619{
1620 unsigned long flags;
1621 int rnp_index = rnp - &rsp->node[0];
1622 struct sched_param sp;
1623 struct task_struct *t;
1624
1625 if (!rcu_scheduler_fully_active ||
1626 rnp->qsmaskinit == 0)
1627 return 0;
1628 if (rnp->node_kthread_task == NULL) {
1629 t = kthread_create(rcu_node_kthread, (void *)rnp,
1630 "rcun/%d", rnp_index);
1631 if (IS_ERR(t))
1632 return PTR_ERR(t);
1633 raw_spin_lock_irqsave(&rnp->lock, flags);
1634 rnp->node_kthread_task = t;
1635 raw_spin_unlock_irqrestore(&rnp->lock, flags);
1636 sp.sched_priority = 99;
1637 sched_setscheduler_nocheck(t, SCHED_FIFO, &sp);
1638 wake_up_process(t);
1639 }
1640 return rcu_spawn_one_boost_kthread(rsp, rnp, rnp_index);
1641}
1642
1643
1644
1645
1646static int __init rcu_spawn_kthreads(void)
1647{
1648 int cpu;
1649 struct rcu_node *rnp;
1650
1651 rcu_scheduler_fully_active = 1;
1652 for_each_possible_cpu(cpu) {
1653 per_cpu(rcu_cpu_has_work, cpu) = 0;
1654 if (cpu_online(cpu))
1655 (void)rcu_spawn_one_cpu_kthread(cpu);
1656 }
1657 rnp = rcu_get_root(rcu_state);
1658 (void)rcu_spawn_one_node_kthread(rcu_state, rnp);
1659 if (NUM_RCU_NODES > 1) {
1660 rcu_for_each_leaf_node(rcu_state, rnp)
1661 (void)rcu_spawn_one_node_kthread(rcu_state, rnp);
1662 }
1663 return 0;
1664}
1665early_initcall(rcu_spawn_kthreads);
1666
1667static void __cpuinit rcu_prepare_kthreads(int cpu)
1668{
1669 struct rcu_data *rdp = per_cpu_ptr(rcu_state->rda, cpu);
1670 struct rcu_node *rnp = rdp->mynode;
1671
1672
1673 if (rcu_scheduler_fully_active) {
1674 (void)rcu_spawn_one_cpu_kthread(cpu);
1675 if (rnp->node_kthread_task == NULL)
1676 (void)rcu_spawn_one_node_kthread(rcu_state, rnp);
1677 }
1678}
1679
1680#else
1681
1682static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags)
1683{
1684 raw_spin_unlock_irqrestore(&rnp->lock, flags);
1685}
1686
1687static void invoke_rcu_callbacks_kthread(void)
1688{
1689 WARN_ON_ONCE(1);
1690}
1691
1692static bool rcu_is_callbacks_kthread(void)
1693{
1694 return false;
1695}
1696
1697static void rcu_preempt_boost_start_gp(struct rcu_node *rnp)
1698{
1699}
1700
1701#ifdef CONFIG_HOTPLUG_CPU
1702
1703static void rcu_stop_cpu_kthread(int cpu)
1704{
1705}
1706
1707#endif
1708
1709static void rcu_node_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
1710{
1711}
1712
1713static void rcu_cpu_kthread_setrt(int cpu, int to_rt)
1714{
1715}
1716
1717static int __init rcu_scheduler_really_started(void)
1718{
1719 rcu_scheduler_fully_active = 1;
1720 return 0;
1721}
1722early_initcall(rcu_scheduler_really_started);
1723
1724static void __cpuinit rcu_prepare_kthreads(int cpu)
1725{
1726}
1727
1728#endif
1729
1730#if !defined(CONFIG_RCU_FAST_NO_HZ)
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
1742{
1743 *delta_jiffies = ULONG_MAX;
1744 return rcu_cpu_has_callbacks(cpu);
1745}
1746
1747
1748
1749
1750static void rcu_prepare_for_idle_init(int cpu)
1751{
1752}
1753
1754
1755
1756
1757
1758static void rcu_cleanup_after_idle(int cpu)
1759{
1760}
1761
1762
1763
1764
1765
1766static void rcu_prepare_for_idle(int cpu)
1767{
1768}
1769
1770
1771
1772
1773
1774static void rcu_idle_count_callbacks_posted(void)
1775{
1776}
1777
1778#else
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813#define RCU_IDLE_FLUSHES 5
1814#define RCU_IDLE_OPT_FLUSHES 3
1815#define RCU_IDLE_GP_DELAY 4
1816#define RCU_IDLE_LAZY_GP_DELAY (6 * HZ)
1817
1818extern int tick_nohz_enabled;
1819
1820
1821
1822
1823
1824
1825static bool __rcu_cpu_has_nonlazy_callbacks(struct rcu_data *rdp)
1826{
1827 return rdp->qlen != rdp->qlen_lazy;
1828}
1829
1830#ifdef CONFIG_TREE_PREEMPT_RCU
1831
1832
1833
1834
1835
1836static bool rcu_preempt_cpu_has_nonlazy_callbacks(int cpu)
1837{
1838 struct rcu_data *rdp = &per_cpu(rcu_preempt_data, cpu);
1839
1840 return __rcu_cpu_has_nonlazy_callbacks(rdp);
1841}
1842
1843#else
1844
1845static bool rcu_preempt_cpu_has_nonlazy_callbacks(int cpu)
1846{
1847 return 0;
1848}
1849
1850#endif
1851
1852
1853
1854
1855static bool rcu_cpu_has_nonlazy_callbacks(int cpu)
1856{
1857 return __rcu_cpu_has_nonlazy_callbacks(&per_cpu(rcu_sched_data, cpu)) ||
1858 __rcu_cpu_has_nonlazy_callbacks(&per_cpu(rcu_bh_data, cpu)) ||
1859 rcu_preempt_cpu_has_nonlazy_callbacks(cpu);
1860}
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879int rcu_needs_cpu(int cpu, unsigned long *delta_jiffies)
1880{
1881 struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
1882
1883
1884 rdtp->idle_first_pass = 1;
1885
1886 if (!rcu_cpu_has_callbacks(cpu)) {
1887 *delta_jiffies = ULONG_MAX;
1888 return 0;
1889 }
1890 if (rdtp->dyntick_holdoff == jiffies) {
1891
1892 *delta_jiffies = 1;
1893 return 1;
1894 }
1895
1896 if (rcu_cpu_has_nonlazy_callbacks(cpu)) {
1897 *delta_jiffies = round_up(RCU_IDLE_GP_DELAY + jiffies,
1898 RCU_IDLE_GP_DELAY) - jiffies;
1899 } else {
1900 *delta_jiffies = jiffies + RCU_IDLE_LAZY_GP_DELAY;
1901 *delta_jiffies = round_jiffies(*delta_jiffies) - jiffies;
1902 }
1903 return 0;
1904}
1905
1906
1907
1908
1909
1910void rcu_idle_demigrate(void *unused)
1911{
1912 trace_rcu_prep_idle("Demigrate");
1913}
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926static void rcu_idle_gp_timer_func(unsigned long cpu_in)
1927{
1928 int cpu = (int)cpu_in;
1929
1930 trace_rcu_prep_idle("Timer");
1931 if (cpu != smp_processor_id())
1932 smp_call_function_single(cpu, rcu_idle_demigrate, NULL, 0);
1933 else
1934 WARN_ON_ONCE(1);
1935}
1936
1937
1938
1939
1940static void rcu_prepare_for_idle_init(int cpu)
1941{
1942 struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
1943
1944 rdtp->dyntick_holdoff = jiffies - 1;
1945 setup_timer(&rdtp->idle_gp_timer, rcu_idle_gp_timer_func, cpu);
1946 rdtp->idle_gp_timer_expires = jiffies - 1;
1947 rdtp->idle_first_pass = 1;
1948}
1949
1950
1951
1952
1953
1954
1955static void rcu_cleanup_after_idle(int cpu)
1956{
1957 struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
1958
1959 del_timer(&rdtp->idle_gp_timer);
1960 trace_rcu_prep_idle("Cleanup after idle");
1961 rdtp->tick_nohz_enabled_snap = ACCESS_ONCE(tick_nohz_enabled);
1962}
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983static void rcu_prepare_for_idle(int cpu)
1984{
1985 struct timer_list *tp;
1986 struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
1987 int tne;
1988
1989
1990 tne = ACCESS_ONCE(tick_nohz_enabled);
1991 if (tne != rdtp->tick_nohz_enabled_snap) {
1992 if (rcu_cpu_has_callbacks(cpu))
1993 invoke_rcu_core();
1994 rdtp->tick_nohz_enabled_snap = tne;
1995 return;
1996 }
1997 if (!tne)
1998 return;
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008 if (!rdtp->idle_first_pass &&
2009 (rdtp->nonlazy_posted == rdtp->nonlazy_posted_snap)) {
2010 if (rcu_cpu_has_callbacks(cpu)) {
2011 tp = &rdtp->idle_gp_timer;
2012 mod_timer_pinned(tp, rdtp->idle_gp_timer_expires);
2013 }
2014 return;
2015 }
2016 rdtp->idle_first_pass = 0;
2017 rdtp->nonlazy_posted_snap = rdtp->nonlazy_posted - 1;
2018
2019
2020
2021
2022
2023 if (!rcu_cpu_has_callbacks(cpu)) {
2024 rdtp->dyntick_holdoff = jiffies - 1;
2025 rdtp->dyntick_drain = 0;
2026 trace_rcu_prep_idle("No callbacks");
2027 return;
2028 }
2029
2030
2031
2032
2033
2034 if (rdtp->dyntick_holdoff == jiffies) {
2035 trace_rcu_prep_idle("In holdoff");
2036 return;
2037 }
2038
2039
2040 if (rdtp->dyntick_drain <= 0) {
2041
2042 rdtp->dyntick_drain = RCU_IDLE_FLUSHES;
2043 } else if (rdtp->dyntick_drain <= RCU_IDLE_OPT_FLUSHES &&
2044 !rcu_pending(cpu) &&
2045 !local_softirq_pending()) {
2046
2047 rdtp->dyntick_drain = 0;
2048 rdtp->dyntick_holdoff = jiffies;
2049 if (rcu_cpu_has_nonlazy_callbacks(cpu)) {
2050 trace_rcu_prep_idle("Dyntick with callbacks");
2051 rdtp->idle_gp_timer_expires =
2052 round_up(jiffies + RCU_IDLE_GP_DELAY,
2053 RCU_IDLE_GP_DELAY);
2054 } else {
2055 rdtp->idle_gp_timer_expires =
2056 round_jiffies(jiffies + RCU_IDLE_LAZY_GP_DELAY);
2057 trace_rcu_prep_idle("Dyntick with lazy callbacks");
2058 }
2059 tp = &rdtp->idle_gp_timer;
2060 mod_timer_pinned(tp, rdtp->idle_gp_timer_expires);
2061 rdtp->nonlazy_posted_snap = rdtp->nonlazy_posted;
2062 return;
2063 } else if (--(rdtp->dyntick_drain) <= 0) {
2064
2065 rdtp->dyntick_holdoff = jiffies;
2066 trace_rcu_prep_idle("Begin holdoff");
2067 invoke_rcu_core();
2068 return;
2069 }
2070
2071
2072
2073
2074
2075#ifdef CONFIG_TREE_PREEMPT_RCU
2076 if (per_cpu(rcu_preempt_data, cpu).nxtlist) {
2077 rcu_preempt_qs(cpu);
2078 force_quiescent_state(&rcu_preempt_state, 0);
2079 }
2080#endif
2081 if (per_cpu(rcu_sched_data, cpu).nxtlist) {
2082 rcu_sched_qs(cpu);
2083 force_quiescent_state(&rcu_sched_state, 0);
2084 }
2085 if (per_cpu(rcu_bh_data, cpu).nxtlist) {
2086 rcu_bh_qs(cpu);
2087 force_quiescent_state(&rcu_bh_state, 0);
2088 }
2089
2090
2091
2092
2093
2094 if (rcu_cpu_has_callbacks(cpu)) {
2095 trace_rcu_prep_idle("More callbacks");
2096 invoke_rcu_core();
2097 } else {
2098 trace_rcu_prep_idle("Callbacks drained");
2099 }
2100}
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110static void rcu_idle_count_callbacks_posted(void)
2111{
2112 __this_cpu_add(rcu_dynticks.nonlazy_posted, 1);
2113}
2114
2115#endif
2116
2117#ifdef CONFIG_RCU_CPU_STALL_INFO
2118
2119#ifdef CONFIG_RCU_FAST_NO_HZ
2120
2121static void print_cpu_stall_fast_no_hz(char *cp, int cpu)
2122{
2123 struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
2124 struct timer_list *tltp = &rdtp->idle_gp_timer;
2125
2126 sprintf(cp, "drain=%d %c timer=%lu",
2127 rdtp->dyntick_drain,
2128 rdtp->dyntick_holdoff == jiffies ? 'H' : '.',
2129 timer_pending(tltp) ? tltp->expires - jiffies : -1);
2130}
2131
2132#else
2133
2134static void print_cpu_stall_fast_no_hz(char *cp, int cpu)
2135{
2136 *cp = '\0';
2137}
2138
2139#endif
2140
2141
2142static void print_cpu_stall_info_begin(void)
2143{
2144 printk(KERN_CONT "\n");
2145}
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159static void print_cpu_stall_info(struct rcu_state *rsp, int cpu)
2160{
2161 char fast_no_hz[72];
2162 struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu);
2163 struct rcu_dynticks *rdtp = rdp->dynticks;
2164 char *ticks_title;
2165 unsigned long ticks_value;
2166
2167 if (rsp->gpnum == rdp->gpnum) {
2168 ticks_title = "ticks this GP";
2169 ticks_value = rdp->ticks_this_gp;
2170 } else {
2171 ticks_title = "GPs behind";
2172 ticks_value = rsp->gpnum - rdp->gpnum;
2173 }
2174 print_cpu_stall_fast_no_hz(fast_no_hz, cpu);
2175 printk(KERN_ERR "\t%d: (%lu %s) idle=%03x/%llx/%d %s\n",
2176 cpu, ticks_value, ticks_title,
2177 atomic_read(&rdtp->dynticks) & 0xfff,
2178 rdtp->dynticks_nesting, rdtp->dynticks_nmi_nesting,
2179 fast_no_hz);
2180}
2181
2182
2183static void print_cpu_stall_info_end(void)
2184{
2185 printk(KERN_ERR "\t");
2186}
2187
2188
2189static void zero_cpu_stall_ticks(struct rcu_data *rdp)
2190{
2191 rdp->ticks_this_gp = 0;
2192}
2193
2194
2195static void increment_cpu_stall_ticks(void)
2196{
2197 __get_cpu_var(rcu_sched_data).ticks_this_gp++;
2198 __get_cpu_var(rcu_bh_data).ticks_this_gp++;
2199#ifdef CONFIG_TREE_PREEMPT_RCU
2200 __get_cpu_var(rcu_preempt_data).ticks_this_gp++;
2201#endif
2202}
2203
2204#else
2205
2206static void print_cpu_stall_info_begin(void)
2207{
2208 printk(KERN_CONT " {");
2209}
2210
2211static void print_cpu_stall_info(struct rcu_state *rsp, int cpu)
2212{
2213 printk(KERN_CONT " %d", cpu);
2214}
2215
2216static void print_cpu_stall_info_end(void)
2217{
2218 printk(KERN_CONT "} ");
2219}
2220
2221static void zero_cpu_stall_ticks(struct rcu_data *rdp)
2222{
2223}
2224
2225static void increment_cpu_stall_ticks(void)
2226{
2227}
2228
2229#endif
2230