/* Helper function for rcu_process_callbacks() that operates on the specified rcu_ctrlkblk structure.  */
static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
/* Helper function for rcu_process_callbacks() that operates on the specified rcu_ctrlkblk structure.  */
static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
{
	struct rcu_head *next, *list;
	unsigned long flags;
	if (&rcp->rcucblist == rcp->donetail)
		return;
	local_irq_save(flags);
	list = rcp->rcucblist;
	rcp->rcucblist = *rcp->donetail;
	*rcp->donetail = NULL;
	if (rcp->curtail == rcp->donetail)
		rcp->curtail = &rcp->rcucblist;
	rcp->donetail = &rcp->rcucblist;
	local_irq_restore(flags);
	while (list) {
		next = list->next;
		prefetch(next);
		list->func(list);
		list = next;
	}
}