]> Git Repo - linux.git/commitdiff
ACPI, APEI, HEST, Detect duplicated hardware error source ID
authorHuang Ying <[email protected]>
Wed, 13 Jul 2011 05:14:12 +0000 (13:14 +0800)
committerLen Brown <[email protected]>
Thu, 14 Jul 2011 03:27:56 +0000 (23:27 -0400)
The firmware on some machine will report duplicated hardware error
source ID in HEST.  This is considered a firmware bug.  To provide
better warning message, this patch adds duplicated hardware error
source ID detecting and corresponding printk.

This patch fixes #37412 on kernel bugzilla:
https://bugzilla.kernel.org/show_bug.cgi?id=37412

Reported-by: [email protected]
Signed-off-by: Huang Ying <[email protected]>
Tested-by: Mathias <[email protected]>
Signed-off-by: Len Brown <[email protected]>
drivers/acpi/apei/hest.c

index abda3786a5d70c4b22738b1245303dbabe2722d6..181bc2f7bb7411a4b300c23c2450ad79ae129a4b 100644 (file)
@@ -139,13 +139,23 @@ static int __init hest_parse_ghes(struct acpi_hest_header *hest_hdr, void *data)
 {
        struct platform_device *ghes_dev;
        struct ghes_arr *ghes_arr = data;
-       int rc;
+       int rc, i;
 
        if (hest_hdr->type != ACPI_HEST_TYPE_GENERIC_ERROR)
                return 0;
 
        if (!((struct acpi_hest_generic *)hest_hdr)->enabled)
                return 0;
+       for (i = 0; i < ghes_arr->count; i++) {
+               struct acpi_hest_header *hdr;
+               ghes_dev = ghes_arr->ghes_devs[i];
+               hdr = *(struct acpi_hest_header **)ghes_dev->dev.platform_data;
+               if (hdr->source_id == hest_hdr->source_id) {
+                       pr_warning(FW_WARN HEST_PFX "Duplicated hardware error source ID: %d.\n",
+                                  hdr->source_id);
+                       return -EIO;
+               }
+       }
        ghes_dev = platform_device_alloc("GHES", hest_hdr->source_id);
        if (!ghes_dev)
                return -ENOMEM;
This page took 0.0555 seconds and 4 git commands to generate.