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#include <linux/cache.h>
26#include <linux/spinlock.h>
27#include <linux/threads.h>
28#include <linux/cpumask.h>
29#include <linux/seqlock.h>
30#include <linux/swait.h>
31#include <linux/stop_machine.h>
32
33
34
35
36
37
38
39
40
41#ifdef CONFIG_RCU_FANOUT
42#define RCU_FANOUT CONFIG_RCU_FANOUT
43#else
44# ifdef CONFIG_64BIT
45# define RCU_FANOUT 64
46# else
47# define RCU_FANOUT 32
48# endif
49#endif
50
51#ifdef CONFIG_RCU_FANOUT_LEAF
52#define RCU_FANOUT_LEAF CONFIG_RCU_FANOUT_LEAF
53#else
54# ifdef CONFIG_64BIT
55# define RCU_FANOUT_LEAF 64
56# else
57# define RCU_FANOUT_LEAF 32
58# endif
59#endif
60
61#define RCU_FANOUT_1 (RCU_FANOUT_LEAF)
62#define RCU_FANOUT_2 (RCU_FANOUT_1 * RCU_FANOUT)
63#define RCU_FANOUT_3 (RCU_FANOUT_2 * RCU_FANOUT)
64#define RCU_FANOUT_4 (RCU_FANOUT_3 * RCU_FANOUT)
65
66#if NR_CPUS <= RCU_FANOUT_1
67# define RCU_NUM_LVLS 1
68# define NUM_RCU_LVL_0 1
69# define NUM_RCU_NODES NUM_RCU_LVL_0
70# define NUM_RCU_LVL_INIT { NUM_RCU_LVL_0 }
71# define RCU_NODE_NAME_INIT { "rcu_node_0" }
72# define RCU_FQS_NAME_INIT { "rcu_node_fqs_0" }
73# define RCU_EXP_NAME_INIT { "rcu_node_exp_0" }
74#elif NR_CPUS <= RCU_FANOUT_2
75# define RCU_NUM_LVLS 2
76# define NUM_RCU_LVL_0 1
77# define NUM_RCU_LVL_1 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_1)
78# define NUM_RCU_NODES (NUM_RCU_LVL_0 + NUM_RCU_LVL_1)
79# define NUM_RCU_LVL_INIT { NUM_RCU_LVL_0, NUM_RCU_LVL_1 }
80# define RCU_NODE_NAME_INIT { "rcu_node_0", "rcu_node_1" }
81# define RCU_FQS_NAME_INIT { "rcu_node_fqs_0", "rcu_node_fqs_1" }
82# define RCU_EXP_NAME_INIT { "rcu_node_exp_0", "rcu_node_exp_1" }
83#elif NR_CPUS <= RCU_FANOUT_3
84# define RCU_NUM_LVLS 3
85# define NUM_RCU_LVL_0 1
86# define NUM_RCU_LVL_1 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_2)
87# define NUM_RCU_LVL_2 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_1)
88# define NUM_RCU_NODES (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2)
89# define NUM_RCU_LVL_INIT { NUM_RCU_LVL_0, NUM_RCU_LVL_1, NUM_RCU_LVL_2 }
90# define RCU_NODE_NAME_INIT { "rcu_node_0", "rcu_node_1", "rcu_node_2" }
91# define RCU_FQS_NAME_INIT { "rcu_node_fqs_0", "rcu_node_fqs_1", "rcu_node_fqs_2" }
92# define RCU_EXP_NAME_INIT { "rcu_node_exp_0", "rcu_node_exp_1", "rcu_node_exp_2" }
93#elif NR_CPUS <= RCU_FANOUT_4
94# define RCU_NUM_LVLS 4
95# define NUM_RCU_LVL_0 1
96# define NUM_RCU_LVL_1 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_3)
97# define NUM_RCU_LVL_2 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_2)
98# define NUM_RCU_LVL_3 DIV_ROUND_UP(NR_CPUS, RCU_FANOUT_1)
99# define NUM_RCU_NODES (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2 + NUM_RCU_LVL_3)
100# define NUM_RCU_LVL_INIT { NUM_RCU_LVL_0, NUM_RCU_LVL_1, NUM_RCU_LVL_2, NUM_RCU_LVL_3 }
101# define RCU_NODE_NAME_INIT { "rcu_node_0", "rcu_node_1", "rcu_node_2", "rcu_node_3" }
102# define RCU_FQS_NAME_INIT { "rcu_node_fqs_0", "rcu_node_fqs_1", "rcu_node_fqs_2", "rcu_node_fqs_3" }
103# define RCU_EXP_NAME_INIT { "rcu_node_exp_0", "rcu_node_exp_1", "rcu_node_exp_2", "rcu_node_exp_3" }
104#else
105# error "CONFIG_RCU_FANOUT insufficient for NR_CPUS"
106#endif
107
108extern int rcu_num_lvls;
109extern int rcu_num_nodes;
110
111
112
113
114struct rcu_dynticks {
115 long long dynticks_nesting;
116
117 int dynticks_nmi_nesting;
118 atomic_t dynticks;
119#ifdef CONFIG_NO_HZ_FULL_SYSIDLE
120 long long dynticks_idle_nesting;
121
122 atomic_t dynticks_idle;
123
124 unsigned long dynticks_idle_jiffies;
125
126#endif
127#ifdef CONFIG_RCU_FAST_NO_HZ
128 bool all_lazy;
129 unsigned long nonlazy_posted;
130
131 unsigned long nonlazy_posted_snap;
132
133 unsigned long last_accelerate;
134
135 unsigned long last_advance_all;
136
137 int tick_nohz_enabled_snap;
138#endif
139};
140
141
142#define RCU_KTHREAD_STOPPED 0
143#define RCU_KTHREAD_RUNNING 1
144#define RCU_KTHREAD_WAITING 2
145#define RCU_KTHREAD_OFFCPU 3
146#define RCU_KTHREAD_YIELDING 4
147#define RCU_KTHREAD_MAX 4
148
149
150
151
152struct rcu_node {
153 raw_spinlock_t __private lock;
154
155
156 unsigned long gpnum;
157
158
159 unsigned long completed;
160
161
162 unsigned long qsmask;
163
164
165
166
167
168 unsigned long qsmaskinit;
169
170
171
172 unsigned long qsmaskinitnext;
173
174 unsigned long expmask;
175
176
177 unsigned long expmaskinit;
178
179
180
181 unsigned long expmaskinitnext;
182
183
184
185 unsigned long grpmask;
186
187 int grplo;
188 int grphi;
189 u8 grpnum;
190 u8 level;
191 bool wait_blkd_tasks;
192
193
194
195 struct rcu_node *parent;
196 struct list_head blkd_tasks;
197
198
199
200 struct list_head *gp_tasks;
201
202
203
204 struct list_head *exp_tasks;
205
206
207
208
209
210 struct list_head *boost_tasks;
211
212
213
214
215
216
217
218 struct rt_mutex boost_mtx;
219
220
221 unsigned long boost_time;
222
223 struct task_struct *boost_kthread_task;
224
225
226 unsigned int boost_kthread_status;
227
228 unsigned long n_tasks_boosted;
229
230 unsigned long n_exp_boosts;
231
232 unsigned long n_normal_boosts;
233
234 unsigned long n_balk_blkd_tasks;
235
236 unsigned long n_balk_exp_gp_tasks;
237
238 unsigned long n_balk_boost_tasks;
239
240 unsigned long n_balk_notblocked;
241
242 unsigned long n_balk_notyet;
243
244 unsigned long n_balk_nos;
245
246
247#ifdef CONFIG_RCU_NOCB_CPU
248 struct swait_queue_head nocb_gp_wq[2];
249
250#endif
251 int need_future_gp[2];
252
253 raw_spinlock_t fqslock ____cacheline_internodealigned_in_smp;
254
255 struct mutex exp_funnel_mutex ____cacheline_internodealigned_in_smp;
256} ____cacheline_internodealigned_in_smp;
257
258
259
260
261
262#define rcu_for_each_node_breadth_first(rsp, rnp) \
263 for ((rnp) = &(rsp)->node[0]; \
264 (rnp) < &(rsp)->node[rcu_num_nodes]; (rnp)++)
265
266
267
268
269
270
271#define rcu_for_each_nonleaf_node_breadth_first(rsp, rnp) \
272 for ((rnp) = &(rsp)->node[0]; \
273 (rnp) < (rsp)->level[rcu_num_lvls - 1]; (rnp)++)
274
275
276
277
278
279
280
281#define rcu_for_each_leaf_node(rsp, rnp) \
282 for ((rnp) = (rsp)->level[rcu_num_lvls - 1]; \
283 (rnp) < &(rsp)->node[rcu_num_nodes]; (rnp)++)
284
285
286
287
288
289union rcu_noqs {
290 struct {
291 u8 norm;
292 u8 exp;
293 } b;
294 u16 s;
295};
296
297
298#define RCU_DONE_TAIL 0
299#define RCU_WAIT_TAIL 1
300#define RCU_NEXT_READY_TAIL 2
301#define RCU_NEXT_TAIL 3
302#define RCU_NEXT_SIZE 4
303
304
305struct rcu_data {
306
307 unsigned long completed;
308
309 unsigned long gpnum;
310
311 unsigned long rcu_qs_ctr_snap;
312
313 union rcu_noqs cpu_no_qs;
314 bool core_needs_qs;
315 bool beenonline;
316 bool gpwrap;
317 struct rcu_node *mynode;
318 unsigned long grpmask;
319 unsigned long ticks_this_gp;
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347 struct rcu_head *nxtlist;
348 struct rcu_head **nxttail[RCU_NEXT_SIZE];
349 unsigned long nxtcompleted[RCU_NEXT_SIZE];
350
351 long qlen_lazy;
352 long qlen;
353 long qlen_last_fqs_check;
354
355 unsigned long n_cbs_invoked;
356 unsigned long n_nocbs_invoked;
357 unsigned long n_cbs_orphaned;
358 unsigned long n_cbs_adopted;
359 unsigned long n_force_qs_snap;
360
361 long blimit;
362
363
364 struct rcu_dynticks *dynticks;
365 int dynticks_snap;
366
367
368 unsigned long dynticks_fqs;
369 unsigned long offline_fqs;
370 unsigned long cond_resched_completed;
371
372
373
374
375 unsigned long n_rcu_pending;
376 unsigned long n_rp_core_needs_qs;
377 unsigned long n_rp_report_qs;
378 unsigned long n_rp_cb_ready;
379 unsigned long n_rp_cpu_needs_gp;
380 unsigned long n_rp_gp_completed;
381 unsigned long n_rp_gp_started;
382 unsigned long n_rp_nocb_defer_wakeup;
383 unsigned long n_rp_need_nothing;
384
385
386 struct rcu_head barrier_head;
387#ifdef CONFIG_RCU_FAST_NO_HZ
388 struct rcu_head oom_head;
389#endif
390 struct mutex exp_funnel_mutex;
391 atomic_long_t expedited_workdone0;
392 atomic_long_t expedited_workdone1;
393 atomic_long_t expedited_workdone2;
394 atomic_long_t expedited_workdone3;
395
396
397#ifdef CONFIG_RCU_NOCB_CPU
398 struct rcu_head *nocb_head;
399 struct rcu_head **nocb_tail;
400 atomic_long_t nocb_q_count;
401 atomic_long_t nocb_q_count_lazy;
402 struct rcu_head *nocb_follower_head;
403 struct rcu_head **nocb_follower_tail;
404 struct swait_queue_head nocb_wq;
405 struct task_struct *nocb_kthread;
406 int nocb_defer_wakeup;
407
408
409 struct rcu_head *nocb_gp_head ____cacheline_internodealigned_in_smp;
410
411 struct rcu_head **nocb_gp_tail;
412 bool nocb_leader_sleep;
413 struct rcu_data *nocb_next_follower;
414
415
416
417 struct rcu_data *nocb_leader ____cacheline_internodealigned_in_smp;
418
419#endif
420
421
422 unsigned int softirq_snap;
423
424 int cpu;
425 struct rcu_state *rsp;
426};
427
428
429#define RCU_NOGP_WAKE_NOT 0
430#define RCU_NOGP_WAKE 1
431#define RCU_NOGP_WAKE_FORCE 2
432
433#define RCU_JIFFIES_TILL_FORCE_QS (1 + (HZ > 250) + (HZ > 500))
434
435
436
437#define RCU_JIFFIES_FQS_DIV 256
438
439
440
441#define RCU_STALL_RAT_DELAY 2
442
443
444
445#define rcu_wait(cond) \
446do { \
447 for (;;) { \
448 set_current_state(TASK_INTERRUPTIBLE); \
449 if (cond) \
450 break; \
451 schedule(); \
452 } \
453 __set_current_state(TASK_RUNNING); \
454} while (0)
455
456
457
458
459
460
461
462
463
464
465
466struct rcu_state {
467 struct rcu_node node[NUM_RCU_NODES];
468 struct rcu_node *level[RCU_NUM_LVLS + 1];
469
470
471 u8 flavor_mask;
472 struct rcu_data __percpu *rda;
473 call_rcu_func_t call;
474 int ncpus;
475
476
477
478 u8 boost ____cacheline_internodealigned_in_smp;
479
480 unsigned long gpnum;
481 unsigned long completed;
482 struct task_struct *gp_kthread;
483 struct swait_queue_head gp_wq;
484 short gp_flags;
485 short gp_state;
486
487
488
489 raw_spinlock_t orphan_lock ____cacheline_internodealigned_in_smp;
490
491 struct rcu_head *orphan_nxtlist;
492
493 struct rcu_head **orphan_nxttail;
494 struct rcu_head *orphan_donelist;
495
496 struct rcu_head **orphan_donetail;
497 long qlen_lazy;
498 long qlen;
499
500
501 struct mutex barrier_mutex;
502 atomic_t barrier_cpu_count;
503 struct completion barrier_completion;
504 unsigned long barrier_sequence;
505
506
507
508 unsigned long expedited_sequence;
509 atomic_long_t expedited_normal;
510 atomic_t expedited_need_qs;
511 struct swait_queue_head expedited_wq;
512 int ncpus_snap;
513
514 unsigned long jiffies_force_qs;
515
516 unsigned long n_force_qs;
517
518 unsigned long n_force_qs_lh;
519
520 unsigned long n_force_qs_ngp;
521
522 unsigned long gp_start;
523
524 unsigned long gp_activity;
525
526 unsigned long jiffies_stall;
527
528 unsigned long jiffies_resched;
529
530 unsigned long n_force_qs_gpstart;
531
532 unsigned long gp_max;
533
534 const char *name;
535 char abbr;
536 struct list_head flavors;
537};
538
539
540#define RCU_GP_FLAG_INIT 0x1
541#define RCU_GP_FLAG_FQS 0x2
542
543
544#define RCU_GP_IDLE 0
545#define RCU_GP_WAIT_GPS 1
546#define RCU_GP_DONE_GPS 2
547#define RCU_GP_WAIT_FQS 3
548#define RCU_GP_DOING_FQS 4
549#define RCU_GP_CLEANUP 5
550#define RCU_GP_CLEANED 6
551
552#ifndef RCU_TREE_NONCORE
553static const char * const gp_state_names[] = {
554 "RCU_GP_IDLE",
555 "RCU_GP_WAIT_GPS",
556 "RCU_GP_DONE_GPS",
557 "RCU_GP_WAIT_FQS",
558 "RCU_GP_DOING_FQS",
559 "RCU_GP_CLEANUP",
560 "RCU_GP_CLEANED",
561};
562#endif
563
564extern struct list_head rcu_struct_flavors;
565
566
567#define for_each_rcu_flavor(rsp) \
568 list_for_each_entry((rsp), &rcu_struct_flavors, flavors)
569
570
571
572
573extern struct rcu_state rcu_sched_state;
574
575extern struct rcu_state rcu_bh_state;
576
577#ifdef CONFIG_PREEMPT_RCU
578extern struct rcu_state rcu_preempt_state;
579#endif
580
581#ifdef CONFIG_RCU_BOOST
582DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_status);
583DECLARE_PER_CPU(int, rcu_cpu_kthread_cpu);
584DECLARE_PER_CPU(unsigned int, rcu_cpu_kthread_loops);
585DECLARE_PER_CPU(char, rcu_cpu_has_work);
586#endif
587
588#ifndef RCU_TREE_NONCORE
589
590
591static void rcu_bootup_announce(void);
592static void rcu_preempt_note_context_switch(void);
593static int rcu_preempt_blocked_readers_cgp(struct rcu_node *rnp);
594#ifdef CONFIG_HOTPLUG_CPU
595static bool rcu_preempt_has_tasks(struct rcu_node *rnp);
596#endif
597static void rcu_print_detail_task_stall(struct rcu_state *rsp);
598static int rcu_print_task_stall(struct rcu_node *rnp);
599static int rcu_print_task_exp_stall(struct rcu_node *rnp);
600static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp);
601static void rcu_preempt_check_callbacks(void);
602void call_rcu(struct rcu_head *head, rcu_callback_t func);
603static void __init __rcu_init_preempt(void);
604static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags);
605static void rcu_preempt_boost_start_gp(struct rcu_node *rnp);
606static void invoke_rcu_callbacks_kthread(void);
607static bool rcu_is_callbacks_kthread(void);
608#ifdef CONFIG_RCU_BOOST
609static void rcu_preempt_do_callbacks(void);
610static int rcu_spawn_one_boost_kthread(struct rcu_state *rsp,
611 struct rcu_node *rnp);
612#endif
613static void __init rcu_spawn_boost_kthreads(void);
614static void rcu_prepare_kthreads(int cpu);
615static void rcu_cleanup_after_idle(void);
616static void rcu_prepare_for_idle(void);
617static void rcu_idle_count_callbacks_posted(void);
618static bool rcu_preempt_has_tasks(struct rcu_node *rnp);
619static void print_cpu_stall_info_begin(void);
620static void print_cpu_stall_info(struct rcu_state *rsp, int cpu);
621static void print_cpu_stall_info_end(void);
622static void zero_cpu_stall_ticks(struct rcu_data *rdp);
623static void increment_cpu_stall_ticks(void);
624static bool rcu_nocb_cpu_needs_barrier(struct rcu_state *rsp, int cpu);
625static void rcu_nocb_gp_set(struct rcu_node *rnp, int nrq);
626static struct swait_queue_head *rcu_nocb_gp_get(struct rcu_node *rnp);
627static void rcu_nocb_gp_cleanup(struct swait_queue_head *sq);
628static void rcu_init_one_nocb(struct rcu_node *rnp);
629static bool __call_rcu_nocb(struct rcu_data *rdp, struct rcu_head *rhp,
630 bool lazy, unsigned long flags);
631static bool rcu_nocb_adopt_orphan_cbs(struct rcu_state *rsp,
632 struct rcu_data *rdp,
633 unsigned long flags);
634static int rcu_nocb_need_deferred_wakeup(struct rcu_data *rdp);
635static void do_nocb_deferred_wakeup(struct rcu_data *rdp);
636static void rcu_boot_init_nocb_percpu_data(struct rcu_data *rdp);
637static void rcu_spawn_all_nocb_kthreads(int cpu);
638static void __init rcu_spawn_nocb_kthreads(void);
639#ifdef CONFIG_RCU_NOCB_CPU
640static void __init rcu_organize_nocb_kthreads(struct rcu_state *rsp);
641#endif
642static void __maybe_unused rcu_kick_nohz_cpu(int cpu);
643static bool init_nocb_callback_list(struct rcu_data *rdp);
644static void rcu_sysidle_enter(int irq);
645static void rcu_sysidle_exit(int irq);
646static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
647 unsigned long *maxj);
648static bool is_sysidle_rcu_state(struct rcu_state *rsp);
649static void rcu_sysidle_report_gp(struct rcu_state *rsp, int isidle,
650 unsigned long maxj);
651static void rcu_bind_gp_kthread(void);
652static void rcu_sysidle_init_percpu_data(struct rcu_dynticks *rdtp);
653static bool rcu_nohz_full_cpu(struct rcu_state *rsp);
654static void rcu_dynticks_task_enter(void);
655static void rcu_dynticks_task_exit(void);
656
657#endif
658
659#ifdef CONFIG_RCU_TRACE
660
661static inline void rcu_nocb_q_lengths(struct rcu_data *rdp, long *ql, long *qll)
662{
663#ifdef CONFIG_RCU_NOCB_CPU
664 *ql = atomic_long_read(&rdp->nocb_q_count);
665 *qll = atomic_long_read(&rdp->nocb_q_count_lazy);
666#else
667 *ql = 0;
668 *qll = 0;
669#endif
670}
671#endif
672
673
674
675
676
677
678
679#ifdef CONFIG_PPC
680#define smp_mb__after_unlock_lock() smp_mb()
681#else
682#define smp_mb__after_unlock_lock() do { } while (0)
683#endif
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699static inline void raw_spin_lock_rcu_node(struct rcu_node *rnp)
700{
701 raw_spin_lock(&ACCESS_PRIVATE(rnp, lock));
702 smp_mb__after_unlock_lock();
703}
704
705static inline void raw_spin_unlock_rcu_node(struct rcu_node *rnp)
706{
707 raw_spin_unlock(&ACCESS_PRIVATE(rnp, lock));
708}
709
710static inline void raw_spin_lock_irq_rcu_node(struct rcu_node *rnp)
711{
712 raw_spin_lock_irq(&ACCESS_PRIVATE(rnp, lock));
713 smp_mb__after_unlock_lock();
714}
715
716static inline void raw_spin_unlock_irq_rcu_node(struct rcu_node *rnp)
717{
718 raw_spin_unlock_irq(&ACCESS_PRIVATE(rnp, lock));
719}
720
721#define raw_spin_lock_irqsave_rcu_node(rnp, flags) \
722do { \
723 typecheck(unsigned long, flags); \
724 raw_spin_lock_irqsave(&ACCESS_PRIVATE(rnp, lock), flags); \
725 smp_mb__after_unlock_lock(); \
726} while (0)
727
728#define raw_spin_unlock_irqrestore_rcu_node(rnp, flags) \
729do { \
730 typecheck(unsigned long, flags); \
731 raw_spin_unlock_irqrestore(&ACCESS_PRIVATE(rnp, lock), flags); \
732} while (0)
733
734static inline bool raw_spin_trylock_rcu_node(struct rcu_node *rnp)
735{
736 bool locked = raw_spin_trylock(&ACCESS_PRIVATE(rnp, lock));
737
738 if (locked)
739 smp_mb__after_unlock_lock();
740 return locked;
741}
742