From: "Andi Kleen" It could be in a memory hole not mapped in mem_map and that causes the hash lookup to go off to nirvana. Signed-off-by: Andi Kleen Signed-off-by: Andrew Morton --- arch/x86_64/mm/ioremap.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN arch/x86_64/mm/ioremap.c~x86_64-dont-look-up-struct-page-pointer-of-physical arch/x86_64/mm/ioremap.c --- 25/arch/x86_64/mm/ioremap.c~x86_64-dont-look-up-struct-page-pointer-of-physical 2005-05-13 22:54:41.000000000 -0700 +++ 25-akpm/arch/x86_64/mm/ioremap.c 2005-05-13 22:54:41.000000000 -0700 @@ -272,7 +272,7 @@ void iounmap(volatile void __iomem *addr if ((p->flags >> 20) && p->phys_addr + p->size - 1 < virt_to_phys(high_memory)) { /* p->size includes the guard page, but cpa doesn't like that */ - change_page_attr(virt_to_page(__va(p->phys_addr)), + change_page_attr_addr((unsigned long)__va(p->phys_addr), p->size >> PAGE_SHIFT, PAGE_KERNEL); global_flush_tlb(); _