|
@@ -475,14 +475,8 @@ u64 smp_irq_stat_cpu(unsigned int cpu)
|
|
|
*/
|
|
|
static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent);
|
|
|
|
|
|
-static void ipi_timer(void)
|
|
|
-{
|
|
|
- struct clock_event_device *evt = &__get_cpu_var(percpu_clockevent);
|
|
|
- evt->event_handler(evt);
|
|
|
-}
|
|
|
-
|
|
|
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
|
|
|
-static void smp_timer_broadcast(const struct cpumask *mask)
|
|
|
+void tick_broadcast(const struct cpumask *mask)
|
|
|
{
|
|
|
smp_cross_call(mask, IPI_TIMER);
|
|
|
}
|
|
@@ -530,7 +524,6 @@ static void __cpuinit percpu_timer_setup(void)
|
|
|
struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu);
|
|
|
|
|
|
evt->cpumask = cpumask_of(cpu);
|
|
|
- evt->broadcast = smp_timer_broadcast;
|
|
|
|
|
|
if (!lt_ops || lt_ops->setup(evt))
|
|
|
broadcast_timer_setup(evt);
|
|
@@ -596,11 +589,13 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
|
|
|
case IPI_WAKEUP:
|
|
|
break;
|
|
|
|
|
|
+#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
|
|
|
case IPI_TIMER:
|
|
|
irq_enter();
|
|
|
- ipi_timer();
|
|
|
+ tick_receive_broadcast();
|
|
|
irq_exit();
|
|
|
break;
|
|
|
+#endif
|
|
|
|
|
|
case IPI_RESCHEDULE:
|
|
|
scheduler_ipi();
|