From: "Andi Kleen" <ak@suse.de>

Fix special ISA case in iounmap(), from i386.

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/x86_64/mm/ioremap.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletion(-)

diff -puN arch/x86_64/mm/ioremap.c~x86_64-fix-special-isa-case-in-iounmap arch/x86_64/mm/ioremap.c
--- 25/arch/x86_64/mm/ioremap.c~x86_64-fix-special-isa-case-in-iounmap	Wed Mar 23 15:38:48 2005
+++ 25-akpm/arch/x86_64/mm/ioremap.c	Wed Mar 23 15:38:48 2005
@@ -18,6 +18,9 @@
 #include <asm/tlbflush.h>
 #include <asm/proto.h>
 
+#define ISA_START_ADDRESS      0xa0000
+#define ISA_END_ADDRESS                0x100000
+
 static inline void remap_area_pte(pte_t * pte, unsigned long address, unsigned long size,
 	unsigned long phys_addr, unsigned long flags)
 {
@@ -172,7 +175,7 @@ void __iomem * __ioremap(unsigned long p
 	/*
 	 * Don't remap the low PCI/ISA area, it's always mapped..
 	 */
-	if (phys_addr >= 0xA0000 && last_addr < 0x100000)
+	if (phys_addr >= ISA_START_ADDRESS && last_addr < ISA_END_ADDRESS)
 		return (__force void __iomem *)phys_to_virt(phys_addr);
 
 #ifndef CONFIG_DISCONTIGMEM
@@ -252,6 +255,9 @@ void iounmap(volatile void __iomem *addr
 
 	if (addr <= high_memory) 
 		return; 
+	if (addr >= phys_to_virt(ISA_START_ADDRESS) &&
+		addr < phys_to_virt(ISA_END_ADDRESS))
+		return;
 
 	write_lock(&vmlist_lock);
 	for (p = vmlist, pprev = &vmlist; p != NULL; pprev = &p->next, p = *pprev)
_