#include <linux/module.h>
#include <linux/percpu.h>
#include <linux/rcupdate.h>
+#include <linux/rculist.h>
#include <linux/smp.h>
static DEFINE_PER_CPU(struct call_single_queue, call_single_queue);
spinlock_t lock;
};
-void __cpuinit init_call_single_data(void)
+static int __cpuinit init_call_single_data(void)
{
int i;
spin_lock_init(&q->lock);
INIT_LIST_HEAD(&q->list);
}
+ return 0;
}
+early_initcall(init_call_single_data);
static void csd_flag_wait(struct call_single_data *data)
{
* smp_call_function_single - Run a function on a specific CPU
* @func: The function to run. This must be fast and non-blocking.
* @info: An arbitrary pointer to pass to the function.
- * @retry: Unused
* @wait: If true, wait until function has completed on other CPUs.
*
* Returns 0 on success, else a negative status code. Note that @wait
* we fall back to on-stack allocation.
*/
int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
- int retry, int wait)
+ int wait)
{
struct call_single_data d;
unsigned long flags;
return 0;
else if (num_cpus == 1) {
cpu = first_cpu(mask);
- return smp_call_function_single(cpu, func, info, 0, wait);
+ return smp_call_function_single(cpu, func, info, wait);
}
if (!wait) {
if (!data) {
data = &d;
data->csd.flags = CSD_FLAG_WAIT;
+ wait = 1;
}
spin_lock_init(&data->lock);
* smp_call_function(): Run a function on all other CPUs.
* @func: The function to run. This must be fast and non-blocking.
* @info: An arbitrary pointer to pass to the function.
- * @natomic: Unused
* @wait: If true, wait (atomically) until function has completed on other CPUs.
*
* Returns 0 on success, else a negative status code.
* 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 *), void *info, int natomic, int wait)
+int smp_call_function(void (*func)(void *), void *info, int wait)
{
int ret;