diff options
Diffstat (limited to 'kernel/time')
| -rw-r--r-- | kernel/time/tick-broadcast.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c index eadfce2fff74..8001d37071f5 100644 --- a/kernel/time/tick-broadcast.c +++ b/kernel/time/tick-broadcast.c | |||
| @@ -243,11 +243,18 @@ void tick_broadcast_on_off(unsigned long reason, int *oncpu) | |||
| 243 | { | 243 | { |
| 244 | int cpu = get_cpu(); | 244 | int cpu = get_cpu(); |
| 245 | 245 | ||
| 246 | if (cpu == *oncpu) | 246 | if (!cpu_isset(*oncpu, cpu_online_map)) { |
| 247 | tick_do_broadcast_on_off(&reason); | 247 | printk(KERN_ERR "tick-braodcast: ignoring broadcast for " |
| 248 | else | 248 | "offline CPU #%d\n", *oncpu); |
| 249 | smp_call_function_single(*oncpu, tick_do_broadcast_on_off, | 249 | } else { |
| 250 | &reason, 1, 1); | 250 | |
| 251 | if (cpu == *oncpu) | ||
| 252 | tick_do_broadcast_on_off(&reason); | ||
| 253 | else | ||
| 254 | smp_call_function_single(*oncpu, | ||
| 255 | tick_do_broadcast_on_off, | ||
| 256 | &reason, 1, 1); | ||
| 257 | } | ||
| 251 | put_cpu(); | 258 | put_cpu(); |
| 252 | } | 259 | } |
| 253 | 260 | ||
