/linux/kernel/rcu/ |
H A D | tree_exp.h | 98 if (rnp->expmaskinit == rnp->expmaskinitnext) { in sync_exp_reset_tree_hotplug() 105 rnp->expmaskinit = rnp->expmaskinitnext; in sync_exp_reset_tree_hotplug() 143 WRITE_ONCE(rnp->expmask, rnp->expmaskinit); in sync_exp_reset_tree() 209 rnp = rnp->parent; in __rcu_report_exp_rnp() 212 WRITE_ONCE(rnp->expmask, rnp->expmask & ~mask); in __rcu_report_exp_rnp() 244 WRITE_ONCE(rnp->expmask, rnp->expmask & ~mask); in rcu_report_exp_cpu_mult() 307 for (; rnp != NULL; rnp = rnp->parent) { in exp_funnel_lock() 318 rnp->grplo, rnp->grphi, in exp_funnel_lock() 327 rnp->grplo, rnp->grphi, TPS("nxtlvl")); in exp_funnel_lock() 395 WRITE_ONCE(rnp->exp_tasks, rnp->blkd_tasks.next); in __sync_rcu_exp_select_node_cpus() [all …]
|
H A D | tree_plugin.h | 175 WARN_ON_ONCE(rnp->qsmaskinitnext & ~rnp->qsmaskinit & rnp->qsmask & in rcu_preempt_ctxt_queue() 256 WARN_ON_ONCE(rnp->completedqs == rnp->gp_seq); in rcu_preempt_ctxt_queue() 533 WARN_ON_ONCE(rnp->completedqs == rnp->gp_seq && in rcu_preempt_deferred_qs_irqrestore() 713 (rnp->qsmaskinit || rnp->wait_blkd_tasks)) { in rcu_preempt_check_blocked_tasks() 714 WRITE_ONCE(rnp->gp_tasks, rnp->blkd_tasks.next); in rcu_preempt_check_blocked_tasks() 799 __func__, rnp->grplo, rnp->grphi, rnp->level, in dump_blkd_tasks() 800 (long)READ_ONCE(rnp->gp_seq), (long)rnp->completedqs); in dump_blkd_tasks() 815 for (cpu = rnp->grplo; cpu <= rnp->grphi; cpu++) { in dump_blkd_tasks() 1074 if (rnp->exp_tasks == NULL && rnp->boost_tasks == NULL) { in rcu_boost() 1112 rnp->n_boosts++; in rcu_boost() [all …]
|
H A D | tree.c | 857 __func__, rnp->grplo, rnp->grphi, rnp->level, in rcu_watching_snap_recheck() 993 for (rnp = rnp_start; 1; rnp = rnp->parent) { in rcu_start_this_gp() 1925 rnp->qsmask = rnp->qsmaskinit; in rcu_gp_init() 1931 rnp->level, rnp->grplo, in rcu_gp_init() 2315 rnp->grplo, rnp->grphi, in rcu_report_qs_rnp() 2333 rnp = rnp->parent; in rcu_report_qs_rnp() 2369 rnp->completedqs = rnp->gp_seq; in rcu_report_unblock_qs_rnp() 2754 for (; rnp != NULL; rnp = rnp->parent) { in rcu_force_quiescent_state() 4117 for (rnp = this_cpu_ptr(&rcu_data)->mynode; rnp; rnp = rnp->parent) in synchronize_rcu() 4827 rnp = rnp->parent; in rcu_cleanup_dead_rnp() [all …]
|
H A D | tree_stall.h | 224 struct rcu_node *rnp; in rcu_iw_handler() local 227 rnp = rdp->mynode; in rcu_iw_handler() 297 __releases(rnp->lock) in rcu_print_task_stall() 311 rnp->level, rnp->grplo, rnp->grphi); in rcu_print_task_stall() 355 __releases(rnp->lock) in rcu_print_task_stall() 378 if (rnp->qsmask & leaf_node_cpu_bit(rnp, cpu)) { in rcu_dump_cpu_stacks() 625 if (rnp->qsmask & leaf_node_cpu_bit(rnp, cpu)) { in print_other_cpu_stall() 794 rnp = rdp->mynode; in check_cpu_stall() 869 if (rnp->gp_tasks) in rcu_check_boost_fail() 878 if (rnp->qsmask & (1UL << (cpu - rnp->grplo))) { in rcu_check_boost_fail() [all …]
|
H A D | rcu.h | 382 #define rcu_is_leaf_node(rnp) ((rnp)->level == rcu_num_lvls - 1) argument 385 #define rcu_is_last_leaf_node(rnp) ((rnp) == &rcu_state.node[rcu_num_nodes - 1]) argument 393 for ((rnp) = &(sp)->node[0]; \ 394 (rnp) < &(sp)->node[rcu_num_nodes]; (rnp)++) 406 #define rcu_for_each_leaf_node(rnp) \ argument 407 for ((rnp) = rcu_first_leaf_node(); \ 408 (rnp) < &rcu_state.node[rcu_num_nodes]; (rnp)++) 416 (cpu) <= rnp->grphi; \ 422 #define rcu_find_next_bit(rnp, cpu, mask) \ argument 427 (cpu) <= rnp->grphi; \ [all …]
|
H A D | tree.h | 146 #define leaf_node_cpu_bit(rnp, cpu) (BIT((cpu) - (rnp)->grplo)) argument 471 static int rcu_preempt_blocked_readers_cgp(struct rcu_node *rnp); 473 static bool rcu_preempt_has_tasks(struct rcu_node *rnp); 475 static int rcu_print_task_exp_stall(struct rcu_node *rnp); 476 static void rcu_preempt_check_blocked_tasks(struct rcu_node *rnp); 478 static void dump_blkd_tasks(struct rcu_node *rnp, int ncheck); 480 static void rcu_preempt_boost_start_gp(struct rcu_node *rnp); 483 static void rcu_spawn_one_boost_kthread(struct rcu_node *rnp); 484 static bool rcu_preempt_has_tasks(struct rcu_node *rnp); 487 static struct swait_queue_head *rcu_nocb_gp_get(struct rcu_node *rnp); [all …]
|
H A D | tree_nocb.h | 184 return &rnp->nocb_gp_wq[rcu_seq_ctr(rnp->gp_seq) & 0x1]; in rcu_nocb_gp_get() 189 init_swait_queue_head(&rnp->nocb_gp_wq[0]); in rcu_init_one_nocb() 190 init_swait_queue_head(&rnp->nocb_gp_wq[1]); in rcu_init_one_nocb() 667 struct rcu_node *rnp; in nocb_gp_wait() local 730 rnp = rdp->mynode; in nocb_gp_wait() 807 rnp = my_rdp->mynode; in nocb_gp_wait() 889 struct rcu_node *rnp = rdp->mynode; in nocb_cb_wait() local 1525 struct rcu_node *rnp = rdp->mynode; in show_rcu_nocb_gp_state() local 1535 ".W"[swait_active(&rnp->nocb_gp_wq[0])], in show_rcu_nocb_gp_state() 1536 ".W"[swait_active(&rnp->nocb_gp_wq[1])], in show_rcu_nocb_gp_state() [all …]
|
/linux/Documentation/RCU/Design/Memory-Ordering/ |
H A D | Tree-RCU-Memory-Ordering.rst | 84 5 raw_spin_lock_rcu_node(rnp); 87 8 raw_spin_unlock_rcu_node(rnp); 92 13 raw_spin_lock_rcu_node(rnp); 95 16 raw_spin_unlock_rcu_node(rnp); 206 5 struct rcu_node *rnp; 232 31 rnp = rdp->mynode; 233 32 raw_spin_lock_rcu_node(rnp); /* irqs already disabled. */ 234 33 needwake = rcu_accelerate_cbs(rnp, rdp); 235 34 raw_spin_unlock_rcu_node(rnp); /* irqs remain disabled. */
|
/linux/Documentation/RCU/Design/Data-Structures/ |
H A D | Data-Structures.rst | 1106 6 #define rcu_for_each_node_breadth_first(rsp, rnp) \ 1107 7 for ((rnp) = &(rsp)->node[0]; \ 1108 8 (rnp) < &(rsp)->node[NUM_RCU_NODES]; (rnp)++) 1110 10 #define rcu_for_each_leaf_node(rsp, rnp) \ 1111 11 for ((rnp) = (rsp)->level[NUM_RCU_LVLS - 1]; \ 1112 12 (rnp) < &(rsp)->node[NUM_RCU_NODES]; (rnp)++)
|