/* Control will return to the caller some time after a full rcu_bh grace period has elapsed, in other words after all currently executing rcu_bh read-side critical sections have completed. RCU read-side critical sections are delimited by rcu_read_lock_bh() and rcu_read_unlock_bh(), and may be nested.  */
void synchronize_rcu_bh(void)
/* Control will return to the caller some time after a full rcu_bh grace period has elapsed, in other words after all currently executing rcu_bh read-side critical sections have completed. RCU read-side critical sections are delimited by rcu_read_lock_bh() and rcu_read_unlock_bh(), and may be nested.  */
void synchronize_rcu_bh(void)
{
	struct rcu_synchronize rcu;
	if (rcu_blocking_is_gp())
		return;
	init_completion(&rcu.completion);
	call_rcu_bh(&rcu.head, wakeme_after_rcu);
	wait_for_completion(&rcu.completion);
}