/* You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.  */
int smp_call_function(void(*func)(void *info), void *info, int wait)
/* You must not call this function with disabled interrupts or from a hardware interrupt handler or from a bottom half handler.  */
int smp_call_function(void(*func)(void *info), void *info, int wait)
{
	cpumask_t cpu_mask = CPU_MASK_ALL;
	struct call_data_struct data;
	int ret;
	cpu_clear(smp_processor_id(), cpu_mask);
	WARN_ON(irqs_disabled());
	data.func = func;
	data.info = info;
	data.wait = wait;
	spin_lock(&call_lock);
	call_data = &data;
	ret = send_ipi(IPI_CALL, wait, cpu_mask);
	spin_unlock(&call_lock);
	return ret;
}