diff options
Diffstat (limited to 'arch/powerpc/kernel/smp.c')
| -rw-r--r-- | arch/powerpc/kernel/smp.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index d577b71db375..087c92f2a3eb 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
| @@ -284,7 +284,7 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int | |||
| 284 | int wait) | 284 | int wait) |
| 285 | { | 285 | { |
| 286 | cpumask_t map = CPU_MASK_NONE; | 286 | cpumask_t map = CPU_MASK_NONE; |
| 287 | int ret = -EBUSY; | 287 | int ret = 0; |
| 288 | 288 | ||
| 289 | if (!cpu_online(cpu)) | 289 | if (!cpu_online(cpu)) |
| 290 | return -EINVAL; | 290 | return -EINVAL; |
| @@ -292,6 +292,11 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, int | |||
| 292 | cpu_set(cpu, map); | 292 | cpu_set(cpu, map); |
| 293 | if (cpu != get_cpu()) | 293 | if (cpu != get_cpu()) |
| 294 | ret = smp_call_function_map(func,info,nonatomic,wait,map); | 294 | ret = smp_call_function_map(func,info,nonatomic,wait,map); |
| 295 | else { | ||
| 296 | local_irq_disable(); | ||
| 297 | func(info); | ||
| 298 | local_irq_enable(); | ||
| 299 | } | ||
| 295 | put_cpu(); | 300 | put_cpu(); |
| 296 | return ret; | 301 | return ret; |
| 297 | } | 302 | } |
