mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
rcu: Add callbacks-invoked counters
This commit adds a count of the callbacks invoked to the per-CPU rcu_data structure. This count is printed by the show_rcu_gp_kthreads() that is invoked by rcutorture and the RCU CPU stall-warning code. It is also intended for use by drgn. Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
parent
abfce04148
commit
e816d56fad
@ -2443,6 +2443,7 @@ static void rcu_do_batch(struct rcu_data *rdp)
|
|||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
rcu_nocb_lock(rdp);
|
rcu_nocb_lock(rdp);
|
||||||
count = -rcl.len;
|
count = -rcl.len;
|
||||||
|
rdp->n_cbs_invoked += count;
|
||||||
trace_rcu_batch_end(rcu_state.name, count, !!rcl.head, need_resched(),
|
trace_rcu_batch_end(rcu_state.name, count, !!rcl.head, need_resched(),
|
||||||
is_idle_task(current), rcu_is_callbacks_kthread());
|
is_idle_task(current), rcu_is_callbacks_kthread());
|
||||||
|
|
||||||
|
@ -171,6 +171,7 @@ struct rcu_data {
|
|||||||
/* different grace periods. */
|
/* different grace periods. */
|
||||||
long qlen_last_fqs_check;
|
long qlen_last_fqs_check;
|
||||||
/* qlen at last check for QS forcing */
|
/* qlen at last check for QS forcing */
|
||||||
|
unsigned long n_cbs_invoked; /* # callbacks invoked since boot. */
|
||||||
unsigned long n_force_qs_snap;
|
unsigned long n_force_qs_snap;
|
||||||
/* did other CPU force QS recently? */
|
/* did other CPU force QS recently? */
|
||||||
long blimit; /* Upper limit on a processed batch */
|
long blimit; /* Upper limit on a processed batch */
|
||||||
|
@ -649,6 +649,7 @@ static void check_cpu_stall(struct rcu_data *rdp)
|
|||||||
*/
|
*/
|
||||||
void show_rcu_gp_kthreads(void)
|
void show_rcu_gp_kthreads(void)
|
||||||
{
|
{
|
||||||
|
unsigned long cbs = 0;
|
||||||
int cpu;
|
int cpu;
|
||||||
unsigned long j;
|
unsigned long j;
|
||||||
unsigned long ja;
|
unsigned long ja;
|
||||||
@ -690,9 +691,11 @@ void show_rcu_gp_kthreads(void)
|
|||||||
}
|
}
|
||||||
for_each_possible_cpu(cpu) {
|
for_each_possible_cpu(cpu) {
|
||||||
rdp = per_cpu_ptr(&rcu_data, cpu);
|
rdp = per_cpu_ptr(&rcu_data, cpu);
|
||||||
|
cbs += data_race(rdp->n_cbs_invoked);
|
||||||
if (rcu_segcblist_is_offloaded(&rdp->cblist))
|
if (rcu_segcblist_is_offloaded(&rdp->cblist))
|
||||||
show_rcu_nocb_state(rdp);
|
show_rcu_nocb_state(rdp);
|
||||||
}
|
}
|
||||||
|
pr_info("RCU callbacks invoked since boot: %lu\n", cbs);
|
||||||
show_rcu_tasks_gp_kthreads();
|
show_rcu_tasks_gp_kthreads();
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(show_rcu_gp_kthreads);
|
EXPORT_SYMBOL_GPL(show_rcu_gp_kthreads);
|
||||||
|
Loading…
Reference in New Issue
Block a user