diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-03-03 00:45:22 +0100 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-03-03 00:45:22 +0100 |
commit | 0cb3b79efabd4174ddeee40c2c1e5499ba67e067 (patch) | |
tree | 38ef0d5e38240589bac8c7d752295cdbd556742e | |
parent | 43e31e40473a00c936ffb9c2eebedc0566c92e89 (diff) | |
parent | 41139ac3cd76c6dff8286102a8ac62933c680463 (diff) | |
download | linux-rpi-0cb3b79efabd4174ddeee40c2c1e5499ba67e067.tar.gz linux-rpi-0cb3b79efabd4174ddeee40c2c1e5499ba67e067.tar.bz2 linux-rpi-0cb3b79efabd4174ddeee40c2c1e5499ba67e067.zip |
Merge branch 'acpi-apei'
* acpi-apei:
ACPI: APEI: Fix BERT resources conflict with ACPI NVS area
-rw-r--r-- | drivers/acpi/apei/bert.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/acpi/apei/bert.c b/drivers/acpi/apei/bert.c index a05b5c0cf181..12771fcf0417 100644 --- a/drivers/acpi/apei/bert.c +++ b/drivers/acpi/apei/bert.c @@ -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; } |