The trace_rcu_this_gp() wrapper forwards only the rcu_node structure's fields and the requested grace-period sequence number to the rcu_future_grace_period tracepoint. Its rcu_data pointer parameter has no users, but every one of the ten call sites must nevertheless come up with an rcu_data pointer to pass in.
Remove the parameter and update all callers. This also allows rcu_future_gp_cleanup() to drop the local rcu_data pointer that existed solely to feed this trace call. No functional change. Signed-off-by: Joel Fernandes <[email protected]> --- kernel/rcu/tree.c | 23 ++++++++++------------- kernel/rcu/tree_nocb.h | 4 ++-- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 03a43d3d2616..ef553189ee24 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -986,8 +986,8 @@ static int rcu_watching_snap_recheck(struct rcu_data *rdp) } /* Trace-event wrapper function for trace_rcu_future_grace_period. */ -static void trace_rcu_this_gp(struct rcu_node *rnp, struct rcu_data *rdp, - unsigned long gp_seq_req, const char *s) +static void trace_rcu_this_gp(struct rcu_node *rnp, unsigned long gp_seq_req, + const char *s) { trace_rcu_future_grace_period(rcu_state.name, READ_ONCE(rnp->gp_seq), gp_seq_req, rnp->level, @@ -1026,7 +1026,7 @@ static bool rcu_start_this_gp(struct rcu_node *rnp_start, struct rcu_data *rdp, * Note that rnp_start->lock must not be released. */ raw_lockdep_assert_held_rcu_node(rnp_start); - trace_rcu_this_gp(rnp_start, rdp, gp_seq_req, TPS("Startleaf")); + trace_rcu_this_gp(rnp_start, gp_seq_req, TPS("Startleaf")); for (rnp = rnp_start; 1; rnp = rnp->parent) { if (rnp != rnp_start) raw_spin_lock_rcu_node(rnp); @@ -1034,8 +1034,7 @@ static bool rcu_start_this_gp(struct rcu_node *rnp_start, struct rcu_data *rdp, rcu_seq_started(&rnp->gp_seq, gp_seq_req) || (rnp != rnp_start && rcu_seq_state(rcu_seq_current(&rnp->gp_seq)))) { - trace_rcu_this_gp(rnp, rdp, gp_seq_req, - TPS("Prestarted")); + trace_rcu_this_gp(rnp, gp_seq_req, TPS("Prestarted")); goto unlock_out; } WRITE_ONCE(rnp->gp_seq_needed, gp_seq_req); @@ -1046,7 +1045,7 @@ static bool rcu_start_this_gp(struct rcu_node *rnp_start, struct rcu_data *rdp, * rcu_gp_cleanup() will see the marking. Bail to * reduce contention. */ - trace_rcu_this_gp(rnp_start, rdp, gp_seq_req, + trace_rcu_this_gp(rnp_start, gp_seq_req, TPS("Startedleaf")); goto unlock_out; } @@ -1058,14 +1057,14 @@ static bool rcu_start_this_gp(struct rcu_node *rnp_start, struct rcu_data *rdp, /* If GP already in progress, just leave, otherwise start one. */ if (rcu_gp_in_progress()) { - trace_rcu_this_gp(rnp, rdp, gp_seq_req, TPS("Startedleafroot")); + trace_rcu_this_gp(rnp, gp_seq_req, TPS("Startedleafroot")); goto unlock_out; } - trace_rcu_this_gp(rnp, rdp, gp_seq_req, TPS("Startedroot")); + trace_rcu_this_gp(rnp, gp_seq_req, TPS("Startedroot")); WRITE_ONCE(rcu_state.gp_flags, rcu_state.gp_flags | RCU_GP_FLAG_INIT); WRITE_ONCE(rcu_state.gp_req_activity, jiffies); if (!READ_ONCE(rcu_state.gp_kthread)) { - trace_rcu_this_gp(rnp, rdp, gp_seq_req, TPS("NoGPkthread")); + trace_rcu_this_gp(rnp, gp_seq_req, TPS("NoGPkthread")); goto unlock_out; } trace_rcu_grace_period(rcu_state.name, data_race(rcu_state.gp_seq), TPS("newreq")); @@ -1088,12 +1087,11 @@ static bool rcu_start_this_gp(struct rcu_node *rnp_start, struct rcu_data *rdp, static bool rcu_future_gp_cleanup(struct rcu_node *rnp) { bool needmore; - struct rcu_data *rdp = this_cpu_ptr(&rcu_data); needmore = ULONG_CMP_LT(rnp->gp_seq, rnp->gp_seq_needed); if (!needmore) rnp->gp_seq_needed = rnp->gp_seq; /* Avoid counter wrap. */ - trace_rcu_this_gp(rnp, rdp, rnp->gp_seq, + trace_rcu_this_gp(rnp, rnp->gp_seq, needmore ? TPS("CleanupMore") : TPS("Cleanup")); return needmore; } @@ -2252,8 +2250,7 @@ static noinline void rcu_gp_cleanup(void) /* Check for GP requests since above loop. */ rdp = this_cpu_ptr(&rcu_data); if (!needgp && ULONG_CMP_LT(rnp->gp_seq, rnp->gp_seq_needed)) { - trace_rcu_this_gp(rnp, rdp, rnp->gp_seq_needed, - TPS("CleanupMore")); + trace_rcu_this_gp(rnp, rnp->gp_seq_needed, TPS("CleanupMore")); needgp = true; } /* Advance CBs to reduce false positives below. */ diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index 373b877cf171..c4a5b4662b3a 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -802,12 +802,12 @@ static noinline_for_stack void nocb_gp_wait(struct rcu_data *my_rdp) nocb_gp_sleep(my_rdp, cpu); } else { rnp = my_rdp->mynode; - trace_rcu_this_gp(rnp, my_rdp, wait_gp_seq, TPS("StartWait")); + trace_rcu_this_gp(rnp, wait_gp_seq, TPS("StartWait")); swait_event_interruptible_exclusive( rnp->nocb_gp_wq[rcu_seq_ctr(wait_gp_seq) & 0x1], rcu_seq_done(&rnp->gp_seq, wait_gp_seq) || !READ_ONCE(my_rdp->nocb_gp_sleep)); - trace_rcu_this_gp(rnp, my_rdp, wait_gp_seq, TPS("EndWait")); + trace_rcu_this_gp(rnp, wait_gp_seq, TPS("EndWait")); } if (!rcu_nocb_poll) { -- 2.34.1

