static irqreturn_t gic_compare_interrupt(int irq, void *dev_id) { struct clock_event_device *cd = dev_id; gic_write_compare(gic_read_compare()); cd->event_handler(cd); return IRQ_HANDLED; }
irqreturn_t gic_compare_interrupt(int irq, void *dev_id) { struct clock_event_device *cd; int cpu = smp_processor_id(); gic_write_compare(gic_read_compare()); cd = &per_cpu(gic_clockevent_device, cpu); cd->event_handler(cd); return IRQ_HANDLED; }
static int gic_next_event(unsigned long delta, struct clock_event_device *evt) { u64 cnt; int res; cnt = gic_read_count(); cnt += (u64)delta; gic_write_compare(cnt); res = ((int)(gic_read_count() - cnt) >= 0) ? -ETIME : 0; return res; }