--- linux/arch/i386/kernel/dmi_scan.c.orig 2002-07-31 23:10:21.000000000 -0400 +++ linux/arch/i386/kernel/dmi_scan.c 2002-08-27 22:45:12.000000000 -0400 @@ -12,6 +12,7 @@ unsigned long dmi_broken; int is_sony_vaio_laptop; +int is_unsafe_smbus; struct dmi_header { @@ -459,6 +460,20 @@ return 0; } +/* + * Don't access SMBus on IBM systems which get corrupted eeproms + */ + +static __init int disable_smbus(struct dmi_blacklist *d) +{ + if (is_unsafe_smbus == 0) + { + is_unsafe_smbus = 1; + printk(KERN_INFO "%s machine detected. Disabling SMBus accesses.\n", d->ident); + } + return 0; +} + /* * Simple "print if true" callback */ @@ -732,6 +747,15 @@ NO_MATCH, NO_MATCH, NO_MATCH } }, + /* + * SMBus / sensors settings + */ + + { disable_smbus, "IBM", { + MATCH(DMI_SYS_VENDOR, "IBM"), + NO_MATCH, NO_MATCH, NO_MATCH + } }, + { NULL, } };