lkml.org 
[lkml]   [2012]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [patch 2/2] x86: mce: Implement cmci poll mode for intel machines
    On Fri, 25 May 2012, Thomas Gleixner wrote:
    > On Fri, 25 May 2012, Chen Gong wrote:
    >
    > > 于 2012/5/25 14:24, Borislav Petkov 写道:
    > > > On Thu, May 24, 2012 at 05:54:52PM +0000, Thomas Gleixner wrote:
    > > >> Intentionally left blank to be filled out by someone who wants
    > > >> that and can explain the reason for this better than me.
    > > >
    > > > That'll be Intel folk :)
    > > >
    > > >> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    > > >
    > > > Looks good to me too, thanks Thomas for doing this!
    > > >
    > > > I'll run it next week just in case.
    > > >
    > > > Acked-by: Borislav Petkov <borislav.petkov@amd.com>
    > > >
    > >
    > > Oh, Oh, wait. First I need to thank Thomas to improve it. I don't
    > > reply you at the first time because I have some thoughts and now
    > > I'm testing it. The basic test shows it hangs the system after
    > > sb_edac is removed and when error count increases to the threshold
    > > it hangs again, and when trying to reboot the system no hang happnes
    > > (not reach the threshold) the system oops. I need to time to debug
    > > and give the valid feedback. Please be patient :-). Of course,
    >
    > As I said it's completely untested. I just made sure it compiles :)

    I just had a quick look again and noticed that nothing is polling the
    cmci part in case of the storm mode.

    Delta fix below.

    Thanks,

    tglx

    Index: linux-2.6/arch/x86/kernel/cpu/mcheck/mce-internal.h
    ===================================================================
    --- linux-2.6.orig/arch/x86/kernel/cpu/mcheck/mce-internal.h
    +++ linux-2.6/arch/x86/kernel/cpu/mcheck/mce-internal.h
    @@ -30,8 +30,10 @@ extern struct mce_bank *mce_banks;

    #ifdef CONFIG_X86_MCE_INTEL
    unsigned long mce_intel_adjust_timer(unsigned long interval);
    +void mce_intel_cmci_poll(void);
    #else
    # define mce_intel_adjust_timer mce_adjust_timer_default
    +static inline void mce_intel_cmci_poll(void) { }
    #endif

    void mce_timer_kick(unsigned long interval);
    Index: linux-2.6/arch/x86/kernel/cpu/mcheck/mce.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/kernel/cpu/mcheck/mce.c
    +++ linux-2.6/arch/x86/kernel/cpu/mcheck/mce.c
    @@ -1260,6 +1260,7 @@ static void mce_timer_fn(unsigned long d
    if (mce_available(__this_cpu_ptr(&cpu_info))) {
    machine_check_poll(MCP_TIMESTAMP,
    &__get_cpu_var(mce_poll_banks));
    + mce_intel_cmci_poll();
    }

    /*
    Index: linux-2.6/arch/x86/kernel/cpu/mcheck/mce_intel.c
    ===================================================================
    --- linux-2.6.orig/arch/x86/kernel/cpu/mcheck/mce_intel.c
    +++ linux-2.6/arch/x86/kernel/cpu/mcheck/mce_intel.c
    @@ -70,6 +70,13 @@ static int cmci_supported(int *banks)
    return !!(cap & MCG_CMCI_P);
    }

    +void mce_intel_cmci_poll(void)
    +{
    + if (__this_cpu_read(cmci_storm_state) == CMCI_STORM_NONE)
    + return;
    + machine_check_poll(MCP_TIMESTAMP, &__get_cpu_var(mce_banks_owned));
    +}
    +
    unsigned long mce_intel_adjust_timer(unsigned long interval)
    {
    if (interval < CMCI_POLL_INTERVAL)
    \
     
     \ /
      Last update: 2012-05-25 14:41    [W:0.052 / U:1.456 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site