]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Merge tag 'acpi-extra-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 3 Mar 2017 01:38:30 +0000 (17:38 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 3 Mar 2017 01:38:30 +0000 (17:38 -0800)
Pull ACPI fix from Rafael Wysocki:
 "This fixes an apparent, but actually artificial, resource conflict
  between the ACPI NVS memory region and the ACPI BERT (Boot Error
  Record Table) address range (Huang Ying)"

* tag 'acpi-extra-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  ACPI: APEI: Fix BERT resources conflict with ACPI NVS area

drivers/acpi/apei/bert.c

index a05b5c0cf181a562ca2700b01d9ffbed68c8b1c5..12771fcf0417df30ed36ddceed49bea7532b9d8e 100644 (file)
@@ -97,6 +97,7 @@ static int __init bert_check_table(struct acpi_table_bert *bert_tab)
 
 static int __init bert_init(void)
 {
+       struct apei_resources bert_resources;
        struct acpi_bert_region *boot_error_region;
        struct acpi_table_bert *bert_tab;
        unsigned int region_len;
@@ -127,13 +128,14 @@ static int __init bert_init(void)
        }
 
        region_len = bert_tab->region_length;
-       if (!request_mem_region(bert_tab->address, region_len, "APEI BERT")) {
-               pr_err("Can't request iomem region <%016llx-%016llx>.\n",
-                      (unsigned long long)bert_tab->address,
-                      (unsigned long long)bert_tab->address + region_len - 1);
-               return -EIO;
-       }
-
+       apei_resources_init(&bert_resources);
+       rc = apei_resources_add(&bert_resources, bert_tab->address,
+                               region_len, true);
+       if (rc)
+               return rc;
+       rc = apei_resources_request(&bert_resources, "APEI BERT");
+       if (rc)
+               goto out_fini;
        boot_error_region = ioremap_cache(bert_tab->address, region_len);
        if (boot_error_region) {
                bert_print_all(boot_error_region, region_len);
@@ -142,7 +144,9 @@ static int __init bert_init(void)
                rc = -ENOMEM;
        }
 
-       release_mem_region(bert_tab->address, region_len);
+       apei_resources_release(&bert_resources);
+out_fini:
+       apei_resources_fini(&bert_resources);
 
        return rc;
 }