diff options
Diffstat (limited to 'kernel/rcu/tree.h')
| -rw-r--r-- | kernel/rcu/tree.h | 19 | 
1 files changed, 19 insertions, 0 deletions
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index fcb5d696eb17..192536916f9a 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h @@ -158,6 +158,23 @@ union rcu_noqs {  	u16 s; /* Set of bits, aggregate OR here. */  }; +/* + * Record the snapshot of the core stats at half of the first RCU stall timeout. + * The member gp_seq is used to ensure that all members are updated only once + * during the sampling period. The snapshot is taken only if this gp_seq is not + * equal to rdp->gp_seq. + */ +struct rcu_snap_record { +	unsigned long	gp_seq;		/* Track rdp->gp_seq counter */ +	u64		cputime_irq;	/* Accumulated cputime of hard irqs */ +	u64		cputime_softirq;/* Accumulated cputime of soft irqs */ +	u64		cputime_system; /* Accumulated cputime of kernel tasks */ +	unsigned long	nr_hardirqs;	/* Accumulated number of hard irqs */ +	unsigned int	nr_softirqs;	/* Accumulated number of soft irqs */ +	unsigned long long nr_csw;	/* Accumulated number of task switches */ +	unsigned long   jiffies;	/* Track jiffies value */ +}; +  /* Per-CPU data for read-copy update. */  struct rcu_data {  	/* 1) quiescent-state and grace-period handling : */ @@ -262,6 +279,8 @@ struct rcu_data {  	short rcu_onl_gp_flags;		/* ->gp_flags at last online. */  	unsigned long last_fqs_resched;	/* Time of last rcu_resched(). */  	unsigned long last_sched_clock;	/* Jiffies of last rcu_sched_clock_irq(). */ +	struct rcu_snap_record snap_record; /* Snapshot of core stats at half of */ +					    /* the first RCU stall timeout */  	long lazy_len;			/* Length of buffered lazy callbacks. */  	int cpu;  |