Updates to EDAC and AMD MCE driver
Subsystems (3)
v3 cover Updates to EDAC and AMD MCE driver
This patchset mainly provides necessary EDAC bits to decode errors occuring on Scalable MCA enabled processors and also updates AMD MCE driver to program the correct MCx_MISC register address for upcoming processors.
Patches 1, 2 and 3 are for upcoming processor.
Patches 4 and 5 are either fixing or adding comments to help in understanding the code and do not introduce any functional changes.
Patch 1: Move MSR definition to mce.h
Patch 2: Updates to EDAC driver to decode the new error signatures Patch 3: Fix logic to obtain correct block address
Patch 4: Fix deferred error comment
Patch 5: Add comments to amd_nb.h to describe threshold_block structure
Note 1: Introduced new patch for moving MCx_CONFIG MSR to mce.h Note 2: The enums, amd_hwids[], and string arrays amd_core_mcablock_names[],
amd_df_mcablock_names[] are placed in arch/x86 as there are follow-up patches which use them here.
Changes from V1: (per Boris suggestions)
- Simplify error decoding routines
- Move headers to mce.h
- Rename enumerations and struct members (to be more descriptive)
- Drop gerund usage
- Remove comments that are spelling out the code
Changes from V2: (per Boris suggestions)
- Incorporated all changes as suggested by Boris from here-
- http://marc.info/?l=linux-kernel&m=145691594921586&w=2
- http://marc.info/?l=linux-kernel&m=145691606221610&w=2
- http://marc.info/?l=linux-kernel&m=145691610421627&w=2
- No functional change is introduced
Aravind Gopalakrishnan (5):
x86/mce: Move MCx_CONFIG MSR definition
EDAC, MCE, AMD: Enable error decoding of Scalable MCA errors x86/mce/AMD: Fix logic to obtain block address x86/mce: Clarify comments regarding deferred error x86/mce/AMD: Add comments for easier understanding
arch/x86/include/asm/amd_nb.h | 18 +- arch/x86/include/asm/mce.h | 69 +++++++- arch/x86/include/asm/msr-index.h | 4 - arch/x86/kernel/cpu/mcheck/mce_amd.c | 127 +++++++++---- drivers/edac/mce_amd.c | 334 ++++++++++++++++++++++++++++++++++- 5 files changed, 501 insertions(+), 51 deletions(-)
Signature · 1 line
2.7.0
PATCH v3 1/5 x86/mce: Move MCx_CONFIG MSR definition
Since this is contained to only MCE code, move the MSR definiton there instead of adding to msr-index
Per discussion here:
http://marc.info/?l=linux-kernel&m=145633699026474&w=2
--- arch/x86/include/asm/mce.h | 4 ++++ arch/x86/include/asm/msr-index.h | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-)
arch/x86/include/asm/mce.h +4 -0
@@ -91,6 +91,10 @@#define MCE_LOG_LEN 32#define MCE_LOG_SIGNATURE "MACHINECHECK" +/* 'SMCA': AMD64 Scalable MCA */ +#define MSR_AMD64_SMCA_MC0_CONFIG 0xc0002004 +#define MSR_AMD64_SMCA_MCx_CONFIG (x) (MSR_AMD64_SMCA_MC0_CONFIG + 0x10*(x)) +/* * This structure contains all data related to the MCE log. Also * carries a signature to make it easier to find from external
arch/x86/include/asm/msr-index.h +0 -4
@@ -269,10 +269,6 @@#define MSR_IA32_MC0_CTL2 0x00000280#define MSR_IA32_MCx_CTL2 (x) (MSR_IA32_MC0_CTL2 + (x)) -/* 'SMCA': AMD64 Scalable MCA */ -#define MSR_AMD64_SMCA_MC0_CONFIG 0xc0002004 -#define MSR_AMD64_SMCA_MCx_CONFIG (x) (MSR_AMD64_SMCA_MC0_CONFIG + 0x10*(x)) -#define MSR_P6_PERFCTR0 0x000000c1#define MSR_P6_PERFCTR1 0x000000c2#define MSR_P6_EVNTSEL0 0x00000186
Signature · 1 line
2.7.0
PATCH v3 2/5 EDAC, MCE, AMD: Enable error decoding of Scalable MCA errors
In reply to Aravind GopalakrishnanFor Scalable MCA enabled processors, errors are listed per IP block. And since it is not required for an IP to map to a particular bank, we need to use HWID and McaType values from the MCx_IPID register to figure out which IP a given bank represents.
We also have a new bit (TCC) in the MCx_STATUS register to indicate Task context is corrupt.
Add logic here to decode errors from all known IP blocks for Fam17h Model 00-0fh and to print TCC errors.
--- arch/x86/include/asm/mce.h | 59 +++++++ arch/x86/kernel/cpu/mcheck/mce_amd.c | 30 ++++ drivers/edac/mce_amd.c | 334 ++++++++++++++++++++++++++++++++++- 3 files changed, 420 insertions(+), 3 deletions(-)
arch/x86/include/asm/mce.h +59 -0
@@ -42,6 +42,18 @@/* AMD-specific bits */ #define MCI_STATUS_DEFERRED (1ULL<<44)/* declare an uncorrected error */ #define MCI_STATUS_POISON (1ULL<<43)/* access poisonous data */ +#define MCI_STATUS_TCC (1ULL<<55)/* Task context corrupt */ + +/* +* McaX field if set indicates a given bank supports MCA extensions: +* - Deferred error interrupt type is specifiable by bank. +* - MCx_MISC0[BlkPtr] field indicates presence of extended MISC registers, +* But should not be used to determine MSR numbers. +* - TCC bit is present in MCx_STATUS. +*/ +#define MCI_CONFIG_MCAX 0x1 +#define MCI_IPID_MCATYPE 0xFFFF0000 +#define MCI_IPID_HWID 0xFFF/* * Note that the full MCACOD field of IA32_MCi_STATUS MSR is
@@ -93,7 +105,9 @@/* 'SMCA': AMD64 Scalable MCA */ #define MSR_AMD64_SMCA_MC0_CONFIG 0xc0002004 +#define MSR_AMD64_SMCA_MC0_IPID 0xc0002005#define MSR_AMD64_SMCA_MCx_CONFIG (x) (MSR_AMD64_SMCA_MC0_CONFIG + 0x10*(x)) +#define MSR_AMD64_SMCA_MCx_IPID (x) (MSR_AMD64_SMCA_MC0_IPID + 0x10*(x))/* * This structure contains all data related to the MCE log. Also
@@ -292,4 +306,49 @@ struct cper_sec_mem_err;extern void apei_mce_report_mem_error (int corrected,struct cper_sec_mem_err *mem_err); +/* +* Enumerate new IP types and HWID values in AMD processors which support +* Scalable MCA. +*/ +#ifdef CONFIG_X86_MCE_AMD +enum amd_ip_types { +SMCA_F17H_CORE =0 ,/* Core errors */ +SMCA_DF ,/* Data Fabric */ +SMCA_UMC ,/* Unified Memory Controller */ +SMCA_PB ,/* Parameter Block */ +SMCA_PSP ,/* Platform Security Processor */ +SMCA_SMU ,/* System Management Unit */ +N_AMD_IP_TYPES +}; + +struct amd_hwid { +const char *name; +unsigned int hwid; +}; + +extern struct amd_hwid amd_hwids[N_AMD_IP_TYPES ]; + +enum amd_core_mca_blocks { +SMCA_LS =0 ,/* Load Store */ +SMCA_IF ,/* Instruction Fetch */ +SMCA_L2_CACHE ,/* L2 cache */ +SMCA_DE ,/* Decoder unit */ +RES ,/* Reserved */ +SMCA_EX ,/* Execution unit */ +SMCA_FP ,/* Floating Point */ +SMCA_L3_CACHE ,/* L3 cache */ +N_CORE_MCA_BLOCKS +}; + +extern const char *const amd_core_mcablock_names[N_CORE_MCA_BLOCKS ]; + +enum amd_df_mca_blocks { +SMCA_CS =0 ,/* Coherent Slave */ +SMCA_PIE ,/* Power management, Interrupts, etc */ +N_DF_BLOCKS +}; + +extern const char *const amd_df_mcablock_names[N_DF_BLOCKS ]; +#endif +#endif /* _ASM_X86_MCE_H */
arch/x86/kernel/cpu/mcheck/mce_amd.c +30 -0
@@ -71,6 +71,36 @@ static const char * const th_names[] = { "execution_unit", }; +/* Define HWID to IP type mappings for Scalable MCA */ +struct amd_hwid amd_hwids[] = +{ + [SMCA_F17H_CORE ] = {"f17h_core" ,0xB0 }, + [SMCA_DF ] = {"data_fabric" ,0x2E }, + [SMCA_UMC ] = {"umc" ,0x96 }, + [SMCA_PB ] = {"param_block" ,0x5 }, + [SMCA_PSP ] = {"psp" ,0xFF }, + [SMCA_SMU ] = {"smu" ,0x1 }, +}; +EXPORT_SYMBOL_GPL (amd_hwids); + +const char *const amd_core_mcablock_names[] = { + [SMCA_LS ] ="load_store" , + [SMCA_IF ] ="insn_fetch" , + [SMCA_L2_CACHE ] ="l2_cache" , + [SMCA_DE ] ="decode_unit" , + [RES ] ="" , + [SMCA_EX ] ="execution_unit" , + [SMCA_FP ] ="floating_point" , + [SMCA_L3_CACHE ] ="l3_cache" , +}; +EXPORT_SYMBOL_GPL (amd_core_mcablock_names); + +const char *const amd_df_mcablock_names[] = { + [SMCA_CS ] ="coherent_slave" , + [SMCA_PIE ] ="pie" , +}; +EXPORT_SYMBOL_GPL (amd_df_mcablock_names); + static DEFINE_PER_CPU(struct threshold_bank **, threshold_banks); static DEFINE_PER_CPU(unsigned char, bank_map); /* see which banks are on */
drivers/edac/mce_amd.c +331 -3
388 lines not on this page · raw message
Signature · 1 line
2.7.0
tip-bot for Aravind Gopalakrishnan
merge bot[tip:ras/core] x86/mce/AMD, EDAC: Enable error decoding of Scalable MCA errors
x86/mce/AMD, EDAC: Enable error decoding of Scalable MCA errors
Commit-ID: be0aec23bf4624fd55650629fe8df20483487049 Gitweb: http://git.kernel.org/tip/be0aec23bf4624fd55650629fe8df20483487049 Author: Aravind Gopalakrishnan <[email protected]> AuthorDate: Mon, 7 Mar 2016 14:02:18 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 8 Mar 2016 11:48:14 +0100
x86/mce/AMD, EDAC: Enable error decoding of Scalable MCA errors
For Scalable MCA enabled processors, errors are listed per IP block. And since it is not required for an IP to map to a particular bank, we need to use HWID and McaType values from the MCx_IPID register to figure out which IP a given bank represents.
We also have a new bit (TCC) in the MCx_STATUS register to indicate Task context is corrupt.
Add logic here to decode errors from all known IP blocks for Fam17h Model 00-0fh and to print TCC errors.
--- arch/x86/include/asm/mce.h | 59 ++++++ arch/x86/kernel/cpu/mcheck/mce_amd.c | 29 +++ drivers/edac/mce_amd.c | 335 ++++++++++++++++++++++++++++++++++- 3 files changed, 420 insertions(+), 3 deletions(-)
arch/x86/include/asm/mce.h +59 -0
@@ -42,6 +42,18 @@/* AMD-specific bits */ #define MCI_STATUS_DEFERRED (1ULL<<44)/* declare an uncorrected error */ #define MCI_STATUS_POISON (1ULL<<43)/* access poisonous data */ +#define MCI_STATUS_TCC (1ULL<<55)/* Task context corrupt */ + +/* +* McaX field if set indicates a given bank supports MCA extensions: +* - Deferred error interrupt type is specifiable by bank. +* - MCx_MISC0[BlkPtr] field indicates presence of extended MISC registers, +* But should not be used to determine MSR numbers. +* - TCC bit is present in MCx_STATUS. +*/ +#define MCI_CONFIG_MCAX 0x1 +#define MCI_IPID_MCATYPE 0xFFFF0000 +#define MCI_IPID_HWID 0xFFF/* * Note that the full MCACOD field of IA32_MCi_STATUS MSR is
@@ -93,7 +105,9 @@/* AMD Scalable MCA */ #define MSR_AMD64_SMCA_MC0_CONFIG 0xc0002004 +#define MSR_AMD64_SMCA_MC0_IPID 0xc0002005#define MSR_AMD64_SMCA_MCx_CONFIG (x) (MSR_AMD64_SMCA_MC0_CONFIG + 0x10*(x)) +#define MSR_AMD64_SMCA_MCx_IPID (x) (MSR_AMD64_SMCA_MC0_IPID + 0x10*(x))/* * This structure contains all data related to the MCE log. Also
@@ -291,4 +305,49 @@ struct cper_sec_mem_err;extern void apei_mce_report_mem_error (int corrected,struct cper_sec_mem_err *mem_err); +/* +* Enumerate new IP types and HWID values in AMD processors which support +* Scalable MCA. +*/ +#ifdef CONFIG_X86_MCE_AMD +enum amd_ip_types { +SMCA_F17H_CORE =0 ,/* Core errors */ +SMCA_DF ,/* Data Fabric */ +SMCA_UMC ,/* Unified Memory Controller */ +SMCA_PB ,/* Parameter Block */ +SMCA_PSP ,/* Platform Security Processor */ +SMCA_SMU ,/* System Management Unit */ +N_AMD_IP_TYPES +}; + +struct amd_hwid { +const char *name; +unsigned int hwid; +}; + +extern struct amd_hwid amd_hwids[N_AMD_IP_TYPES ]; + +enum amd_core_mca_blocks { +SMCA_LS =0 ,/* Load Store */ +SMCA_IF ,/* Instruction Fetch */ +SMCA_L2_CACHE ,/* L2 cache */ +SMCA_DE ,/* Decoder unit */ +RES ,/* Reserved */ +SMCA_EX ,/* Execution unit */ +SMCA_FP ,/* Floating Point */ +SMCA_L3_CACHE ,/* L3 cache */ +N_CORE_MCA_BLOCKS +}; + +extern const char *const amd_core_mcablock_names[N_CORE_MCA_BLOCKS ]; + +enum amd_df_mca_blocks { +SMCA_CS =0 ,/* Coherent Slave */ +SMCA_PIE ,/* Power management, Interrupts, etc */ +N_DF_BLOCKS +}; + +extern const char *const amd_df_mcablock_names[N_DF_BLOCKS ]; +#endif +#endif /* _ASM_X86_MCE_H */
arch/x86/kernel/cpu/mcheck/mce_amd.c +29 -0
@@ -71,6 +71,35 @@ static const char * const th_names[] = { "execution_unit", }; +/* Define HWID to IP type mappings for Scalable MCA */ +struct amd_hwid amd_hwids[] = { + [SMCA_F17H_CORE ] = {"f17h_core" ,0xB0 }, + [SMCA_DF ] = {"data_fabric" ,0x2E }, + [SMCA_UMC ] = {"umc" ,0x96 }, + [SMCA_PB ] = {"param_block" ,0x5 }, + [SMCA_PSP ] = {"psp" ,0xFF }, + [SMCA_SMU ] = {"smu" ,0x1 }, +}; +EXPORT_SYMBOL_GPL (amd_hwids); + +const char *const amd_core_mcablock_names[] = { + [SMCA_LS ] ="load_store" , + [SMCA_IF ] ="insn_fetch" , + [SMCA_L2_CACHE ] ="l2_cache" , + [SMCA_DE ] ="decode_unit" , + [RES ] ="" , + [SMCA_EX ] ="execution_unit" , + [SMCA_FP ] ="floating_point" , + [SMCA_L3_CACHE ] ="l3_cache" , +}; +EXPORT_SYMBOL_GPL (amd_core_mcablock_names); + +const char *const amd_df_mcablock_names[] = { + [SMCA_CS ] ="coherent_slave" , + [SMCA_PIE ] ="pie" , +}; +EXPORT_SYMBOL_GPL (amd_df_mcablock_names); + static DEFINE_PER_CPU(struct threshold_bank **, threshold_banks); static DEFINE_PER_CPU(unsigned char, bank_map); /* see which banks are on */
drivers/edac/mce_amd.c +332 -3
389 lines not on this page · raw message
PATCH v3 3/5 x86/mce/AMD: Fix logic to obtain block address
In reply to Aravind GopalakrishnanIn upcoming processors, the BLKPTR field is no longer used to indicate the MSR number of the additional register. Insted, it simply indicates the prescence of additional MSRs.
Fixing the logic here to gather MSR address from MSR_AMD64_SMCA_MCx_MISC() for newer processors and we fall back to existing logic for older processors.
--- arch/x86/include/asm/mce.h | 4 ++ arch/x86/kernel/cpu/mcheck/mce_amd.c | 90 ++++++++++++++++++++++++------------ 2 files changed, 65 insertions(+), 29 deletions(-)
arch/x86/include/asm/mce.h +4 -0
@@ -104,10 +104,14 @@#define MCE_LOG_SIGNATURE "MACHINECHECK"/* 'SMCA': AMD64 Scalable MCA */ +#define MSR_AMD64_SMCA_MC0_MISC0 0xc0002003#define MSR_AMD64_SMCA_MC0_CONFIG 0xc0002004#define MSR_AMD64_SMCA_MC0_IPID 0xc0002005 +#define MSR_AMD64_SMCA_MC0_MISC1 0xc000200a +#define MSR_AMD64_SMCA_MCx_MISC (x) (MSR_AMD64_SMCA_MC0_MISC0 + 0x10*(x))#define MSR_AMD64_SMCA_MCx_CONFIG (x) (MSR_AMD64_SMCA_MC0_CONFIG + 0x10*(x))#define MSR_AMD64_SMCA_MCx_IPID (x) (MSR_AMD64_SMCA_MC0_IPID + 0x10*(x)) +#define MSR_AMD64_SMCA_MCx_MISCy (x, y) ((MSR_AMD64_SMCA_MC0_MISC1 + y) + (0x10*(x)))/* * This structure contains all data related to the MCE log. Also
arch/x86/kernel/cpu/mcheck/mce_amd.c +61 -29
115 lines not on this page · raw message
Signature · 1 line
2.7.0
tip-bot for Aravind Gopalakrishnan
merge bot[tip:ras/core] x86/mce/AMD: Fix logic to obtain block address
x86/mce/AMD: Fix logic to obtain block address
Commit-ID: 8dd1e17a55b0bb1206c71c7a4344c5e3037cdf65 Gitweb: http://git.kernel.org/tip/8dd1e17a55b0bb1206c71c7a4344c5e3037cdf65 Author: Aravind Gopalakrishnan <[email protected]> AuthorDate: Mon, 7 Mar 2016 14:02:19 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 8 Mar 2016 11:48:14 +0100
x86/mce/AMD: Fix logic to obtain block address
In upcoming processors, the BLKPTR field is no longer used to indicate the MSR number of the additional register. Insted, it simply indicates the prescence of additional MSRs.
Fix the logic here to gather MSR address from MSR_AMD64_SMCA_MCx_MISC() for newer processors and fall back to existing logic for older processors.
--- arch/x86/include/asm/mce.h | 4 ++ arch/x86/kernel/cpu/mcheck/mce_amd.c | 84 +++++++++++++++++++++++------------- 2 files changed, 59 insertions(+), 29 deletions(-)
arch/x86/include/asm/mce.h +4 -0
@@ -104,10 +104,14 @@#define MCE_LOG_SIGNATURE "MACHINECHECK"/* AMD Scalable MCA */ +#define MSR_AMD64_SMCA_MC0_MISC0 0xc0002003#define MSR_AMD64_SMCA_MC0_CONFIG 0xc0002004#define MSR_AMD64_SMCA_MC0_IPID 0xc0002005 +#define MSR_AMD64_SMCA_MC0_MISC1 0xc000200a +#define MSR_AMD64_SMCA_MCx_MISC (x) (MSR_AMD64_SMCA_MC0_MISC0 + 0x10*(x))#define MSR_AMD64_SMCA_MCx_CONFIG (x) (MSR_AMD64_SMCA_MC0_CONFIG + 0x10*(x))#define MSR_AMD64_SMCA_MCx_IPID (x) (MSR_AMD64_SMCA_MC0_IPID + 0x10*(x)) +#define MSR_AMD64_SMCA_MCx_MISCy (x, y) ((MSR_AMD64_SMCA_MC0_MISC1 + y) + (0x10*(x)))/* * This structure contains all data related to the MCE log. Also
arch/x86/kernel/cpu/mcheck/mce_amd.c +55 -29
109 lines not on this page · raw message
PATCH v3 4/5 x86/mce: Clarify comments regarding deferred error
In reply to Aravind GopalakrishnanThe Deferred field indicates if we have a Deferred error. Deferred errors indicate errors that hardware could not fix. But it still does not cause any interruption to program flow. So it does not generate any #MC and UC bit in MCx_STATUS is not set.
Fixing comment here. No functional change
--- arch/x86/include/asm/mce.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/include/asm/mce.h +1 -1
@@ -40,7 +40,7 @@#define MCI_STATUS_AR (1ULL<<55)/* Action required */ /* AMD-specific bits */ -#define MCI_STATUS_DEFERRED (1ULL<<44)/* declare an uncorrected error */ +#define MCI_STATUS_DEFERRED (1ULL<<44)/* uncorrected error, deferred exception */ #define MCI_STATUS_POISON (1ULL<<43)/* access poisonous data */ #define MCI_STATUS_TCC (1ULL<<55)/* Task context corrupt */
Signature · 1 line
2.7.0
tip-bot for Aravind Gopalakrishnan
merge bot[tip:ras/core] x86/mce: Clarify comments regarding deferred error
x86/mce: Clarify comments regarding deferred error
Commit-ID: 2cd3b5f9033f0b051842a279dac5a54271cbd3c8 Gitweb: http://git.kernel.org/tip/2cd3b5f9033f0b051842a279dac5a54271cbd3c8 Author: Aravind Gopalakrishnan <[email protected]> AuthorDate: Mon, 7 Mar 2016 14:02:20 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 8 Mar 2016 11:48:15 +0100
x86/mce: Clarify comments regarding deferred error
Deferred errors indicate errors that hardware could not fix. But it still does not cause any interruption to program flow. So it does not generate any #MC and UC bit in MCx_STATUS is not set.
Correct comment.
--- arch/x86/include/asm/mce.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/include/asm/mce.h +1 -1
@@ -40,7 +40,7 @@#define MCI_STATUS_AR (1ULL<<55)/* Action required */ /* AMD-specific bits */ -#define MCI_STATUS_DEFERRED (1ULL<<44)/* declare an uncorrected error */ +#define MCI_STATUS_DEFERRED (1ULL<<44)/* uncorrected error, deferred exception */ #define MCI_STATUS_POISON (1ULL<<43)/* access poisonous data */ #define MCI_STATUS_TCC (1ULL<<55)/* Task context corrupt */
PATCH v3 5/5 x86/mce/AMD: Add comments for easier understanding
In reply to Aravind GopalakrishnanIn an attempt to aid in understanding of what the threshold_block structure holds, provide comments to describe the members here. Also, trim comments around threshold_restart_bank()
and update copyright info.
No functional change is introduced.
--- arch/x86/include/asm/amd_nb.h | 18 +++++++++--------- arch/x86/kernel/cpu/mcheck/mce_amd.c | 7 ++----- 2 files changed, 11 insertions(+), 14 deletions(-)
arch/x86/include/asm/amd_nb.h +9 -9
@@ -27,15 +27,15 @@ struct amd_l3_cache { };struct threshold_block { -unsigned int block; -unsigned int bank; -unsigned int cpu; -u32 address; -u16 interrupt_enable; -bool interrupt_capable; -u16 threshold_limit; -struct kobject kobj; -struct list_head miscj; +unsigned int block;/* Threshold block number within bank */ +unsigned int bank;/* MCA bank the block belongs to */ +unsigned int cpu;/* CPU which controls the MCA bank */ +u32 address;/* MSR address for the block */ +u16 interrupt_enable;/* Enable/ Disable APIC interrupt upon threshold error */ +bool interrupt_capable;/* Specifies if interrupt is possible from the block */ +u16 threshold_limit;/* Value upon which threshold interrupt is generated */ +struct kobject kobj;/* sysfs object */ +struct list_head miscj;/* Add multiple threshold blocks within a bank to the list */ };struct threshold_bank {
arch/x86/kernel/cpu/mcheck/mce_amd.c +2 -5
@@ -1,5 +1,5 @@/* -* (c) 2005-2015 Advanced Micro Devices, Inc. +* (c) 2005-2016 Advanced Micro Devices, Inc. * Your use of this code is subject to the terms and conditions of the * GNU general public license version 2. See "COPYING" or * http://www.gnu.org/licenses/gpl.html
@@ -202,10 +202,7 @@ static int lvt_off_valid(struct threshold_block *b, int apic, u32 lo, u32 hi)return 1 ; }; -/* -* Called via smp_call_function_single(), must be called with correct -* cpu affinity. -*/ +/* Reprogram MCx_MISC MSR behind this threshold bank */ static void threshold_restart_bank (void *_tr) {struct thresh_restart *tr = _tr;
Signature · 1 line
2.7.0
tip-bot for Aravind Gopalakrishnan
merge bot[tip:ras/core] x86/mce/AMD: Document some functionality
x86/mce/AMD: Document some functionality
Commit-ID: ea2ca36b658cfc6081ee454e97593c81f646806e Gitweb: http://git.kernel.org/tip/ea2ca36b658cfc6081ee454e97593c81f646806e Author: Aravind Gopalakrishnan <[email protected]> AuthorDate: Mon, 7 Mar 2016 14:02:21 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 8 Mar 2016 11:48:15 +0100
x86/mce/AMD: Document some functionality
In an attempt to aid in understanding of what the threshold_block structure holds, provide comments to describe the members here. Also, trim comments around threshold_restart_bank() and update copyright info.
No functional change is introduced.
--- arch/x86/include/asm/amd_nb.h | 26 +++++++++++++++++--------- arch/x86/kernel/cpu/mcheck/mce_amd.c | 7 ++----- 2 files changed, 19 insertions(+), 14 deletions(-)
arch/x86/include/asm/amd_nb.h +17 -9
@@ -27,15 +27,23 @@ struct amd_l3_cache { };struct threshold_block { -unsigned int block; -unsigned int bank; -unsigned int cpu; -u32 address; -u16 interrupt_enable; -bool interrupt_capable; -u16 threshold_limit; -struct kobject kobj; -struct list_head miscj; +unsigned int block;/* Number within bank */ +unsigned int bank;/* MCA bank the block belongs to */ +unsigned int cpu;/* CPU which controls MCA bank */ +u32 address;/* MSR address for the block */ +u16 interrupt_enable;/* Enable/Disable APIC interrupt */ +bool interrupt_capable;/* Bank can generate an interrupt. */ + +u16 threshold_limit;/* +* Value upon which threshold +* interrupt is generated. +*/ + +struct kobject kobj;/* sysfs object */ +struct list_head miscj;/* +* List of threshold blocks +* within a bank. +*/ };struct threshold_bank {
arch/x86/kernel/cpu/mcheck/mce_amd.c +2 -5
@@ -1,5 +1,5 @@/* -* (c) 2005-2015 Advanced Micro Devices, Inc. +* (c) 2005-2016 Advanced Micro Devices, Inc. * Your use of this code is subject to the terms and conditions of the * GNU general public license version 2. See "COPYING" or * http://www.gnu.org/licenses/gpl.html
@@ -201,10 +201,7 @@ static int lvt_off_valid(struct threshold_block *b, int apic, u32 lo, u32 hi)return 1 ; }; -/* -* Called via smp_call_function_single(), must be called with correct -* cpu affinity. -*/ +/* Reprogram MCx_MISC MSR behind this threshold bank. */ static void threshold_restart_bank (void *_tr) {struct thresh_restart *tr = _tr;
Quoted 42 lines · Aravind Gopalakrishnan
This patchset mainly provides necessary EDAC bits to decode errors occuring on Scalable MCA enabled processors and also updates AMD MCE driver to program the correct
MCx_MISCregister address for upcoming processors.Patches 1, 2 and 3 are for upcoming processor.
Patches 4 and 5 are either fixing or adding comments to help in understanding the code and do not introduce any functional changes.
Patch 1: Move MSR definition to
mce.h
Patch 2: Updates to EDAC driver to decode the new error signatures Patch 3: Fix logic to obtain correct block address
Patch 4: Fix deferred error comment
Patch 5: Add comments toamd_nb.hto describethreshold_blockstructureNote 1: Introduced new patch for moving
MCx_CONFIGMSR tomce.hNote 2: The enums, amd_hwids[], and string arrays amd_core_mcablock_names[],amd_df_mcablock_names[] are placed in arch/x86 as there are follow-up patches which use them here.Changes from V1: (per Boris suggestions)
- Simplify error decoding routines
- Move headers tomce.h
- Rename enumerations and struct members (to be more descriptive)
- Drop gerund usage
- Remove comments that are spelling out the codeChanges from V2: (per Boris suggestions)
- Incorporated all changes as suggested by Boris from here-
- http://marc.info/?l=linux-kernel&m=145691594921586&w=2
- http://marc.info/?l=linux-kernel&m=145691606221610&w=2
- http://marc.info/?l=linux-kernel&m=145691610421627&w=2
- No functional change is introducedAravind Gopalakrishnan (5):
x86/mce: MoveMCx_CONFIGMSR definition
EDAC, MCE, AMD: Enable error decoding of Scalable MCA errors x86/mce/AMD: Fix logic to obtain block address x86/mce: Clarify comments regarding deferred error x86/mce/AMD: Add comments for easier understanding
Quoted 6 lines
arch/x86/include/asm/amd_nb.h | 18 +- arch/x86/include/asm/mce.h | 69 +++++++- arch/x86/include/asm/msr-index.h | 4 - arch/x86/kernel/cpu/mcheck/mce_amd.c | 127 +++++++++---- drivers/edac/mce_amd.c | 334 ++++++++++++++++++++++++++++++++++- 5 files changed, 501 insertions(+), 51 deletions(-)
Applied, minor stuff corrected and pushed out to
http://git.kernel.org/cgit/linux/kernel/git/bp/bp.git/log/?h=tip-ras
so that the 0day bot can chew on them a little.
Thanks.
Signature · 4 lines
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.Quoted 8 lines · Borislav Petkov
Applied, minor stuff corrected and pushed out to
http://git.kernel.org/cgit/linux/kernel/git/bp/bp.git/log/?h=tip-ras
so that the 0day bot can chew on them a little.
Thanks!
-Aravind.