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