diff options
Diffstat (limited to 'kernel/rcu/tree.h')
| -rw-r--r-- | kernel/rcu/tree.h | 12 | 
1 files changed, 8 insertions, 4 deletions
| diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index d4a97e40ea9c..fcb5d696eb17 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h @@ -263,14 +263,16 @@ struct rcu_data {  	unsigned long last_fqs_resched;	/* Time of last rcu_resched(). */  	unsigned long last_sched_clock;	/* Jiffies of last rcu_sched_clock_irq(). */ +	long lazy_len;			/* Length of buffered lazy callbacks. */  	int cpu;  };  /* Values for nocb_defer_wakeup field in struct rcu_data. */  #define RCU_NOCB_WAKE_NOT	0  #define RCU_NOCB_WAKE_BYPASS	1 -#define RCU_NOCB_WAKE		2 -#define RCU_NOCB_WAKE_FORCE	3 +#define RCU_NOCB_WAKE_LAZY	2 +#define RCU_NOCB_WAKE		3 +#define RCU_NOCB_WAKE_FORCE	4  #define RCU_JIFFIES_TILL_FORCE_QS (1 + (HZ > 250) + (HZ > 500))  					/* For jiffies_till_first_fqs and */ @@ -439,10 +441,12 @@ static void zero_cpu_stall_ticks(struct rcu_data *rdp);  static struct swait_queue_head *rcu_nocb_gp_get(struct rcu_node *rnp);  static void rcu_nocb_gp_cleanup(struct swait_queue_head *sq);  static void rcu_init_one_nocb(struct rcu_node *rnp); +static bool wake_nocb_gp(struct rcu_data *rdp, bool force);  static bool rcu_nocb_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, -				  unsigned long j); +				  unsigned long j, bool lazy);  static bool rcu_nocb_try_bypass(struct rcu_data *rdp, struct rcu_head *rhp, -				bool *was_alldone, unsigned long flags); +				bool *was_alldone, unsigned long flags, +				bool lazy);  static void __call_rcu_nocb_wake(struct rcu_data *rdp, bool was_empty,  				 unsigned long flags);  static int rcu_nocb_need_deferred_wakeup(struct rcu_data *rdp, int level); |