lkml.org 
[lkml]   [2009]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRE: 2.6.31.4: WARNING: at arch/x86/kernel/hpet.c:390 hpet_next_event+0x70/0x80() [occurs when ACPI_PROCESSOR=y]
    From
    Date
    On Fri, 2009-11-13 at 10:43 -0800, Justin Piszcz wrote:
    >
    > On Fri, 13 Nov 2009, Pallipadi, Venkatesh wrote:
    >
    > > On Fri, 2009-11-13 at 01:38 -0800, Thomas Gleixner wrote:
    > >> On Thu, 12 Nov 2009, Pallipadi, Venkatesh wrote:
    > >>> Yes. Yes. This is a hardware errata. I have a patch to workaround this and
    > >>> waiting on the errata description to get published..
    > >>
    > >> Can we at least have some PCI quirk or whatever until you can push the
    > >> final workaround out so peoples machines do not explode ?
    > >
    > > Its a harmless bug functionality-wise and should not have any side
    > > effect other than triggering the WARN_ON_ONCE in hpet next event code.
    > >
    > > Thanks,
    > > Venki
    > >
    >
    > Venki,
    >
    > When the following patch is applied though: (courtesy of john stultz)
    >

    Justin,

    I am missing something in here.
    Without the below patch, on 2.6.31.4 and ACPI_PROCESSOR loaded (either
    as module or builtin), you may see the WARNING. But, that should not
    cause any other problems with C-states, P-states, or anything else.
    Is that what you are seeing?

    The below patch is not a workaround for the problem. Infact it will make
    situation worse with constant stream of prinkts and can reduce the
    C-state residency and turbo upside.

    Thanks,
    Venki

    > --- a/arch/x86/kernel/hpet.c
    > +++ b/arch/x86/kernel/hpet.c
    > @@ -376,7 +376,7 @@ static void hpet_set_mode(enum clock_event_mode mode,
    > static int hpet_next_event(unsigned long delta,
    > struct clock_event_device *evt, int timer)
    > {
    > - u32 cnt;
    > + u32 cnt, check;
    >
    > cnt = hpet_readl(HPET_COUNTER);
    > cnt += (u32) delta;
    > @@ -387,7 +387,12 @@ static int hpet_next_event(unsigned long delta,
    > * what we wrote hit the chip before we compare it to the
    > * counter.
    > */
    > - WARN_ON_ONCE((u32)hpet_readl(HPET_Tn_CMP(timer)) != cnt);
    > + check = (u32)hpet_readl(HPET_Tn_CMP(timer));
    > + if(check != cnt) {
    > + printk("hpet_next_event: hpet_writel failed: 0x%x != 0x%x\n",
    > + check, cnt);
    > + hpet_writel(cnt, HPET_Tn_CMP(timer));
    > + }
    >
    > return (s32)((u32)hpet_readl(HPET_COUNTER) - cnt) >= 0 ? -ETIME : 0;
    > }
    >




    \
     
     \ /
      Last update: 2009-11-14 02:15    [W:0.036 / U:91.260 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site