| From stable+bounces-164358-greg=kroah.com@vger.kernel.org Wed Jul 23 04:30:26 2025 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 22 Jul 2025 22:30:16 -0400 |
| Subject: x86/mce/amd: Add default names for MCA banks and blocks |
| To: stable@vger.kernel.org |
| Cc: Yazen Ghannam <yazen.ghannam@amd.com>, Borislav Petkov <bp@alien8.de>, Sasha Levin <sashal@kernel.org> |
| Message-ID: <20250723023016.1031080-1-sashal@kernel.org> |
| |
| From: Yazen Ghannam <yazen.ghannam@amd.com> |
| |
| [ Upstream commit d66e1e90b16055d2f0ee76e5384e3f119c3c2773 ] |
| |
| Ensure that sysfs init doesn't fail for new/unrecognized bank types or if |
| a bank has additional blocks available. |
| |
| Most MCA banks have a single thresholding block, so the block takes the same |
| name as the bank. |
| |
| Unified Memory Controllers (UMCs) are a special case where there are two |
| blocks and each has a unique name. |
| |
| However, the microarchitecture allows for five blocks. Any new MCA bank types |
| with more than one block will be missing names for the extra blocks. The MCE |
| sysfs will fail to initialize in this case. |
| |
| Fixes: 87a6d4091bd7 ("x86/mce/AMD: Update sysfs bank names for SMCA systems") |
| Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com> |
| Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> |
| Cc: stable@vger.kernel.org |
| Link: https://lore.kernel.org/20250624-wip-mca-updates-v4-3-236dd74f645f@amd.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kernel/cpu/mce/amd.c | 13 ++++++++++--- |
| 1 file changed, 10 insertions(+), 3 deletions(-) |
| |
| --- a/arch/x86/kernel/cpu/mce/amd.c |
| +++ b/arch/x86/kernel/cpu/mce/amd.c |
| @@ -1052,13 +1052,20 @@ static const char *get_name(unsigned int |
| } |
| |
| bank_type = smca_get_bank_type(cpu, bank); |
| - if (bank_type >= N_SMCA_BANK_TYPES) |
| - return NULL; |
| |
| if (b && bank_type == SMCA_UMC) { |
| if (b->block < ARRAY_SIZE(smca_umc_block_names)) |
| return smca_umc_block_names[b->block]; |
| - return NULL; |
| + } |
| + |
| + if (b && b->block) { |
| + snprintf(buf_mcatype, MAX_MCATYPE_NAME_LEN, "th_block_%u", b->block); |
| + return buf_mcatype; |
| + } |
| + |
| + if (bank_type >= N_SMCA_BANK_TYPES) { |
| + snprintf(buf_mcatype, MAX_MCATYPE_NAME_LEN, "th_bank_%u", bank); |
| + return buf_mcatype; |
| } |
| |
| if (per_cpu(smca_bank_counts, cpu)[bank_type] == 1) |