From: Andrew Morton Cc: Alan Cox Signed-off-by: Andrew Morton --- drivers/edac/edac_mc.c | 7 +++++++ 1 files changed, 7 insertions(+) diff -puN drivers/edac/edac_mc.c~edac-core-edac-support-code-edac_mc_scrub_block-kunmap_atomic-fix-2 drivers/edac/edac_mc.c --- devel/drivers/edac/edac_mc.c~edac-core-edac-support-code-edac_mc_scrub_block-kunmap_atomic-fix-2 2005-11-06 22:03:57.000000000 -0800 +++ devel-akpm/drivers/edac/edac_mc.c 2005-11-06 22:05:27.000000000 -0800 @@ -737,6 +737,7 @@ void edac_mc_scrub_block(unsigned long p { struct page *pg; unsigned long *virt_addr; + unsigned long flags = 0; debugf3("MC: " __FILE__ ": %s()\n", __func__); @@ -747,6 +748,9 @@ void edac_mc_scrub_block(unsigned long p /* Find the actual page structure then map it and fix */ pg = pfn_to_page(page); + if (PageHighMem(pg)) + local_irq_save(flags); + virt_addr = kmap_atomic(pg, KM_BOUNCE_READ); /* Perform architecture specific atomic scrub operation */ @@ -754,6 +758,9 @@ void edac_mc_scrub_block(unsigned long p /* Unmap and complete */ kunmap_atomic(virt_addr, KM_BOUNCE_READ); + + if (PageHighMem(pg)) + local_irq_restore(flags); } _