diff options
Diffstat (limited to 'kernel/rcu/srcutiny.c')
| -rw-r--r-- | kernel/rcu/srcutiny.c | 120 | 
1 files changed, 60 insertions, 60 deletions
diff --git a/kernel/rcu/srcutiny.c b/kernel/rcu/srcutiny.c index b46e6683f8c9..32dfd6522548 100644 --- a/kernel/rcu/srcutiny.c +++ b/kernel/rcu/srcutiny.c @@ -37,30 +37,30 @@ int rcu_scheduler_active __read_mostly;  static LIST_HEAD(srcu_boot_list);  static bool srcu_init_done; -static int init_srcu_struct_fields(struct srcu_struct *sp) +static int init_srcu_struct_fields(struct srcu_struct *ssp)  { -	sp->srcu_lock_nesting[0] = 0; -	sp->srcu_lock_nesting[1] = 0; -	init_swait_queue_head(&sp->srcu_wq); -	sp->srcu_cb_head = NULL; -	sp->srcu_cb_tail = &sp->srcu_cb_head; -	sp->srcu_gp_running = false; -	sp->srcu_gp_waiting = false; -	sp->srcu_idx = 0; -	INIT_WORK(&sp->srcu_work, srcu_drive_gp); -	INIT_LIST_HEAD(&sp->srcu_work.entry); +	ssp->srcu_lock_nesting[0] = 0; +	ssp->srcu_lock_nesting[1] = 0; +	init_swait_queue_head(&ssp->srcu_wq); +	ssp->srcu_cb_head = NULL; +	ssp->srcu_cb_tail = &ssp->srcu_cb_head; +	ssp->srcu_gp_running = false; +	ssp->srcu_gp_waiting = false; +	ssp->srcu_idx = 0; +	INIT_WORK(&ssp->srcu_work, srcu_drive_gp); +	INIT_LIST_HEAD(&ssp->srcu_work.entry);  	return 0;  }  #ifdef CONFIG_DEBUG_LOCK_ALLOC -int __init_srcu_struct(struct srcu_struct *sp, const char *name, +int __init_srcu_struct(struct srcu_struct *ssp, const char *name,  		       struct lock_class_key *key)  {  	/* Don't re-initialize a lock while it is held. */ -	debug_check_no_locks_freed((void *)sp, sizeof(*sp)); -	lockdep_init_map(&sp->dep_map, name, key, 0); -	return init_srcu_struct_fields(sp); +	debug_check_no_locks_freed((void *)ssp, sizeof(*ssp)); +	lockdep_init_map(&ssp->dep_map, name, key, 0); +	return init_srcu_struct_fields(ssp);  }  EXPORT_SYMBOL_GPL(__init_srcu_struct); @@ -68,15 +68,15 @@ EXPORT_SYMBOL_GPL(__init_srcu_struct);  /*   * init_srcu_struct - initialize a sleep-RCU structure - * @sp: structure to initialize. + * @ssp: structure to initialize.   *   * Must invoke this on a given srcu_struct before passing that srcu_struct   * to any other function.  Each srcu_struct represents a separate domain   * of SRCU protection.   */ -int init_srcu_struct(struct srcu_struct *sp) +int init_srcu_struct(struct srcu_struct *ssp)  { -	return init_srcu_struct_fields(sp); +	return init_srcu_struct_fields(ssp);  }  EXPORT_SYMBOL_GPL(init_srcu_struct); @@ -84,22 +84,22 @@ EXPORT_SYMBOL_GPL(init_srcu_struct);  /*   * cleanup_srcu_struct - deconstruct a sleep-RCU structure - * @sp: structure to clean up. + * @ssp: structure to clean up.   *   * Must invoke this after you are finished using a given srcu_struct that   * was initialized via init_srcu_struct(), else you leak memory.   */ -void _cleanup_srcu_struct(struct srcu_struct *sp, bool quiesced) +void _cleanup_srcu_struct(struct srcu_struct *ssp, bool quiesced)  { -	WARN_ON(sp->srcu_lock_nesting[0] || sp->srcu_lock_nesting[1]); +	WARN_ON(ssp->srcu_lock_nesting[0] || ssp->srcu_lock_nesting[1]);  	if (quiesced) -		WARN_ON(work_pending(&sp->srcu_work)); +		WARN_ON(work_pending(&ssp->srcu_work));  	else -		flush_work(&sp->srcu_work); -	WARN_ON(sp->srcu_gp_running); -	WARN_ON(sp->srcu_gp_waiting); -	WARN_ON(sp->srcu_cb_head); -	WARN_ON(&sp->srcu_cb_head != sp->srcu_cb_tail); +		flush_work(&ssp->srcu_work); +	WARN_ON(ssp->srcu_gp_running); +	WARN_ON(ssp->srcu_gp_waiting); +	WARN_ON(ssp->srcu_cb_head); +	WARN_ON(&ssp->srcu_cb_head != ssp->srcu_cb_tail);  }  EXPORT_SYMBOL_GPL(_cleanup_srcu_struct); @@ -107,13 +107,13 @@ EXPORT_SYMBOL_GPL(_cleanup_srcu_struct);   * Removes the count for the old reader from the appropriate element of   * the srcu_struct.   */ -void __srcu_read_unlock(struct srcu_struct *sp, int idx) +void __srcu_read_unlock(struct srcu_struct *ssp, int idx)  { -	int newval = sp->srcu_lock_nesting[idx] - 1; +	int newval = ssp->srcu_lock_nesting[idx] - 1; -	WRITE_ONCE(sp->srcu_lock_nesting[idx], newval); -	if (!newval && READ_ONCE(sp->srcu_gp_waiting)) -		swake_up_one(&sp->srcu_wq); +	WRITE_ONCE(ssp->srcu_lock_nesting[idx], newval); +	if (!newval && READ_ONCE(ssp->srcu_gp_waiting)) +		swake_up_one(&ssp->srcu_wq);  }  EXPORT_SYMBOL_GPL(__srcu_read_unlock); @@ -127,24 +127,24 @@ void srcu_drive_gp(struct work_struct *wp)  	int idx;  	struct rcu_head *lh;  	struct rcu_head *rhp; -	struct srcu_struct *sp; +	struct srcu_struct *ssp; -	sp = container_of(wp, struct srcu_struct, srcu_work); -	if (sp->srcu_gp_running || !READ_ONCE(sp->srcu_cb_head)) +	ssp = container_of(wp, struct srcu_struct, srcu_work); +	if (ssp->srcu_gp_running || !READ_ONCE(ssp->srcu_cb_head))  		return; /* Already running or nothing to do. */  	/* Remove recently arrived callbacks and wait for readers. */ -	WRITE_ONCE(sp->srcu_gp_running, true); +	WRITE_ONCE(ssp->srcu_gp_running, true);  	local_irq_disable(); -	lh = sp->srcu_cb_head; -	sp->srcu_cb_head = NULL; -	sp->srcu_cb_tail = &sp->srcu_cb_head; +	lh = ssp->srcu_cb_head; +	ssp->srcu_cb_head = NULL; +	ssp->srcu_cb_tail = &ssp->srcu_cb_head;  	local_irq_enable(); -	idx = sp->srcu_idx; -	WRITE_ONCE(sp->srcu_idx, !sp->srcu_idx); -	WRITE_ONCE(sp->srcu_gp_waiting, true);  /* srcu_read_unlock() wakes! */ -	swait_event_exclusive(sp->srcu_wq, !READ_ONCE(sp->srcu_lock_nesting[idx])); -	WRITE_ONCE(sp->srcu_gp_waiting, false); /* srcu_read_unlock() cheap. */ +	idx = ssp->srcu_idx; +	WRITE_ONCE(ssp->srcu_idx, !ssp->srcu_idx); +	WRITE_ONCE(ssp->srcu_gp_waiting, true);  /* srcu_read_unlock() wakes! */ +	swait_event_exclusive(ssp->srcu_wq, !READ_ONCE(ssp->srcu_lock_nesting[idx])); +	WRITE_ONCE(ssp->srcu_gp_waiting, false); /* srcu_read_unlock() cheap. */  	/* Invoke the callbacks we removed above. */  	while (lh) { @@ -161,9 +161,9 @@ void srcu_drive_gp(struct work_struct *wp)  	 * at interrupt level, but the ->srcu_gp_running checks will  	 * straighten that out.  	 */ -	WRITE_ONCE(sp->srcu_gp_running, false); -	if (READ_ONCE(sp->srcu_cb_head)) -		schedule_work(&sp->srcu_work); +	WRITE_ONCE(ssp->srcu_gp_running, false); +	if (READ_ONCE(ssp->srcu_cb_head)) +		schedule_work(&ssp->srcu_work);  }  EXPORT_SYMBOL_GPL(srcu_drive_gp); @@ -171,7 +171,7 @@ EXPORT_SYMBOL_GPL(srcu_drive_gp);   * Enqueue an SRCU callback on the specified srcu_struct structure,   * initiating grace-period processing if it is not already running.   */ -void call_srcu(struct srcu_struct *sp, struct rcu_head *rhp, +void call_srcu(struct srcu_struct *ssp, struct rcu_head *rhp,  	       rcu_callback_t func)  {  	unsigned long flags; @@ -179,14 +179,14 @@ void call_srcu(struct srcu_struct *sp, struct rcu_head *rhp,  	rhp->func = func;  	rhp->next = NULL;  	local_irq_save(flags); -	*sp->srcu_cb_tail = rhp; -	sp->srcu_cb_tail = &rhp->next; +	*ssp->srcu_cb_tail = rhp; +	ssp->srcu_cb_tail = &rhp->next;  	local_irq_restore(flags); -	if (!READ_ONCE(sp->srcu_gp_running)) { +	if (!READ_ONCE(ssp->srcu_gp_running)) {  		if (likely(srcu_init_done)) -			schedule_work(&sp->srcu_work); -		else if (list_empty(&sp->srcu_work.entry)) -			list_add(&sp->srcu_work.entry, &srcu_boot_list); +			schedule_work(&ssp->srcu_work); +		else if (list_empty(&ssp->srcu_work.entry)) +			list_add(&ssp->srcu_work.entry, &srcu_boot_list);  	}  }  EXPORT_SYMBOL_GPL(call_srcu); @@ -194,13 +194,13 @@ EXPORT_SYMBOL_GPL(call_srcu);  /*   * synchronize_srcu - wait for prior SRCU read-side critical-section completion   */ -void synchronize_srcu(struct srcu_struct *sp) +void synchronize_srcu(struct srcu_struct *ssp)  {  	struct rcu_synchronize rs;  	init_rcu_head_on_stack(&rs.head);  	init_completion(&rs.completion); -	call_srcu(sp, &rs.head, wakeme_after_rcu); +	call_srcu(ssp, &rs.head, wakeme_after_rcu);  	wait_for_completion(&rs.completion);  	destroy_rcu_head_on_stack(&rs.head);  } @@ -219,13 +219,13 @@ void __init rcu_scheduler_starting(void)   */  void __init srcu_init(void)  { -	struct srcu_struct *sp; +	struct srcu_struct *ssp;  	srcu_init_done = true;  	while (!list_empty(&srcu_boot_list)) { -		sp = list_first_entry(&srcu_boot_list, +		ssp = list_first_entry(&srcu_boot_list,  				      struct srcu_struct, srcu_work.entry); -		list_del_init(&sp->srcu_work.entry); -		schedule_work(&sp->srcu_work); +		list_del_init(&ssp->srcu_work.entry); +		schedule_work(&ssp->srcu_work);  	}  }  | 
