|
@@ -152,11 +152,6 @@ static void stop_this_cpu(void *dummy)
|
|
;
|
|
;
|
|
}
|
|
}
|
|
|
|
|
|
-void smp_send_stop(void)
|
|
|
|
-{
|
|
|
|
- smp_call_function(stop_this_cpu, NULL, 1, 0);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Structure and data for smp_call_function(). This is designed to minimise
|
|
* Structure and data for smp_call_function(). This is designed to minimise
|
|
* static memory requirements. It also looks cleaner.
|
|
* static memory requirements. It also looks cleaner.
|
|
@@ -198,9 +193,6 @@ int smp_call_function_map(void (*func) (void *info), void *info, int nonatomic,
|
|
int cpu;
|
|
int cpu;
|
|
u64 timeout;
|
|
u64 timeout;
|
|
|
|
|
|
- /* Can deadlock when called with interrupts disabled */
|
|
|
|
- WARN_ON(irqs_disabled());
|
|
|
|
-
|
|
|
|
if (unlikely(smp_ops == NULL))
|
|
if (unlikely(smp_ops == NULL))
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
@@ -270,10 +262,19 @@ int smp_call_function_map(void (*func) (void *info), void *info, int nonatomic,
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int __smp_call_function(void (*func)(void *info), void *info,
|
|
|
|
+ int nonatomic, int wait)
|
|
|
|
+{
|
|
|
|
+ return smp_call_function_map(func,info,nonatomic,wait,cpu_online_map);
|
|
|
|
+}
|
|
|
|
+
|
|
int smp_call_function(void (*func) (void *info), void *info, int nonatomic,
|
|
int smp_call_function(void (*func) (void *info), void *info, int nonatomic,
|
|
int wait)
|
|
int wait)
|
|
{
|
|
{
|
|
- return smp_call_function_map(func,info,nonatomic,wait,cpu_online_map);
|
|
|
|
|
|
+ /* Can deadlock when called with interrupts disabled */
|
|
|
|
+ WARN_ON(irqs_disabled());
|
|
|
|
+
|
|
|
|
+ return __smp_call_function(func, info, nonatomic, wait);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(smp_call_function);
|
|
EXPORT_SYMBOL(smp_call_function);
|
|
|
|
|
|
@@ -283,6 +284,9 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int
|
|
cpumask_t map = CPU_MASK_NONE;
|
|
cpumask_t map = CPU_MASK_NONE;
|
|
int ret = 0;
|
|
int ret = 0;
|
|
|
|
|
|
|
|
+ /* Can deadlock when called with interrupts disabled */
|
|
|
|
+ WARN_ON(irqs_disabled());
|
|
|
|
+
|
|
if (!cpu_online(cpu))
|
|
if (!cpu_online(cpu))
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
@@ -299,6 +303,11 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(smp_call_function_single);
|
|
EXPORT_SYMBOL(smp_call_function_single);
|
|
|
|
|
|
|
|
+void smp_send_stop(void)
|
|
|
|
+{
|
|
|
|
+ __smp_call_function(stop_this_cpu, NULL, 1, 0);
|
|
|
|
+}
|
|
|
|
+
|
|
void smp_call_function_interrupt(void)
|
|
void smp_call_function_interrupt(void)
|
|
{
|
|
{
|
|
void (*func) (void *info);
|
|
void (*func) (void *info);
|