Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752559AbbEFRmA (ORCPT ); Wed, 6 May 2015 13:42:00 -0400 Received: from mail.skyhub.de ([78.46.96.112]:41189 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752430AbbEFRlz (ORCPT ); Wed, 6 May 2015 13:41:55 -0400 Date: Wed, 6 May 2015 19:41:50 +0200 From: Borislav Petkov To: Aravind Gopalakrishnan Cc: tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com, tony.luck@intel.com, jiang.liu@linux.intel.com, yinghai@kernel.org, x86@kernel.org, dvlasenk@redhat.com, JBeulich@suse.com, slaoub@gmail.com, luto@amacapital.net, dave.hansen@linux.intel.com, oleg@redhat.com, rostedt@goodmis.org, rusty@rustcorp.com.au, prarit@redhat.com, linux@rasmusvillemoes.dk, jroedel@suse.de, andriy.shevchenko@linux.intel.com, macro@linux-mips.org, wangnan0@huawei.com, linux-kernel@vger.kernel.org, linux-edac@vger.kernel.org, rric@kernel.org Subject: Re: [PATCH V2 1/6] x86/MCE/AMD: Factor out logging mechanism Message-ID: <20150506174150.GH22949@pd.tnic> References: <1430913538-1415-1-git-send-email-Aravind.Gopalakrishnan@amd.com> <1430913538-1415-2-git-send-email-Aravind.Gopalakrishnan@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <1430913538-1415-2-git-send-email-Aravind.Gopalakrishnan@amd.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3740 Lines: 133 On Wed, May 06, 2015 at 06:58:53AM -0500, Aravind Gopalakrishnan wrote: > Refactoring the code here to setup struct mce and call > mce_log() to log the error. > > No functional change is introduced. > > Doing this so we can use it later to log error when > deferred error interrupts happen. > > Suggested-by: Borislav Petkov > Signed-off-by: Aravind Gopalakrishnan > --- > arch/x86/kernel/cpu/mcheck/mce_amd.c | 30 ++++++++++++++++++++---------- > 1 file changed, 20 insertions(+), 10 deletions(-) > > diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c > index 55ad9b3..60ae315 100644 > --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c > +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c > @@ -264,6 +264,24 @@ init: > } > } > > +static void __log_error(unsigned int bank, bool is_thr, u64 misc) > +{ > + struct mce m; > + > + mce_setup(&m); > + rdmsrl(MSR_IA32_MCx_STATUS(bank), m.status); > + if (!(m.status & MCI_STATUS_VAL)) > + return; Yeah, let's save us the mce_setup() work in the !MCI_STATUS_VAL case: --- From: Aravind Gopalakrishnan Date: Wed, 6 May 2015 06:58:53 -0500 Subject: [PATCH] x86/mce/amd: Factor out logging mechanism Refactor the code here to setup struct mce and call mce_log() to log the error. We're going to reuse this in a later patch as part of the deferred error interrupt enablement. No functional change is introduced. Suggested-by: Borislav Petkov Signed-off-by: Aravind Gopalakrishnan Cc: Tony Luck Cc: x86-ml Cc: linux-edac Link: http://lkml.kernel.org/r/1430913538-1415-2-git-send-email-Aravind.Gopalakrishnan@amd.com Signed-off-by: Borislav Petkov --- arch/x86/kernel/cpu/mcheck/mce_amd.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c index 55ad9b37cae8..5f25de20db36 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c @@ -264,6 +264,27 @@ init: } } +static void __log_error(unsigned int bank, bool threshold_err, u64 misc) +{ + struct mce m; + u64 status; + + rdmsrl(MSR_IA32_MCx_STATUS(bank), status); + if (!(status & MCI_STATUS_VAL)) + return; + + mce_setup(&m); + + m.status = status; + m.bank = bank; + if (threshold_err) + m.misc = misc; + + mce_log(&m); + + wrmsrl(MSR_IA32_MCx_STATUS(bank), 0); +} + /* * APIC Interrupt Handler */ @@ -273,12 +294,12 @@ init: * the interrupt goes off when error_count reaches threshold_limit. * the handler will simply log mcelog w/ software defined bank number. */ + static void amd_threshold_interrupt(void) { u32 low = 0, high = 0, address = 0; int cpu = smp_processor_id(); unsigned int bank, block; - struct mce m; /* assume first bank caused it */ for (bank = 0; bank < mca_cfg.banks; ++bank) { @@ -321,15 +342,7 @@ static void amd_threshold_interrupt(void) return; log: - mce_setup(&m); - rdmsrl(MSR_IA32_MCx_STATUS(bank), m.status); - if (!(m.status & MCI_STATUS_VAL)) - return; - m.misc = ((u64)high << 32) | low; - m.bank = bank; - mce_log(&m); - - wrmsrl(MSR_IA32_MCx_STATUS(bank), 0); + __log_error(bank, true, ((u64)high << 32) | low); } /* -- 2.3.5 -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. -- -- 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/