Re: APEI: Can not request iomem region for GARs

Bjorn Helgaas
2011-08-19T21:48:45Z

On Tue, Aug 16, 2011 at 9:43 PM, Pavel Ivanov <paivanof@gmail.com> wrote:
> Ever since I switched from kernel 2.6.38 to 3.0 and later versions I
> always get the following error message on each boot:
>
> [    2.844242] APEI: Can not request iomem region
> <00000000bf7b522a-00000000bf7b522c> for GARs.
>
> If it was only in dmesg I wouldn't even notice it. But it's always
> printed on the console which is kind of annoying.
> I don't quite understand what this message is about and couldn't find
> anything on the internet. Does this message mean some error that I
> could fix? If no, is there any way I can suppress it (besides lowering
> the error level of messages printed on console, of course)?

[+cc Huang Ying, APEI author]

BIOS-e820: 00000000bf79e000 - 00000000bf7d0000 (ACPI NVS)
APEI: Can not request iomem region <00000000bf7b522a-00000000bf7b522c> for GARs.

This register is in the ACPI NVS region, which is type E820_NVS (not
E820_RESERVED), so e820_reserve_resources() reserves it as
IORESOURCE_BUSY. My guess is that Huang tested this on machines where
the EINJ/ERST registers are in "reserved" regions, not ACPI NVS
regions. The "reserved" regions are not marked IORESOURCE_BUSY.

Huang, when you fix this, please include something like the following
(mangled) patch so the error message is more consistent with other
resource messages.

Could you also remove the ERST/EINJ/HEST "Table is not found"
messages? As far as I can tell, these tables are optional, and
printing the message is confusing to users, e.g.,
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/599715

Bjorn

diff --git a/drivers/acpi/apei/apei-base.c b/drivers/acpi/apei/apei-base.c
index 8041248..6f97b59 100644
--- a/drivers/acpi/apei/apei-base.c
+++ b/drivers/acpi/apei/apei-base.c
@@ -460,9 +460,9 @@ int apei_resources_request(struct apei_resources *resources,
desc);
if (!r) {
pr_err(APEI_PFX
- "Can not request iomem region <%016llx-%016llx> for GARs.\n",
+ "can not request [mem %#010llx-%#010llx] for %s registers\n",
(unsigned long long)res->start,
- (unsigned long long)res->end);
+ (unsigned long long)res->end, desc);
res_bak = res;
goto err_unmap_iomem;
}
@@ -472,9 +472,9 @@ int apei_resources_request(struct apei_resources *resources,
r = request_region(res->start, res->end - res->start, desc);
if (!r) {
pr_err(APEI_PFX
- "Can not request ioport region <%016llx-%016llx> for GARs.\n",
+ "can not request [io %#06llx-%#06llx] for %s registers\n",
(unsigned long long)res->start,
- (unsigned long long)res->end);
+ (unsigned long long)res->end, desc);
res_bak = res;
goto err_unmap_ioport;
}