Re: [PATCH 5/5] ACPI, APEI, Fix ERST MOVE_DATA instruction implementation

From: huang ying
Date: Thu Sep 23 2010 - 05:04:38 EST


Hi,

On Tue, Sep 21, 2010 at 8:47 PM, Andi Kleen <andi@xxxxxxxxxxxxxx> wrote:
> On Sun, Sep 19, 2010 at 11:00:35AM +0800, Huang Ying wrote:
>> diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c
>> index 40b01c3..a103963 100644
>> --- a/drivers/acpi/apei/erst.c
>> +++ b/drivers/acpi/apei/erst.c
>> @@ -266,13 +266,27 @@ static int erst_exec_move_data(struct apei_exec_context *ctx,
>> Â{
>> Â Â Â int rc;
>> Â Â Â u64 offset;
>> + Â Â void *src, *dst;
>> +
>> + Â Â /* ioremap does not work in interrupt context */
>> + Â Â if (in_interrupt())
>> + Â Â Â Â Â Â return -EBUSY;
>
> That breaks serialization of machine checks no? If the BIOS uses MOVE_DATA
> How about using kmap_atomic instead?

In my test machine, MOVE_DATA is not used. So this does not breaks
serialization of machine checks.

We can not use kmap_atomic or kmap_atomic_pfn here. Because
kmap_atomic_xxx needs struct page, but the address provided by BIOS
may be in E820_RESERVED area, that is, the corresponding page may have
no struct page. Maybe we need another kmap_atomic implementation for
E820_RESERVED area.

Best Regards,
Huang Ying
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/