Merge git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/ISDN-2.6
[pandora-kernel.git] / kernel / smp.c
index 7e0432a..96fc7c0 100644 (file)
@@ -8,6 +8,7 @@
 #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);
@@ -32,7 +33,7 @@ struct call_single_queue {
        spinlock_t lock;
 };
 
-void __cpuinit init_call_single_data(void)
+static int __cpuinit init_call_single_data(void)
 {
        int i;
 
@@ -42,7 +43,9 @@ void __cpuinit init_call_single_data(void)
                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)
 {
@@ -300,7 +303,7 @@ int smp_call_function_mask(cpumask_t mask, void (*func)(void *), void *info,
                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) {
@@ -311,6 +314,7 @@ int smp_call_function_mask(cpumask_t mask, void (*func)(void *), void *info,
        if (!data) {
                data = &d;
                data->csd.flags = CSD_FLAG_WAIT;
+               wait = 1;
        }
 
        spin_lock_init(&data->lock);