urn_t qemu_timer_interrupt(int irq, void *dev) { int cpu = smp_processor_id(); struct clock_event_device *ce = &per_cpu(cpu_ce, cpu); ce->event_handler(ce); return IRQ_HANDLED; } static void __init init_qemu_clockevent(void) { int cpu = smp_processor_id(); struct clock_event_device *ce = &per_cpu(cpu_ce, cpu); *ce = (struct clock_event_device){ .name = "qemu", .features = CLOCK_EVT_FEAT_ONESHOT, .rating = 400, .cpumask = cpumask_of(cpu), .set_state_shutdown = qemu_ce_shutdown, .set_state_oneshot = qemu_ce_shutdown, .tick_resume = qemu_ce_shutdown, .set_next_event = qemu_ce_set_next_event, }; clockevents_config_and_register(ce, NSEC_PER_SEC, 1000, LONG_MAX); }