Messages in this thread Patch in this message | | | From | Yazen Ghannam <> | Subject | [PATCH v2 02/16] x86/mce: Use mce_setup() helpers for apei_smca_report_x86_error() | Date | Thu, 4 Apr 2024 10:13:45 -0500 |
| |
Current AMD systems may report MCA errors using the ACPI Boot Error Record Table (BERT). The BERT entries for MCA errors will be an x86 Common Platform Error Record (CPER) with an MSR register context that matches the MCAX/SMCA register space.
However, the BERT will not necessarily be processed on the CPU that reported the MCA errors. Therefore, the correct CPU number needs to be determined and the information saved in struct mce.
The CPU number is determined by searching all possible CPUs for a Local APIC ID matching the value in the x86 CPER.
Use the newly defined mce_setup_*() helpers to get the correct data.
Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com> ---
Notes: Link: https://lkml.kernel.org/r/20231118193248.1296798-4-yazen.ghannam@amd.com v1->v2: * Trim commit message (Boris) * Rebase on earlier changes (Yazen)
arch/x86/kernel/cpu/mce/apei.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/arch/x86/kernel/cpu/mce/apei.c b/arch/x86/kernel/cpu/mce/apei.c index 7f7309ff67d0..e4e32e337110 100644 --- a/arch/x86/kernel/cpu/mce/apei.c +++ b/arch/x86/kernel/cpu/mce/apei.c @@ -97,20 +97,17 @@ int apei_smca_report_x86_error(struct cper_ia_proc_ctx *ctx_info, u64 lapic_id) if (ctx_info->reg_arr_size < 48) return -EINVAL; - mce_setup(&m); - - m.extcpu = -1; - m.socketid = -1; - for_each_possible_cpu(cpu) { - if (cpu_data(cpu).topo.initial_apicid == lapic_id) { - m.extcpu = cpu; - m.socketid = cpu_data(m.extcpu).topo.pkg_id; + if (cpu_data(cpu).topo.initial_apicid == lapic_id) break; - } } - m.apicid = lapic_id; + if (!cpu_possible(cpu)) + return -EINVAL; + + mce_setup_common(&m); + mce_setup_for_cpu(cpu, &m); + m.bank = (ctx_info->msr_addr >> 4) & 0xFF; m.status = *i_mce; m.addr = *(i_mce + 1); -- 2.34.1
| |