Joerg Roedel 12e315
From: Yazen Ghannam <yazen.ghannam@amd.com>
Joerg Roedel 12e315
Date: Mon, 18 Dec 2017 12:37:12 +0100
Joerg Roedel 12e315
Subject: x86/MCE/AMD: Define a function to get SMCA bank type
Joerg Roedel 12e315
Git-commit: 11cf887728a3d1de77cc12ce247b64ef32608891
Joerg Roedel 12e315
Patch-mainline: v4.16-rc1
Joerg Roedel 12e315
References: bsc#1110006
Joerg Roedel 12e315
Joerg Roedel 12e315
Scalable MCA systems have various types of banks. The bank's type
Joerg Roedel 12e315
can determine how we handle errors from it. For example, if a bank
Joerg Roedel 12e315
represents a UMC (Unified Memory Controller) then we will need to
Joerg Roedel 12e315
convert its address from a normalized address to a system physical
Joerg Roedel 12e315
address before handling the error.
Joerg Roedel 12e315
Joerg Roedel 12e315
[ bp: Verify m->bank is within range and use bank pointer. ]
Joerg Roedel 12e315
Joerg Roedel 12e315
Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
Joerg Roedel 12e315
Signed-off-by: Borislav Petkov <bp@suse.de>
Joerg Roedel 12e315
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Joerg Roedel 12e315
Link: http://lkml.kernel.org/r/20171207203955.118171-1-Yazen.Ghannam@amd.com
Joerg Roedel 12e315
Joerg Roedel 12e315
Acked-by: Joerg Roedel <jroedel@suse.de>
Joerg Roedel 12e315
---
Joerg Roedel 12e315
 arch/x86/kernel/cpu/mcheck/mce_amd.c | 14 ++++++++++++++
Joerg Roedel 12e315
 1 file changed, 14 insertions(+)
Joerg Roedel 12e315
Joerg Roedel 12e315
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
Joerg Roedel 12e315
index a38ab1fa53a2..661c4738be27 100644
Joerg Roedel 12e315
--- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
Joerg Roedel 12e315
+++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
Joerg Roedel 12e315
@@ -110,6 +110,20 @@ const char *smca_get_long_name(enum smca_bank_types t)
Joerg Roedel 12e315
 }
Joerg Roedel 12e315
 EXPORT_SYMBOL_GPL(smca_get_long_name);
Joerg Roedel 12e315
 
Joerg Roedel 12e315
+static enum smca_bank_types smca_get_bank_type(struct mce *m)
Joerg Roedel 12e315
+{
Joerg Roedel 12e315
+	struct smca_bank *b;
Joerg Roedel 12e315
+
Joerg Roedel 12e315
+	if (m->bank >= N_SMCA_BANK_TYPES)
Joerg Roedel 12e315
+		return N_SMCA_BANK_TYPES;
Joerg Roedel 12e315
+
Joerg Roedel 12e315
+	b = &smca_banks[m->bank];
Joerg Roedel 12e315
+	if (!b->hwid)
Joerg Roedel 12e315
+		return N_SMCA_BANK_TYPES;
Joerg Roedel 12e315
+
Joerg Roedel 12e315
+	return b->hwid->bank_type;
Joerg Roedel 12e315
+}
Joerg Roedel 12e315
+
Joerg Roedel 12e315
 static struct smca_hwid smca_hwid_mcatypes[] = {
Joerg Roedel 12e315
 	/* { bank_type, hwid_mcatype, xec_bitmap } */
Joerg Roedel 12e315
 
Joerg Roedel 12e315