diff options
| -rw-r--r-- | include/trace/events/rcu.h | 13 | ||||
| -rw-r--r-- | kernel/rcu/tree.c | 43 | ||||
| -rw-r--r-- | kernel/rcu/tree_plugin.h | 2 |
3 files changed, 29 insertions, 29 deletions
diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h index 5936aac357ab..cd229e82ec8b 100644 --- a/include/trace/events/rcu.h +++ b/include/trace/events/rcu.h | |||
| @@ -52,6 +52,7 @@ TRACE_EVENT(rcu_utilization, | |||
| 52 | * "cpuqs": CPU passes through a quiescent state. | 52 | * "cpuqs": CPU passes through a quiescent state. |
| 53 | * "cpuonl": CPU comes online. | 53 | * "cpuonl": CPU comes online. |
| 54 | * "cpuofl": CPU goes offline. | 54 | * "cpuofl": CPU goes offline. |
| 55 | * "cpuofl-bgp": CPU goes offline while blocking a grace period. | ||
| 55 | * "reqwait": GP kthread sleeps waiting for grace-period request. | 56 | * "reqwait": GP kthread sleeps waiting for grace-period request. |
| 56 | * "reqwaitsig": GP kthread awakened by signal from reqwait state. | 57 | * "reqwaitsig": GP kthread awakened by signal from reqwait state. |
| 57 | * "fqswait": GP kthread waiting until time to force quiescent states. | 58 | * "fqswait": GP kthread waiting until time to force quiescent states. |
| @@ -63,24 +64,24 @@ TRACE_EVENT(rcu_utilization, | |||
| 63 | */ | 64 | */ |
| 64 | TRACE_EVENT(rcu_grace_period, | 65 | TRACE_EVENT(rcu_grace_period, |
| 65 | 66 | ||
| 66 | TP_PROTO(const char *rcuname, unsigned long gpnum, const char *gpevent), | 67 | TP_PROTO(const char *rcuname, unsigned long gp_seq, const char *gpevent), |
| 67 | 68 | ||
| 68 | TP_ARGS(rcuname, gpnum, gpevent), | 69 | TP_ARGS(rcuname, gp_seq, gpevent), |
| 69 | 70 | ||
| 70 | TP_STRUCT__entry( | 71 | TP_STRUCT__entry( |
| 71 | __field(const char *, rcuname) | 72 | __field(const char *, rcuname) |
| 72 | __field(unsigned long, gpnum) | 73 | __field(unsigned long, gp_seq) |
| 73 | __field(const char *, gpevent) | 74 | __field(const char *, gpevent) |
| 74 | ), | 75 | ), |
| 75 | 76 | ||
| 76 | TP_fast_assign( | 77 | TP_fast_assign( |
| 77 | __entry->rcuname = rcuname; | 78 | __entry->rcuname = rcuname; |
| 78 | __entry->gpnum = gpnum; | 79 | __entry->gp_seq = gp_seq; |
| 79 | __entry->gpevent = gpevent; | 80 | __entry->gpevent = gpevent; |
| 80 | ), | 81 | ), |
| 81 | 82 | ||
| 82 | TP_printk("%s %lu %s", | 83 | TP_printk("%s %lu %s", |
| 83 | __entry->rcuname, __entry->gpnum, __entry->gpevent) | 84 | __entry->rcuname, __entry->gp_seq, __entry->gpevent) |
| 84 | ); | 85 | ); |
| 85 | 86 | ||
| 86 | /* | 87 | /* |
| @@ -753,7 +754,7 @@ TRACE_EVENT(rcu_barrier, | |||
| 753 | 754 | ||
| 754 | #else /* #ifdef CONFIG_RCU_TRACE */ | 755 | #else /* #ifdef CONFIG_RCU_TRACE */ |
| 755 | 756 | ||
| 756 | #define trace_rcu_grace_period(rcuname, gpnum, gpevent) do { } while (0) | 757 | #define trace_rcu_grace_period(rcuname, gp_seq, gpevent) do { } while (0) |
| 757 | #define trace_rcu_future_grace_period(rcuname, gpnum, completed, c, \ | 758 | #define trace_rcu_future_grace_period(rcuname, gpnum, completed, c, \ |
| 758 | level, grplo, grphi, event) \ | 759 | level, grplo, grphi, event) \ |
| 759 | do { } while (0) | 760 | do { } while (0) |
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 4826598867c3..7ce85ad39af6 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c | |||
| @@ -234,7 +234,7 @@ void rcu_sched_qs(void) | |||
| 234 | if (!__this_cpu_read(rcu_sched_data.cpu_no_qs.s)) | 234 | if (!__this_cpu_read(rcu_sched_data.cpu_no_qs.s)) |
| 235 | return; | 235 | return; |
| 236 | trace_rcu_grace_period(TPS("rcu_sched"), | 236 | trace_rcu_grace_period(TPS("rcu_sched"), |
| 237 | __this_cpu_read(rcu_sched_data.gpnum), | 237 | __this_cpu_read(rcu_sched_data.gp_seq), |
| 238 | TPS("cpuqs")); | 238 | TPS("cpuqs")); |
| 239 | __this_cpu_write(rcu_sched_data.cpu_no_qs.b.norm, false); | 239 | __this_cpu_write(rcu_sched_data.cpu_no_qs.b.norm, false); |
| 240 | if (!__this_cpu_read(rcu_sched_data.cpu_no_qs.b.exp)) | 240 | if (!__this_cpu_read(rcu_sched_data.cpu_no_qs.b.exp)) |
| @@ -249,7 +249,7 @@ void rcu_bh_qs(void) | |||
| 249 | RCU_LOCKDEP_WARN(preemptible(), "rcu_bh_qs() invoked with preemption enabled!!!"); | 249 | RCU_LOCKDEP_WARN(preemptible(), "rcu_bh_qs() invoked with preemption enabled!!!"); |
| 250 | if (__this_cpu_read(rcu_bh_data.cpu_no_qs.s)) { | 250 | if (__this_cpu_read(rcu_bh_data.cpu_no_qs.s)) { |
| 251 | trace_rcu_grace_period(TPS("rcu_bh"), | 251 | trace_rcu_grace_period(TPS("rcu_bh"), |
| 252 | __this_cpu_read(rcu_bh_data.gpnum), | 252 | __this_cpu_read(rcu_bh_data.gp_seq), |
| 253 | TPS("cpuqs")); | 253 | TPS("cpuqs")); |
| 254 | __this_cpu_write(rcu_bh_data.cpu_no_qs.b.norm, false); | 254 | __this_cpu_write(rcu_bh_data.cpu_no_qs.b.norm, false); |
| 255 | } | 255 | } |
| @@ -1615,7 +1615,7 @@ static bool rcu_start_this_gp(struct rcu_node *rnp, struct rcu_data *rdp, | |||
| 1615 | trace_rcu_this_gp(rnp_root, rdp, c, TPS("NoGPkthread")); | 1615 | trace_rcu_this_gp(rnp_root, rdp, c, TPS("NoGPkthread")); |
| 1616 | goto unlock_out; | 1616 | goto unlock_out; |
| 1617 | } | 1617 | } |
| 1618 | trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gpnum), TPS("newreq")); | 1618 | trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gp_seq), TPS("newreq")); |
| 1619 | ret = true; /* Caller must wake GP kthread. */ | 1619 | ret = true; /* Caller must wake GP kthread. */ |
| 1620 | unlock_out: | 1620 | unlock_out: |
| 1621 | /* Push furthest requested GP to leaf node and rcu_data structure. */ | 1621 | /* Push furthest requested GP to leaf node and rcu_data structure. */ |
| @@ -1702,9 +1702,9 @@ static bool rcu_accelerate_cbs(struct rcu_state *rsp, struct rcu_node *rnp, | |||
| 1702 | 1702 | ||
| 1703 | /* Trace depending on how much we were able to accelerate. */ | 1703 | /* Trace depending on how much we were able to accelerate. */ |
| 1704 | if (rcu_segcblist_restempty(&rdp->cblist, RCU_WAIT_TAIL)) | 1704 | if (rcu_segcblist_restempty(&rdp->cblist, RCU_WAIT_TAIL)) |
| 1705 | trace_rcu_grace_period(rsp->name, rdp->gpnum, TPS("AccWaitCB")); | 1705 | trace_rcu_grace_period(rsp->name, rdp->gp_seq, TPS("AccWaitCB")); |
| 1706 | else | 1706 | else |
| 1707 | trace_rcu_grace_period(rsp->name, rdp->gpnum, TPS("AccReadyCB")); | 1707 | trace_rcu_grace_period(rsp->name, rdp->gp_seq, TPS("AccReadyCB")); |
| 1708 | return ret; | 1708 | return ret; |
| 1709 | } | 1709 | } |
| 1710 | 1710 | ||
| @@ -1774,7 +1774,7 @@ static bool __note_gp_changes(struct rcu_state *rsp, struct rcu_node *rnp, | |||
| 1774 | * go looking for one. | 1774 | * go looking for one. |
| 1775 | */ | 1775 | */ |
| 1776 | rdp->gpnum = rnp->gpnum; | 1776 | rdp->gpnum = rnp->gpnum; |
| 1777 | trace_rcu_grace_period(rsp->name, rdp->gpnum, TPS("cpustart")); | 1777 | trace_rcu_grace_period(rsp->name, rdp->gp_seq, TPS("cpustart")); |
| 1778 | need_gp = !!(rnp->qsmask & rdp->grpmask); | 1778 | need_gp = !!(rnp->qsmask & rdp->grpmask); |
| 1779 | rdp->cpu_no_qs.b.norm = need_gp; | 1779 | rdp->cpu_no_qs.b.norm = need_gp; |
| 1780 | rdp->rcu_qs_ctr_snap = __this_cpu_read(rcu_dynticks.rcu_qs_ctr); | 1780 | rdp->rcu_qs_ctr_snap = __this_cpu_read(rcu_dynticks.rcu_qs_ctr); |
| @@ -1851,7 +1851,7 @@ static bool rcu_gp_init(struct rcu_state *rsp) | |||
| 1851 | rcu_seq_start(&rsp->gp_seq); | 1851 | rcu_seq_start(&rsp->gp_seq); |
| 1852 | if (WARN_ON_ONCE(((rnp->completed << RCU_SEQ_CTR_SHIFT) >> RCU_SEQ_CTR_SHIFT) != rcu_seq_ctr(rnp->gp_seq))) /* Catch any ->completed/->gp_seq mismatches. */ | 1852 | if (WARN_ON_ONCE(((rnp->completed << RCU_SEQ_CTR_SHIFT) >> RCU_SEQ_CTR_SHIFT) != rcu_seq_ctr(rnp->gp_seq))) /* Catch any ->completed/->gp_seq mismatches. */ |
| 1853 | pr_info("%s ->completed: %#lx (%#lx) ->gp_seq %#lx (%#lx)\n", __func__, rnp->completed, (rnp->completed << RCU_SEQ_CTR_SHIFT) >> RCU_SEQ_CTR_SHIFT, rnp->gp_seq, rcu_seq_ctr(rnp->gp_seq)); | 1853 | pr_info("%s ->completed: %#lx (%#lx) ->gp_seq %#lx (%#lx)\n", __func__, rnp->completed, (rnp->completed << RCU_SEQ_CTR_SHIFT) >> RCU_SEQ_CTR_SHIFT, rnp->gp_seq, rcu_seq_ctr(rnp->gp_seq)); |
| 1854 | trace_rcu_grace_period(rsp->name, rsp->gpnum, TPS("start")); | 1854 | trace_rcu_grace_period(rsp->name, rsp->gp_seq, TPS("start")); |
| 1855 | raw_spin_unlock_irq_rcu_node(rnp); | 1855 | raw_spin_unlock_irq_rcu_node(rnp); |
| 1856 | 1856 | ||
| 1857 | /* | 1857 | /* |
| @@ -1928,7 +1928,7 @@ static bool rcu_gp_init(struct rcu_state *rsp) | |||
| 1928 | if (rnp == rdp->mynode) | 1928 | if (rnp == rdp->mynode) |
| 1929 | (void)__note_gp_changes(rsp, rnp, rdp); | 1929 | (void)__note_gp_changes(rsp, rnp, rdp); |
| 1930 | rcu_preempt_boost_start_gp(rnp); | 1930 | rcu_preempt_boost_start_gp(rnp); |
| 1931 | trace_rcu_grace_period_init(rsp->name, rnp->gpnum, | 1931 | trace_rcu_grace_period_init(rsp->name, rnp->gp_seq, |
| 1932 | rnp->level, rnp->grplo, | 1932 | rnp->level, rnp->grplo, |
| 1933 | rnp->grphi, rnp->qsmask); | 1933 | rnp->grphi, rnp->qsmask); |
| 1934 | raw_spin_unlock_irq_rcu_node(rnp); | 1934 | raw_spin_unlock_irq_rcu_node(rnp); |
| @@ -2048,7 +2048,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) | |||
| 2048 | /* Declare grace period done. */ | 2048 | /* Declare grace period done. */ |
| 2049 | WRITE_ONCE(rsp->completed, rsp->gpnum); | 2049 | WRITE_ONCE(rsp->completed, rsp->gpnum); |
| 2050 | rcu_seq_end(&rsp->gp_seq); | 2050 | rcu_seq_end(&rsp->gp_seq); |
| 2051 | trace_rcu_grace_period(rsp->name, rsp->completed, TPS("end")); | 2051 | trace_rcu_grace_period(rsp->name, rsp->gp_seq, TPS("end")); |
| 2052 | rsp->gp_state = RCU_GP_IDLE; | 2052 | rsp->gp_state = RCU_GP_IDLE; |
| 2053 | /* Check for GP requests since above loop. */ | 2053 | /* Check for GP requests since above loop. */ |
| 2054 | rdp = this_cpu_ptr(rsp->rda); | 2054 | rdp = this_cpu_ptr(rsp->rda); |
| @@ -2061,7 +2061,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) | |||
| 2061 | if (!rcu_accelerate_cbs(rsp, rnp, rdp) && needgp) { | 2061 | if (!rcu_accelerate_cbs(rsp, rnp, rdp) && needgp) { |
| 2062 | WRITE_ONCE(rsp->gp_flags, RCU_GP_FLAG_INIT); | 2062 | WRITE_ONCE(rsp->gp_flags, RCU_GP_FLAG_INIT); |
| 2063 | rsp->gp_req_activity = jiffies; | 2063 | rsp->gp_req_activity = jiffies; |
| 2064 | trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gpnum), | 2064 | trace_rcu_grace_period(rsp->name, READ_ONCE(rsp->gp_seq), |
| 2065 | TPS("newreq")); | 2065 | TPS("newreq")); |
| 2066 | } else { | 2066 | } else { |
| 2067 | WRITE_ONCE(rsp->gp_flags, rsp->gp_flags & RCU_GP_FLAG_INIT); | 2067 | WRITE_ONCE(rsp->gp_flags, rsp->gp_flags & RCU_GP_FLAG_INIT); |
| @@ -2087,7 +2087,7 @@ static int __noreturn rcu_gp_kthread(void *arg) | |||
| 2087 | /* Handle grace-period start. */ | 2087 | /* Handle grace-period start. */ |
| 2088 | for (;;) { | 2088 | for (;;) { |
| 2089 | trace_rcu_grace_period(rsp->name, | 2089 | trace_rcu_grace_period(rsp->name, |
| 2090 | READ_ONCE(rsp->gpnum), | 2090 | READ_ONCE(rsp->gp_seq), |
| 2091 | TPS("reqwait")); | 2091 | TPS("reqwait")); |
| 2092 | rsp->gp_state = RCU_GP_WAIT_GPS; | 2092 | rsp->gp_state = RCU_GP_WAIT_GPS; |
| 2093 | swait_event_idle(rsp->gp_wq, READ_ONCE(rsp->gp_flags) & | 2093 | swait_event_idle(rsp->gp_wq, READ_ONCE(rsp->gp_flags) & |
| @@ -2100,7 +2100,7 @@ static int __noreturn rcu_gp_kthread(void *arg) | |||
| 2100 | WRITE_ONCE(rsp->gp_activity, jiffies); | 2100 | WRITE_ONCE(rsp->gp_activity, jiffies); |
| 2101 | WARN_ON(signal_pending(current)); | 2101 | WARN_ON(signal_pending(current)); |
| 2102 | trace_rcu_grace_period(rsp->name, | 2102 | trace_rcu_grace_period(rsp->name, |
| 2103 | READ_ONCE(rsp->gpnum), | 2103 | READ_ONCE(rsp->gp_seq), |
| 2104 | TPS("reqwaitsig")); | 2104 | TPS("reqwaitsig")); |
| 2105 | } | 2105 | } |
| 2106 | 2106 | ||
| @@ -2119,7 +2119,7 @@ static int __noreturn rcu_gp_kthread(void *arg) | |||
| 2119 | jiffies + 3 * j); | 2119 | jiffies + 3 * j); |
| 2120 | } | 2120 | } |
| 2121 | trace_rcu_grace_period(rsp->name, | 2121 | trace_rcu_grace_period(rsp->name, |
| 2122 | READ_ONCE(rsp->gpnum), | 2122 | READ_ONCE(rsp->gp_seq), |
| 2123 | TPS("fqswait")); | 2123 | TPS("fqswait")); |
| 2124 | rsp->gp_state = RCU_GP_WAIT_FQS; | 2124 | rsp->gp_state = RCU_GP_WAIT_FQS; |
| 2125 | ret = swait_event_idle_timeout(rsp->gp_wq, | 2125 | ret = swait_event_idle_timeout(rsp->gp_wq, |
| @@ -2134,12 +2134,12 @@ static int __noreturn rcu_gp_kthread(void *arg) | |||
| 2134 | if (ULONG_CMP_GE(jiffies, rsp->jiffies_force_qs) || | 2134 | if (ULONG_CMP_GE(jiffies, rsp->jiffies_force_qs) || |
| 2135 | (gf & RCU_GP_FLAG_FQS)) { | 2135 | (gf & RCU_GP_FLAG_FQS)) { |
| 2136 | trace_rcu_grace_period(rsp->name, | 2136 | trace_rcu_grace_period(rsp->name, |
| 2137 | READ_ONCE(rsp->gpnum), | 2137 | READ_ONCE(rsp->gp_seq), |
| 2138 | TPS("fqsstart")); | 2138 | TPS("fqsstart")); |
| 2139 | rcu_gp_fqs(rsp, first_gp_fqs); | 2139 | rcu_gp_fqs(rsp, first_gp_fqs); |
| 2140 | first_gp_fqs = false; | 2140 | first_gp_fqs = false; |
| 2141 | trace_rcu_grace_period(rsp->name, | 2141 | trace_rcu_grace_period(rsp->name, |
| 2142 | READ_ONCE(rsp->gpnum), | 2142 | READ_ONCE(rsp->gp_seq), |
| 2143 | TPS("fqsend")); | 2143 | TPS("fqsend")); |
| 2144 | cond_resched_tasks_rcu_qs(); | 2144 | cond_resched_tasks_rcu_qs(); |
| 2145 | WRITE_ONCE(rsp->gp_activity, jiffies); | 2145 | WRITE_ONCE(rsp->gp_activity, jiffies); |
| @@ -2158,7 +2158,7 @@ static int __noreturn rcu_gp_kthread(void *arg) | |||
| 2158 | WRITE_ONCE(rsp->gp_activity, jiffies); | 2158 | WRITE_ONCE(rsp->gp_activity, jiffies); |
| 2159 | WARN_ON(signal_pending(current)); | 2159 | WARN_ON(signal_pending(current)); |
| 2160 | trace_rcu_grace_period(rsp->name, | 2160 | trace_rcu_grace_period(rsp->name, |
| 2161 | READ_ONCE(rsp->gpnum), | 2161 | READ_ONCE(rsp->gp_seq), |
| 2162 | TPS("fqswaitsig")); | 2162 | TPS("fqswaitsig")); |
| 2163 | ret = 1; /* Keep old FQS timing. */ | 2163 | ret = 1; /* Keep old FQS timing. */ |
| 2164 | j = jiffies; | 2164 | j = jiffies; |
| @@ -2388,17 +2388,16 @@ rcu_check_quiescent_state(struct rcu_state *rsp, struct rcu_data *rdp) | |||
| 2388 | */ | 2388 | */ |
| 2389 | static void rcu_cleanup_dying_cpu(struct rcu_state *rsp) | 2389 | static void rcu_cleanup_dying_cpu(struct rcu_state *rsp) |
| 2390 | { | 2390 | { |
| 2391 | RCU_TRACE(unsigned long mask;) | 2391 | RCU_TRACE(bool blkd;) |
| 2392 | RCU_TRACE(struct rcu_data *rdp = this_cpu_ptr(rsp->rda);) | 2392 | RCU_TRACE(struct rcu_data *rdp = this_cpu_ptr(rsp->rda);) |
| 2393 | RCU_TRACE(struct rcu_node *rnp = rdp->mynode;) | 2393 | RCU_TRACE(struct rcu_node *rnp = rdp->mynode;) |
| 2394 | 2394 | ||
| 2395 | if (!IS_ENABLED(CONFIG_HOTPLUG_CPU)) | 2395 | if (!IS_ENABLED(CONFIG_HOTPLUG_CPU)) |
| 2396 | return; | 2396 | return; |
| 2397 | 2397 | ||
| 2398 | RCU_TRACE(mask = rdp->grpmask;) | 2398 | RCU_TRACE(blkd = !!(rnp->qsmask & rdp->grpmask);) |
| 2399 | trace_rcu_grace_period(rsp->name, | 2399 | trace_rcu_grace_period(rsp->name, rnp->gp_seq, |
| 2400 | rnp->gpnum + 1 - !!(rnp->qsmask & mask), | 2400 | blkd ? TPS("cpuofl") : TPS("cpuofl-bgp")); |
| 2401 | TPS("cpuofl")); | ||
| 2402 | } | 2401 | } |
| 2403 | 2402 | ||
| 2404 | /* | 2403 | /* |
| @@ -3538,7 +3537,7 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp) | |||
| 3538 | rdp->core_needs_qs = false; | 3537 | rdp->core_needs_qs = false; |
| 3539 | rdp->rcu_iw_pending = false; | 3538 | rdp->rcu_iw_pending = false; |
| 3540 | rdp->rcu_iw_gp_seq = rnp->gp_seq - 1; | 3539 | rdp->rcu_iw_gp_seq = rnp->gp_seq - 1; |
| 3541 | trace_rcu_grace_period(rsp->name, rdp->gpnum, TPS("cpuonl")); | 3540 | trace_rcu_grace_period(rsp->name, rdp->gp_seq, TPS("cpuonl")); |
| 3542 | raw_spin_unlock_irqrestore_rcu_node(rnp, flags); | 3541 | raw_spin_unlock_irqrestore_rcu_node(rnp, flags); |
| 3543 | } | 3542 | } |
| 3544 | 3543 | ||
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h index ca73931f7b30..aca9d187c509 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h | |||
| @@ -301,7 +301,7 @@ static void rcu_preempt_qs(void) | |||
| 301 | RCU_LOCKDEP_WARN(preemptible(), "rcu_preempt_qs() invoked with preemption enabled!!!\n"); | 301 | RCU_LOCKDEP_WARN(preemptible(), "rcu_preempt_qs() invoked with preemption enabled!!!\n"); |
| 302 | if (__this_cpu_read(rcu_data_p->cpu_no_qs.s)) { | 302 | if (__this_cpu_read(rcu_data_p->cpu_no_qs.s)) { |
| 303 | trace_rcu_grace_period(TPS("rcu_preempt"), | 303 | trace_rcu_grace_period(TPS("rcu_preempt"), |
| 304 | __this_cpu_read(rcu_data_p->gpnum), | 304 | __this_cpu_read(rcu_data_p->gp_seq), |
| 305 | TPS("cpuqs")); | 305 | TPS("cpuqs")); |
| 306 | __this_cpu_write(rcu_data_p->cpu_no_qs.b.norm, false); | 306 | __this_cpu_write(rcu_data_p->cpu_no_qs.b.norm, false); |
| 307 | barrier(); /* Coordinate with rcu_preempt_check_callbacks(). */ | 307 | barrier(); /* Coordinate with rcu_preempt_check_callbacks(). */ |
