Commit c09a8c40 authored by Borislav Petkov's avatar Borislav Petkov Committed by Thomas Gleixner
Browse files

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: default avatarBorislav Petkov <bp@suse.de>
Link: http://lkml.kernel.org/r/20161104152317.5r276t35df53qk76@pd.tnic


Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent a9a1c0ee
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -356,13 +356,6 @@ enum 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)

struct smca_hwid {
@@ -379,6 +372,7 @@ struct smca_bank {

extern struct smca_bank smca_banks[MAX_NR_BANKS];

extern const char *smca_get_long_name(enum smca_bank_types t);
#endif

#endif /* _ASM_X86_MCE_H */
+29 −3
Original line number Diff line number Diff line
@@ -69,7 +69,12 @@ static const char * const smca_umc_block_names[] = {
	"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_IF]	= { "insn_fetch",	"Instruction Fetch Unit" },
	[SMCA_L2_CACHE]	= { "l2_cache",		"L2 Cache" },
@@ -84,7 +89,23 @@ struct smca_bank_name smca_names[] = {
	[SMCA_PSP]	= { "psp",		"Platform Security Processor" },
	[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[] = {
	/* { 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++) {
		s_hwid = &smca_hwid_mcatypes[i];
		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].id = instance_id;
			break;
@@ -832,7 +858,7 @@ static const char *get_name(unsigned int bank, struct threshold_block *b)
	}

	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);
	return buf_mcatype;
}
+1 −1
Original line number Diff line number Diff line
@@ -867,7 +867,7 @@ static void decode_smca_errors(struct mce *m)
		return;

	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);