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-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html