/* Insert a previously allocated call_single_data element for execution on the given CPU. data must already have ->func, ->info, and ->flags set.  */
static void generic_exec_single(int cpu, struct call_single_data *data, int wait)
/* Insert a previously allocated call_single_data element for execution on the given CPU. data must already have ->func, ->info, and ->flags set.  */
static void generic_exec_single(int cpu, struct call_single_data *data, int wait)
{
	struct call_single_queue *dst = &per_cpu(call_single_queue, cpu);
	unsigned long flags;
	int ipi;
	raw_spin_lock_irqsave(&dst->lock, flags);
	ipi = list_empty(&dst->list);
	list_add_tail(&data->list, &dst->list);
	raw_spin_unlock_irqrestore(&dst->lock, flags);
	if (ipi)
		arch_send_call_function_single_ipi(cpu);
	if (wait)
		csd_lock_wait(data);
}