Commit ff08f76d authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Ingo Molnar

x86: clean up hpet timer reinit

Implement Linus's suggestion: introduce the hpet_cnt_ahead()
helper function to compare hpet time values - like other
wrapping counter comparisons are abstracted away elsewhere.
(jiffies, ktime_t, etc.)
Reported-by: default avatarKirill Korotaev <dev@openvz.org>
Signed-off-by: default avatarPavel Emelyanov <xemul@openvz.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 7d8e23df
...@@ -897,13 +897,21 @@ static unsigned long hpet_rtc_flags; ...@@ -897,13 +897,21 @@ static unsigned long hpet_rtc_flags;
static int hpet_prev_update_sec; static int hpet_prev_update_sec;
static struct rtc_time hpet_alarm_time; static struct rtc_time hpet_alarm_time;
static unsigned long hpet_pie_count; 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_default_delta;
static unsigned long hpet_pie_delta; static unsigned long hpet_pie_delta;
static unsigned long hpet_pie_limit; static unsigned long hpet_pie_limit;
static rtc_irq_handler irq_handler; 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. * Registers a IRQ handler.
*/ */
...@@ -1075,7 +1083,7 @@ static void hpet_rtc_timer_reinit(void) ...@@ -1075,7 +1083,7 @@ static void hpet_rtc_timer_reinit(void)
hpet_t1_cmp += delta; hpet_t1_cmp += delta;
hpet_writel(hpet_t1_cmp, HPET_T1_CMP); hpet_writel(hpet_t1_cmp, HPET_T1_CMP);
lost_ints++; 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 (lost_ints) {
if (hpet_rtc_flags & RTC_PIE) if (hpet_rtc_flags & RTC_PIE)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment