2 arch/i386/mm/ioremap.c | 9 ++++++---
3 1 files changed, 6 insertions(+), 3 deletions(-)
5 diff -Naurp ./arch/i386/mm/ioremap.c~ioremap-wrap ./arch/i386/mm/ioremap.c
6 --- ./arch/i386/mm/ioremap.c~ioremap-wrap 2003-10-25 11:43:13.000000000 -0700
7 +++ ./arch/i386/mm/ioremap.c 2003-10-31 11:27:32.000000000 -0800
8 @@ -191,15 +191,18 @@ void * __ioremap(unsigned long phys_addr
9 void *ioremap_nocache (unsigned long phys_addr, unsigned long size)
11 void *p = __ioremap(phys_addr, size, _PAGE_PCD);
12 + unsigned long next_addr;
17 - if (phys_addr + size < virt_to_phys(high_memory)) {
18 + next_addr = phys_addr + size;
19 + if (next_addr != 0 && next_addr < virt_to_phys(high_memory)) {
20 struct page *ppage = virt_to_page(__va(phys_addr));
21 unsigned long npages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
23 - BUG_ON(phys_addr+size > (unsigned long)high_memory);
24 - BUG_ON(phys_addr + size < phys_addr);
25 + BUG_ON(next_addr > (unsigned long)high_memory);
26 + BUG_ON(next_addr < phys_addr);
28 if (change_page_attr(ppage, npages, PAGE_KERNEL_NOCACHE) < 0) {