]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
x86/mce/amd: Add default names for MCA banks and blocks
authorYazen Ghannam <yazen.ghannam@amd.com>
Wed, 23 Jul 2025 04:24:51 +0000 (00:24 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Aug 2025 14:21:34 +0000 (16:21 +0200)
[ 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

index 816b3d0512bad781823eb8be65412edb9a8982b3..ad71f5a7faf0328140868d770a0e47d1348f3dec 100644 (file)
@@ -1180,13 +1180,20 @@ static const char *get_name(unsigned int bank, struct threshold_block *b)
        }
 
        bank_type = smca_get_bank_type(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 (smca_banks[bank].hwid->count == 1)