lkml.org 
[lkml]   [2007]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH] Blacklist Dell Optiplex 320 from using the HPET
    On Fri, 04 May 2007 14:29:04 -0700
    john stultz <johnstul@us.ibm.com> wrote:

    > 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.
    >

    OK, I tagged that for -stable too.

    >
    > 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;

    The table can be __initdata, can't it?


    --- a/arch/i386/kernel/hpet.c~blacklist-dell-optiplex-320-from-using-the-hpet-fix
    +++ a/arch/i386/kernel/hpet.c
    @@ -60,7 +60,7 @@ static int __init dmi_mark_hpet_broken(s
    }

    /* List of systems that have known HPETproblems */
    -static struct dmi_system_id bad_hpet_dmi_table[] = {
    +static struct dmi_system_id __initdata bad_hpet_dmi_table[] = {
    {
    .callback = dmi_mark_hpet_broken,
    .ident = "Dell OptiPlex 320",
    @@ -73,7 +73,6 @@ static struct dmi_system_id bad_hpet_dmi
    {}
    };

    -
    static inline int is_hpet_capable(void)
    {
    return (!boot_hpet_disable && hpet_address);
    _
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-05-04 23:47    [W:4.097 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site