public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Blacklist Dell Optiplex 320 from using the HPET
@ 2007-05-04 21:29 john stultz
  2007-05-04 21:44 ` Andrew Morton
  2007-05-04 23:18 ` Andi Kleen
  0 siblings, 2 replies; 15+ messages in thread
From: john stultz @ 2007-05-04 21:29 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Guilherme M. Schroeder, lkml, Andi Kleen, Thomas Gleixner

One of the 2.6.21 regressions was Guilherme's problem seeing his box
lock up when the system detected an unstable TSC and dropped back to
using the HPET.

In digging deeper, we found the HPET is not actually incrementing on
this system. And in fact, the reason why this issue just cropped up was
because of Thomas's clocksource watchdog code was comparing the TSC to
the HPET (which wasn't moving) and thought the TSC was broken.

Anyway, Guliherme checked for a BIOS update and did not find one, so
I've added a DMI blacklist against his system so the HPET is not used.

Many thanks to Guilherme for the slow and laborious testing that finally
narrowed down this issue.

thanks
-john

Signed-off-by: John Stultz <johnstul@us.ibm.com>

diff --git a/arch/i386/kernel/hpet.c b/arch/i386/kernel/hpet.c
index 17d7345..1ae27f3 100644
--- a/arch/i386/kernel/hpet.c
+++ b/arch/i386/kernel/hpet.c
@@ -5,6 +5,7 @@
 #include <linux/init.h>
 #include <linux/sysdev.h>
 #include <linux/pm.h>
+#include <linux/dmi.h>
 
 #include <asm/hpet.h>
 #include <asm/io.h>
@@ -48,6 +49,31 @@ static int __init hpet_setup(char* str)
 }
 __setup("hpet=", hpet_setup);
 
+
+/* DMI Blacklist for bad HPETs */
+static int __init dmi_mark_hpet_broken(struct dmi_system_id *d)
+{
+	printk(KERN_NOTICE "%s detected: HPET does not function.\n",
+		       d->ident);
+	boot_hpet_disable = 1;
+	return 0;
+}
+
+/* List of systems that have known HPETproblems */
+static struct dmi_system_id bad_hpet_dmi_table[] = {
+	{
+	 .callback = dmi_mark_hpet_broken,
+	 .ident = "Dell OptiPlex 320",
+	 .matches = {
+		     DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 320"),
+		     DMI_MATCH(DMI_BOARD_VENDOR, "Dell Inc."),
+		     DMI_MATCH(DMI_BOARD_NAME, "0UT237"),
+		     },
+	 },
+	 {}
+};
+
+
 static inline int is_hpet_capable(void)
 {
 	return (!boot_hpet_disable && hpet_address);
@@ -228,6 +254,8 @@ int __init hpet_enable(void)
 	uint64_t hpet_freq;
 	u64 tmp;
 
+	dmi_check_system(bad_hpet_dmi_table);
+
 	if (!is_hpet_capable())
 		return 0;
 





^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2007-05-07 20:41 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-04 21:29 [PATCH] Blacklist Dell Optiplex 320 from using the HPET john stultz
2007-05-04 21:44 ` Andrew Morton
2007-05-04 21:47   ` john stultz
2007-05-04 23:19   ` Andi Kleen
2007-05-04 23:18 ` Andi Kleen
2007-05-04 23:27   ` john stultz
2007-05-05 14:26     ` Thomas Gleixner
2007-05-05 14:30       ` Thomas Gleixner
2007-05-05 15:58         ` Henrique de Moraes Holschuh
2007-05-07 18:59           ` Andreas Mohr
2007-05-07 20:41             ` Henrique de Moraes Holschuh
2007-05-05 17:24       ` Andi Kleen
2007-05-05 19:15         ` Thomas Gleixner
2007-05-05 22:05           ` Andi Kleen
2007-05-05 22:41     ` Guilherme M. Schroeder

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox