--- a/arch/x86/kernel/hpet.c+++ b/arch/x86/kernel/hpet.c@@ -398,9 +398,15 @@ static int hpet_next_event(unsigned long * then we might have a real hardware problem. We can not do * much about it here, but at least alert the user/admin with * a prominent warning.+ * An erratum on some chipsets (ICH9,..), results in comparator read+ * immediately following a write returning old value. Workaround+ * for this is to read this value second time, when first+ * read returns old value. */- WARN_ONCE((u32)hpet_readl(HPET_Tn_CMP(timer)) != cnt,+ if (unlikely((u32)hpet_readl(HPET_Tn_CMP(timer)) != cnt)) {+ WARN_ONCE((u32)hpet_readl(HPET_Tn_CMP(timer)) != cnt, KERN_WARNING "hpet: compare register read back failed.\n");+ }