Lines Matching refs:sdp

125 	struct srcu_data *sdp;  in init_srcu_struct_data()  local
131 WARN_ON_ONCE(ARRAY_SIZE(sdp->srcu_lock_count) != in init_srcu_struct_data()
132 ARRAY_SIZE(sdp->srcu_unlock_count)); in init_srcu_struct_data()
134 sdp = per_cpu_ptr(ssp->sda, cpu); in init_srcu_struct_data()
135 spin_lock_init(&ACCESS_PRIVATE(sdp, lock)); in init_srcu_struct_data()
136 rcu_segcblist_init(&sdp->srcu_cblist); in init_srcu_struct_data()
137 sdp->srcu_cblist_invoking = false; in init_srcu_struct_data()
138 sdp->srcu_gp_seq_needed = ssp->srcu_sup->srcu_gp_seq; in init_srcu_struct_data()
139 sdp->srcu_gp_seq_needed_exp = ssp->srcu_sup->srcu_gp_seq; in init_srcu_struct_data()
140 sdp->mynode = NULL; in init_srcu_struct_data()
141 sdp->cpu = cpu; in init_srcu_struct_data()
142 INIT_WORK(&sdp->work, srcu_invoke_callbacks); in init_srcu_struct_data()
143 timer_setup(&sdp->delay_work, srcu_delay_timer, 0); in init_srcu_struct_data()
144 sdp->ssp = ssp; in init_srcu_struct_data()
170 struct srcu_data *sdp; in init_srcu_struct_nodes() local
219 sdp = per_cpu_ptr(ssp->sda, cpu); in init_srcu_struct_nodes()
220 sdp->mynode = &snp_first[cpu / levelspread[level]]; in init_srcu_struct_nodes()
221 for (snp = sdp->mynode; snp != NULL; snp = snp->srcu_parent) { in init_srcu_struct_nodes()
226 sdp->grpmask = 1UL << (cpu - sdp->mynode->grplo); in init_srcu_struct_nodes()
367 static void spin_lock_irqsave_sdp_contention(struct srcu_data *sdp, unsigned long *flags) in spin_lock_irqsave_sdp_contention() argument
369 struct srcu_struct *ssp = sdp->ssp; in spin_lock_irqsave_sdp_contention()
371 if (spin_trylock_irqsave_rcu_node(sdp, *flags)) in spin_lock_irqsave_sdp_contention()
376 spin_lock_irqsave_rcu_node(sdp, *flags); in spin_lock_irqsave_sdp_contention()
655 struct srcu_data *sdp = per_cpu_ptr(ssp->sda, cpu); in cleanup_srcu_struct() local
657 del_timer_sync(&sdp->delay_work); in cleanup_srcu_struct()
658 flush_work(&sdp->work); in cleanup_srcu_struct()
659 if (WARN_ON(rcu_segcblist_n_cbs(&sdp->srcu_cblist))) in cleanup_srcu_struct()
690 struct srcu_data *sdp; in srcu_check_nmi_safety() local
694 sdp = raw_cpu_ptr(ssp->sda); in srcu_check_nmi_safety()
695 old_nmi_safe_mask = READ_ONCE(sdp->srcu_nmi_safety); in srcu_check_nmi_safety()
697 WRITE_ONCE(sdp->srcu_nmi_safety, nmi_safe_mask); in srcu_check_nmi_safety()
700 …WARN_ONCE(old_nmi_safe_mask != nmi_safe_mask, "CPU %d old state %d new state %d\n", sdp->cpu, old_… in srcu_check_nmi_safety()
743 struct srcu_data *sdp = raw_cpu_ptr(ssp->sda); in __srcu_read_lock_nmisafe() local
746 atomic_long_inc(&sdp->srcu_lock_count[idx]); in __srcu_read_lock_nmisafe()
759 struct srcu_data *sdp = raw_cpu_ptr(ssp->sda); in __srcu_read_unlock_nmisafe() local
762 atomic_long_inc(&sdp->srcu_unlock_count[idx]); in __srcu_read_unlock_nmisafe()
773 struct srcu_data *sdp; in srcu_gp_start() local
777 sdp = per_cpu_ptr(ssp->sda, get_boot_cpu_id()); in srcu_gp_start()
779 sdp = this_cpu_ptr(ssp->sda); in srcu_gp_start()
782 spin_lock_rcu_node(sdp); /* Interrupts already disabled. */ in srcu_gp_start()
783 rcu_segcblist_advance(&sdp->srcu_cblist, in srcu_gp_start()
785 WARN_ON_ONCE(!rcu_segcblist_segempty(&sdp->srcu_cblist, RCU_NEXT_TAIL)); in srcu_gp_start()
786 spin_unlock_rcu_node(sdp); /* Interrupts remain disabled. */ in srcu_gp_start()
798 struct srcu_data *sdp = container_of(t, struct srcu_data, delay_work); in srcu_delay_timer() local
800 queue_work_on(sdp->cpu, rcu_gp_wq, &sdp->work); in srcu_delay_timer()
803 static void srcu_queue_delayed_work_on(struct srcu_data *sdp, in srcu_queue_delayed_work_on() argument
807 queue_work_on(sdp->cpu, rcu_gp_wq, &sdp->work); in srcu_queue_delayed_work_on()
811 timer_reduce(&sdp->delay_work, jiffies + delay); in srcu_queue_delayed_work_on()
818 static void srcu_schedule_cbs_sdp(struct srcu_data *sdp, unsigned long delay) in srcu_schedule_cbs_sdp() argument
820 srcu_queue_delayed_work_on(sdp, delay); in srcu_schedule_cbs_sdp()
860 struct srcu_data *sdp; in srcu_gp_end() local
917 sdp = per_cpu_ptr(ssp->sda, cpu); in srcu_gp_end()
918 spin_lock_irqsave_rcu_node(sdp, flags); in srcu_gp_end()
919 if (ULONG_CMP_GE(gpseq, sdp->srcu_gp_seq_needed + 100)) in srcu_gp_end()
920 sdp->srcu_gp_seq_needed = gpseq; in srcu_gp_end()
921 if (ULONG_CMP_GE(gpseq, sdp->srcu_gp_seq_needed_exp + 100)) in srcu_gp_end()
922 sdp->srcu_gp_seq_needed_exp = gpseq; in srcu_gp_end()
923 spin_unlock_irqrestore_rcu_node(sdp, flags); in srcu_gp_end()
997 static void srcu_funnel_gp_start(struct srcu_struct *ssp, struct srcu_data *sdp, in srcu_funnel_gp_start() argument
1001 int idx = rcu_seq_ctr(s) % ARRAY_SIZE(sdp->mynode->srcu_have_cbs); in srcu_funnel_gp_start()
1012 snp_leaf = sdp->mynode; in srcu_funnel_gp_start()
1023 snp->srcu_data_have_cbs[idx] |= sdp->grpmask; in srcu_funnel_gp_start()
1026 srcu_schedule_cbs_sdp(sdp, do_norm ? SRCU_INTERVAL : 0); in srcu_funnel_gp_start()
1035 snp->srcu_data_have_cbs[idx] |= sdp->grpmask; in srcu_funnel_gp_start()
1169 struct srcu_data *sdp; in srcu_might_be_idle() local
1175 sdp = raw_cpu_ptr(ssp->sda); in srcu_might_be_idle()
1176 spin_lock_irqsave_rcu_node(sdp, flags); in srcu_might_be_idle()
1177 if (rcu_segcblist_pend_cbs(&sdp->srcu_cblist)) { in srcu_might_be_idle()
1178 spin_unlock_irqrestore_rcu_node(sdp, flags); in srcu_might_be_idle()
1181 spin_unlock_irqrestore_rcu_node(sdp, flags); in srcu_might_be_idle()
1225 struct srcu_data *sdp; in srcu_gp_start_if_needed() local
1238 sdp = per_cpu_ptr(ssp->sda, get_boot_cpu_id()); in srcu_gp_start_if_needed()
1240 sdp = raw_cpu_ptr(ssp->sda); in srcu_gp_start_if_needed()
1241 spin_lock_irqsave_sdp_contention(sdp, &flags); in srcu_gp_start_if_needed()
1243 rcu_segcblist_enqueue(&sdp->srcu_cblist, rhp); in srcu_gp_start_if_needed()
1272 rcu_segcblist_advance(&sdp->srcu_cblist, in srcu_gp_start_if_needed()
1274 WARN_ON_ONCE(!rcu_segcblist_accelerate(&sdp->srcu_cblist, s) && rhp); in srcu_gp_start_if_needed()
1275 if (ULONG_CMP_LT(sdp->srcu_gp_seq_needed, s)) { in srcu_gp_start_if_needed()
1276 sdp->srcu_gp_seq_needed = s; in srcu_gp_start_if_needed()
1279 if (!do_norm && ULONG_CMP_LT(sdp->srcu_gp_seq_needed_exp, s)) { in srcu_gp_start_if_needed()
1280 sdp->srcu_gp_seq_needed_exp = s; in srcu_gp_start_if_needed()
1283 spin_unlock_irqrestore_rcu_node(sdp, flags); in srcu_gp_start_if_needed()
1289 sdp_mynode = sdp->mynode; in srcu_gp_start_if_needed()
1292 srcu_funnel_gp_start(ssp, sdp, s, do_norm); in srcu_gp_start_if_needed()
1547 struct srcu_data *sdp; in srcu_barrier_cb() local
1550 sdp = container_of(rhp, struct srcu_data, srcu_barrier_head); in srcu_barrier_cb()
1551 ssp = sdp->ssp; in srcu_barrier_cb()
1564 static void srcu_barrier_one_cpu(struct srcu_struct *ssp, struct srcu_data *sdp) in srcu_barrier_one_cpu() argument
1566 spin_lock_irq_rcu_node(sdp); in srcu_barrier_one_cpu()
1568 sdp->srcu_barrier_head.func = srcu_barrier_cb; in srcu_barrier_one_cpu()
1569 debug_rcu_head_queue(&sdp->srcu_barrier_head); in srcu_barrier_one_cpu()
1570 if (!rcu_segcblist_entrain(&sdp->srcu_cblist, in srcu_barrier_one_cpu()
1571 &sdp->srcu_barrier_head)) { in srcu_barrier_one_cpu()
1572 debug_rcu_head_unqueue(&sdp->srcu_barrier_head); in srcu_barrier_one_cpu()
1575 spin_unlock_irq_rcu_node(sdp); in srcu_barrier_one_cpu()
1713 struct srcu_data *sdp; in srcu_invoke_callbacks() local
1716 sdp = container_of(work, struct srcu_data, work); in srcu_invoke_callbacks()
1718 ssp = sdp->ssp; in srcu_invoke_callbacks()
1720 spin_lock_irq_rcu_node(sdp); in srcu_invoke_callbacks()
1721 WARN_ON_ONCE(!rcu_segcblist_segempty(&sdp->srcu_cblist, RCU_NEXT_TAIL)); in srcu_invoke_callbacks()
1722 rcu_segcblist_advance(&sdp->srcu_cblist, in srcu_invoke_callbacks()
1724 if (sdp->srcu_cblist_invoking || in srcu_invoke_callbacks()
1725 !rcu_segcblist_ready_cbs(&sdp->srcu_cblist)) { in srcu_invoke_callbacks()
1726 spin_unlock_irq_rcu_node(sdp); in srcu_invoke_callbacks()
1731 sdp->srcu_cblist_invoking = true; in srcu_invoke_callbacks()
1732 rcu_segcblist_extract_done_cbs(&sdp->srcu_cblist, &ready_cbs); in srcu_invoke_callbacks()
1734 spin_unlock_irq_rcu_node(sdp); in srcu_invoke_callbacks()
1748 spin_lock_irq_rcu_node(sdp); in srcu_invoke_callbacks()
1749 rcu_segcblist_add_len(&sdp->srcu_cblist, -len); in srcu_invoke_callbacks()
1750 sdp->srcu_cblist_invoking = false; in srcu_invoke_callbacks()
1751 more = rcu_segcblist_ready_cbs(&sdp->srcu_cblist); in srcu_invoke_callbacks()
1752 spin_unlock_irq_rcu_node(sdp); in srcu_invoke_callbacks()
1754 srcu_schedule_cbs_sdp(sdp, 0); in srcu_invoke_callbacks()
1859 struct srcu_data *sdp; in srcu_torture_stats_print() local
1861 sdp = per_cpu_ptr(ssp->sda, cpu); in srcu_torture_stats_print()
1862 u0 = data_race(atomic_long_read(&sdp->srcu_unlock_count[!idx])); in srcu_torture_stats_print()
1863 u1 = data_race(atomic_long_read(&sdp->srcu_unlock_count[idx])); in srcu_torture_stats_print()
1871 l0 = data_race(atomic_long_read(&sdp->srcu_lock_count[!idx])); in srcu_torture_stats_print()
1872 l1 = data_race(atomic_long_read(&sdp->srcu_lock_count[idx])); in srcu_torture_stats_print()
1878 "C."[rcu_segcblist_empty(&sdp->srcu_cblist)]); in srcu_torture_stats_print()