// SPDX-License-Identifier: GPL-2.0-only /* * APEI Hardware Error Source Table support * * HEST describes error sources in detail; communicates operational * parameters (i.e. severity levels, masking bits, and threshold * values) to Linux as necessary. It also allows the BIOS to report * non-standard error sources to Linux (for example, chipset-specific * error registers). * * For more information about HEST, please refer to ACPI Specification * version 4.0, section 17.3.2. * * Copyright 2009 Intel Corp. * Author: Huang Ying <ying.huang@intel.com>
*/
/* * Since GHES_ASSIST is not supported, skip initialization of GHES_ASSIST * structures for MCA. * During HEST parsing, detected MCA error sources are cached from early * table entries so that the Flags and Source Id fields from these cached * values are then referred to in later table entries to determine if the * encountered GHES_ASSIST structure should be initialized.
*/ staticstruct { struct acpi_hest_ia_corrected *cmc; struct acpi_hest_ia_machine_check *mc; struct acpi_hest_ia_deferred_check *dmc;
} mces;
/* * GHES and GHESv2 structures share the same format, starting from * Source Id and ending in Error Status Block Length (inclusive).
*/ staticbool is_ghes_assist_struct(struct acpi_hest_header *hest_hdr)
{ struct acpi_hest_generic *ghes;
u16 related_source_id;
if (hest_hdr->type != ACPI_HEST_TYPE_GENERIC_ERROR &&
hest_hdr->type != ACPI_HEST_TYPE_GENERIC_ERROR_V2) returnfalse;
/* * Check if firmware advertises firmware first mode. We need FF bit to be set * along with a set of MC banks which work in FF mode.
*/ staticint __init hest_parse_cmc(struct acpi_hest_header *hest_hdr, void *data)
{ if (hest_hdr->type != ACPI_HEST_TYPE_IA32_CORRECTED_CHECK) return0;
if (!acpi_disable_cmcff) return !arch_apei_enable_cmcff(hest_hdr, data);
if (hest_disable) {
pr_info(HEST_PFX "Table parsing disabled.\n"); return;
}
status = acpi_get_table(ACPI_SIG_HEST, 0,
(struct acpi_table_header **)&hest_tab); if (status == AE_NOT_FOUND) {
hest_disable = HEST_NOT_FOUND; return;
} elseif (ACPI_FAILURE(status)) { constchar *msg = acpi_format_exception(status);
pr_err(HEST_PFX "Failed to get table, %s\n", msg);
hest_disable = HEST_DISABLED; return;
}
rc = apei_hest_parse(hest_parse_cmc, NULL); if (rc) goto err;
if (!ghes_disable) {
rc = apei_hest_parse(hest_parse_ghes_count, &ghes_count); if (rc) goto err;
if (ghes_count)
rc = hest_ghes_dev_register(ghes_count); if (rc) goto err;
}
pr_info(HEST_PFX "Table parsing has been initialized.\n"); return;
err:
hest_disable = HEST_DISABLED;
acpi_put_table((struct acpi_table_header *)hest_tab);
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.12Bemerkung:
(vorverarbeitet am 2026-06-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.