Re: APEI: Can not request iomem region for GARs

From: Yinghai Lu
Date: Mon Aug 22 2011 - 17:04:08 EST


On Mon, Aug 22, 2011 at 9:45 AM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote:
> On Mon, Aug 22, 2011 at 1:12 AM, Huang Ying <ying.huang@xxxxxxxxx> wrote:
>> Do you have time to try the patch attached with the mail?
>> acpi_nvs.patch should go first.
>
> In this case, we have an ACPI NVS region, and the APEI code is
> essentially a driver for some registers that reside there.  APEI is
> the entity that manages those registers, and it needs to enforce
> mutual exclusion so nobody else touches them behind its back, so I
> think it makes sense for it to request the register regions and mark
> them busy.
>
> My proposal is to change e820 so it either leaves ACPI NVS out of the
> iomem_resource tree or puts it in but leaves it non-busy.

assume Huang Ying only tested with UEFI native boot?

i have one local patch for legacy mode booting, and it's similar to
what Bjorn suggested.

Please check the attached patch.

Thanks

Yinghai Lu
Subject: [PATCH] x86: allow NVS can be accessed by driver

APEI related...

Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>

---
arch/x86/kernel/e820.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

Index: linux-2.6/arch/x86/kernel/e820.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820.c
+++ linux-2.6/arch/x86/kernel/e820.c
@@ -995,7 +995,8 @@ void __init e820_reserve_resources(void)
* pcibios_resource_survey()
*/
if (e820.map[i].type != E820_RESERVED || res->start < (1ULL<<20)) {
- res->flags |= IORESOURCE_BUSY;
+ if (e820.map[i].type != E820_NVS)
+ res->flags |= IORESOURCE_BUSY;
insert_resource(&iomem_resource, res);
}
res++;