Merge git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/ISDN-2.6
[pandora-kernel.git] / kernel / smp.c
index f77b75c..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)
 {
@@ -195,7 +198,6 @@ void generic_smp_call_function_single_interrupt(void)
  * 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
@@ -203,7 +205,7 @@ void generic_smp_call_function_single_interrupt(void)
  * 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;
@@ -301,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) {
@@ -312,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);
@@ -339,7 +342,6 @@ EXPORT_SYMBOL(smp_call_function_mask);
  * 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.
@@ -351,7 +353,7 @@ EXPORT_SYMBOL(smp_call_function_mask);
  * 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;