static int gic_clockevent_init(void) { if (!cpu_has_counter || !gic_frequency) return -ENXIO; setup_percpu_irq(gic_timer_irq, &gic_compare_irqaction); register_cpu_notifier(&gic_cpu_nb); gic_clockevent_cpu_init(this_cpu_ptr(&gic_clockevent_device)); return 0; }
static int gic_cpu_notifier(struct notifier_block *nb, unsigned long action, void *data) { switch (action & ~CPU_TASKS_FROZEN) { case CPU_STARTING: gic_clockevent_cpu_init(this_cpu_ptr(&gic_clockevent_device)); break; case CPU_DYING: gic_clockevent_cpu_exit(this_cpu_ptr(&gic_clockevent_device)); break; } return NOTIFY_OK; }
static int gic_starting_cpu(unsigned int cpu) { gic_clockevent_cpu_init(cpu, this_cpu_ptr(&gic_clockevent_device)); return 0; }