x86_64: off-by-two error in aperture.c
authorAndrew Hastings <abh@cray.com>
Fri, 11 May 2007 09:23:19 +0000 (11:23 +0200)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Fri, 11 May 2007 19:53:00 +0000 (12:53 -0700)
I'm using a custom BIOS to configure the northbridge GART at address
0x80000000, size 2G.  Linux complains:

"Aperture from northbridge cpu 0 beyond 4GB. Ignoring."

I think there's an off-by-two error in arch/x86_64/kernel/aperture.c:

AK: use correct types for i386

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86_64/kernel/aperture.c
arch/x86_64/kernel/pci-gart.c
drivers/char/agp/amd64-agp.c

index a52af58..a3d450d 100644 (file)
@@ -86,7 +86,7 @@ static int __init aperture_valid(u64 aper_base, u32 aper_size)
                printk("Aperture too small (%d MB)\n", aper_size>>20);
                return 0;
        }
-       if (aper_base + aper_size >= 0xffffffff) { 
+       if (aper_base + aper_size > 0x100000000UL) {
                printk("Aperture beyond 4GB. Ignoring.\n");
                return 0; 
        }
index 373ef66..ae091cd 100644 (file)
@@ -476,7 +476,7 @@ static __init unsigned read_aperture(struct pci_dev *dev, u32 *size)
        aper_base <<= 25;
 
        aper_size = (32 * 1024 * 1024) << aper_order; 
-       if (aper_base + aper_size >= 0xffffffff || !aper_size)
+       if (aper_base + aper_size > 0x100000000UL || !aper_size)
                aper_base = 0;
 
        *size = aper_size;
index c9f0f25..801abdd 100644 (file)
@@ -268,7 +268,7 @@ static int __devinit aperture_valid(u64 aper, u32 size)
                printk(KERN_ERR PFX "Aperture too small (%d MB)\n", size>>20);
                return 0;
        }
-       if (aper + size > 0xffffffff) {
+       if ((u64)aper + size > 0x100000000ULL) {
                printk(KERN_ERR PFX "Aperture out of bounds\n");
                return 0;
        }