x86/RAS: Hide SMCA bank names
Add accessor functions and hide the smca_names array. Also, add a sanity-check to bank HWID assignment in get_smca_bank_info(). Signed-off-by: Borislav Petkov <bp@suse.de> Link: http://lkml.kernel.org/r/20161104152317.5r276t35df53qk76@pd.tnic Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
committed by
Thomas Gleixner
parent
a9a1c0ee04
commit
c09a8c40e0
@@ -356,13 +356,6 @@ enum smca_bank_types {
|
|||||||
N_SMCA_BANK_TYPES
|
N_SMCA_BANK_TYPES
|
||||||
};
|
};
|
||||||
|
|
||||||
struct smca_bank_name {
|
|
||||||
const char *name; /* Short name for sysfs */
|
|
||||||
const char *long_name; /* Long name for pretty-printing */
|
|
||||||
};
|
|
||||||
|
|
||||||
extern struct smca_bank_name smca_names[N_SMCA_BANK_TYPES];
|
|
||||||
|
|
||||||
#define HWID_MCATYPE(hwid, mcatype) ((hwid << 16) | mcatype)
|
#define HWID_MCATYPE(hwid, mcatype) ((hwid << 16) | mcatype)
|
||||||
|
|
||||||
struct smca_hwid {
|
struct smca_hwid {
|
||||||
@@ -379,6 +372,7 @@ struct smca_bank {
|
|||||||
|
|
||||||
extern struct smca_bank smca_banks[MAX_NR_BANKS];
|
extern struct smca_bank smca_banks[MAX_NR_BANKS];
|
||||||
|
|
||||||
|
extern const char *smca_get_long_name(enum smca_bank_types t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _ASM_X86_MCE_H */
|
#endif /* _ASM_X86_MCE_H */
|
||||||
|
|||||||
@@ -69,7 +69,12 @@ static const char * const smca_umc_block_names[] = {
|
|||||||
"misc_umc"
|
"misc_umc"
|
||||||
};
|
};
|
||||||
|
|
||||||
struct smca_bank_name smca_names[] = {
|
struct smca_bank_name {
|
||||||
|
const char *name; /* Short name for sysfs */
|
||||||
|
const char *long_name; /* Long name for pretty-printing */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct smca_bank_name smca_names[] = {
|
||||||
[SMCA_LS] = { "load_store", "Load Store Unit" },
|
[SMCA_LS] = { "load_store", "Load Store Unit" },
|
||||||
[SMCA_IF] = { "insn_fetch", "Instruction Fetch Unit" },
|
[SMCA_IF] = { "insn_fetch", "Instruction Fetch Unit" },
|
||||||
[SMCA_L2_CACHE] = { "l2_cache", "L2 Cache" },
|
[SMCA_L2_CACHE] = { "l2_cache", "L2 Cache" },
|
||||||
@@ -84,7 +89,23 @@ struct smca_bank_name smca_names[] = {
|
|||||||
[SMCA_PSP] = { "psp", "Platform Security Processor" },
|
[SMCA_PSP] = { "psp", "Platform Security Processor" },
|
||||||
[SMCA_SMU] = { "smu", "System Management Unit" },
|
[SMCA_SMU] = { "smu", "System Management Unit" },
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL_GPL(smca_names);
|
|
||||||
|
const char *smca_get_name(enum smca_bank_types t)
|
||||||
|
{
|
||||||
|
if (t >= N_SMCA_BANK_TYPES)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return smca_names[t].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *smca_get_long_name(enum smca_bank_types t)
|
||||||
|
{
|
||||||
|
if (t >= N_SMCA_BANK_TYPES)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return smca_names[t].long_name;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(smca_get_long_name);
|
||||||
|
|
||||||
static struct smca_hwid smca_hwid_mcatypes[] = {
|
static struct smca_hwid smca_hwid_mcatypes[] = {
|
||||||
/* { bank_type, hwid_mcatype, xec_bitmap } */
|
/* { bank_type, hwid_mcatype, xec_bitmap } */
|
||||||
@@ -163,6 +184,11 @@ static void get_smca_bank_info(unsigned int bank)
|
|||||||
for (i = 0; i < ARRAY_SIZE(smca_hwid_mcatypes); i++) {
|
for (i = 0; i < ARRAY_SIZE(smca_hwid_mcatypes); i++) {
|
||||||
s_hwid = &smca_hwid_mcatypes[i];
|
s_hwid = &smca_hwid_mcatypes[i];
|
||||||
if (hwid_mcatype == s_hwid->hwid_mcatype) {
|
if (hwid_mcatype == s_hwid->hwid_mcatype) {
|
||||||
|
|
||||||
|
WARN(smca_banks[bank].hwid,
|
||||||
|
"Bank %s already initialized!\n",
|
||||||
|
smca_get_name(s_hwid->bank_type));
|
||||||
|
|
||||||
smca_banks[bank].hwid = s_hwid;
|
smca_banks[bank].hwid = s_hwid;
|
||||||
smca_banks[bank].id = instance_id;
|
smca_banks[bank].id = instance_id;
|
||||||
break;
|
break;
|
||||||
@@ -832,7 +858,7 @@ static const char *get_name(unsigned int bank, struct threshold_block *b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
snprintf(buf_mcatype, MAX_MCATYPE_NAME_LEN,
|
snprintf(buf_mcatype, MAX_MCATYPE_NAME_LEN,
|
||||||
"%s_%x", smca_names[bank_type].name,
|
"%s_%x", smca_get_name(bank_type),
|
||||||
smca_banks[bank].id);
|
smca_banks[bank].id);
|
||||||
return buf_mcatype;
|
return buf_mcatype;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -867,7 +867,7 @@ static void decode_smca_errors(struct mce *m)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
bank_type = hwid->bank_type;
|
bank_type = hwid->bank_type;
|
||||||
ip_name = smca_names[bank_type].long_name;
|
ip_name = smca_get_long_name(bank_type);
|
||||||
|
|
||||||
pr_emerg(HW_ERR "%s Extended Error Code: %d\n", ip_name, xec);
|
pr_emerg(HW_ERR "%s Extended Error Code: %d\n", ip_name, xec);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user