Loading arch/arm/mach-pxa/time.c +4 −3 Original line number Original line Diff line number Diff line Loading @@ -91,9 +91,10 @@ pxa_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) /* Loop until we get ahead of the free running timer. /* Loop until we get ahead of the free running timer. * This ensures an exact clock tick count and time accuracy. * This ensures an exact clock tick count and time accuracy. * IRQs are disabled inside the loop to ensure coherence between * Since IRQs are disabled at this point, coherence between * lost_ticks (updated in do_timer()) and the match reg value, so we * lost_ticks(updated in do_timer()) and the match reg value is * can use do_gettimeofday() from interrupt handlers. * ensured, hence we can use do_gettimeofday() from interrupt * handlers. * * * HACK ALERT: it seems that the PXA timer regs aren't updated right * HACK ALERT: it seems that the PXA timer regs aren't updated right * away in all cases when a write occurs. We therefore compare with * away in all cases when a write occurs. We therefore compare with Loading arch/arm/mach-sa1100/time.c +8 −9 Original line number Original line Diff line number Diff line Loading @@ -70,15 +70,6 @@ static unsigned long sa1100_gettimeoffset (void) return usec; return usec; } } /* * We will be entered with IRQs enabled. * * Loop until we get ahead of the free running timer. * This ensures an exact clock tick count and time accuracy. * IRQs are disabled inside the loop to ensure coherence between * lost_ticks (updated in do_timer()) and the match reg value, so we * can use do_gettimeofday() from interrupt handlers. */ static irqreturn_t static irqreturn_t sa1100_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) sa1100_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) { { Loading @@ -86,6 +77,14 @@ sa1100_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) write_seqlock(&xtime_lock); write_seqlock(&xtime_lock); /* * Loop until we get ahead of the free running timer. * This ensures an exact clock tick count and time accuracy. * Since IRQs are disabled at this point, coherence between * lost_ticks(updated in do_timer()) and the match reg value is * ensured, hence we can use do_gettimeofday() from interrupt * handlers. */ do { do { timer_tick(regs); timer_tick(regs); OSSR = OSSR_M0; /* Clear match on timer 0 */ OSSR = OSSR_M0; /* Clear match on timer 0 */ Loading Loading
arch/arm/mach-pxa/time.c +4 −3 Original line number Original line Diff line number Diff line Loading @@ -91,9 +91,10 @@ pxa_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) /* Loop until we get ahead of the free running timer. /* Loop until we get ahead of the free running timer. * This ensures an exact clock tick count and time accuracy. * This ensures an exact clock tick count and time accuracy. * IRQs are disabled inside the loop to ensure coherence between * Since IRQs are disabled at this point, coherence between * lost_ticks (updated in do_timer()) and the match reg value, so we * lost_ticks(updated in do_timer()) and the match reg value is * can use do_gettimeofday() from interrupt handlers. * ensured, hence we can use do_gettimeofday() from interrupt * handlers. * * * HACK ALERT: it seems that the PXA timer regs aren't updated right * HACK ALERT: it seems that the PXA timer regs aren't updated right * away in all cases when a write occurs. We therefore compare with * away in all cases when a write occurs. We therefore compare with Loading
arch/arm/mach-sa1100/time.c +8 −9 Original line number Original line Diff line number Diff line Loading @@ -70,15 +70,6 @@ static unsigned long sa1100_gettimeoffset (void) return usec; return usec; } } /* * We will be entered with IRQs enabled. * * Loop until we get ahead of the free running timer. * This ensures an exact clock tick count and time accuracy. * IRQs are disabled inside the loop to ensure coherence between * lost_ticks (updated in do_timer()) and the match reg value, so we * can use do_gettimeofday() from interrupt handlers. */ static irqreturn_t static irqreturn_t sa1100_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) sa1100_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) { { Loading @@ -86,6 +77,14 @@ sa1100_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) write_seqlock(&xtime_lock); write_seqlock(&xtime_lock); /* * Loop until we get ahead of the free running timer. * This ensures an exact clock tick count and time accuracy. * Since IRQs are disabled at this point, coherence between * lost_ticks(updated in do_timer()) and the match reg value is * ensured, hence we can use do_gettimeofday() from interrupt * handlers. */ do { do { timer_tick(regs); timer_tick(regs); OSSR = OSSR_M0; /* Clear match on timer 0 */ OSSR = OSSR_M0; /* Clear match on timer 0 */ Loading