diff options
| -rw-r--r-- | arch/x86/kernel/hpet.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index c761f914430..388254f69a2 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c @@ -897,7 +897,7 @@ static unsigned long hpet_rtc_flags;  static int hpet_prev_update_sec;  static struct rtc_time hpet_alarm_time;  static unsigned long hpet_pie_count; -static unsigned long hpet_t1_cmp; +static u32 hpet_t1_cmp;  static unsigned long hpet_default_delta;  static unsigned long hpet_pie_delta;  static unsigned long hpet_pie_limit; @@ -905,6 +905,14 @@ static unsigned long hpet_pie_limit;  static rtc_irq_handler irq_handler;  /* + * Check that the hpet counter c1 is ahead of the c2 + */ +static inline int hpet_cnt_ahead(u32 c1, u32 c2) +{ +	return (s32)(c2 - c1) < 0; +} + +/*   * Registers a IRQ handler.   */  int hpet_register_irq_handler(rtc_irq_handler handler) @@ -1075,7 +1083,7 @@ static void hpet_rtc_timer_reinit(void)  		hpet_t1_cmp += delta;  		hpet_writel(hpet_t1_cmp, HPET_T1_CMP);  		lost_ints++; -	} while ((s32)(hpet_readl(HPET_COUNTER) - hpet_t1_cmp) > 0); +	} while (!hpet_cnt_ahead(hpet_t1_cmp, hpet_readl(HPET_COUNTER)));  	if (lost_ints) {  		if (hpet_rtc_flags & RTC_PIE)  |