]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
[POWERPC] Prevent duplicate lmb reservations for Device Tree blob.
authorJon Loeliger <jdl@jdl.com>
Sat, 17 Jun 2006 22:51:09 +0000 (17:51 -0500)
committerPaul Mackerras <paulus@samba.org>
Wed, 21 Jun 2006 05:01:27 +0000 (15:01 +1000)
Signed-off-by: Jon Loeliger <jdl@freescale.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/prom.c

index d77d24a89b39a53f2d537adf1ef86e78f42272b3..629023240ecefaabfd5b3e8f9f095bbc7ff4c5ab 100644 (file)
@@ -1267,13 +1267,16 @@ static void __init early_reserve_mem(void)
 {
        u64 base, size;
        u64 *reserve_map;
+       unsigned long self_base;
+       unsigned long self_size;
 
        reserve_map = (u64 *)(((unsigned long)initial_boot_params) +
                                        initial_boot_params->off_mem_rsvmap);
 
        /* before we do anything, lets reserve the dt blob */
-       lmb_reserve(__pa((unsigned long)initial_boot_params),
-                   initial_boot_params->totalsize);
+       self_base = __pa((unsigned long)initial_boot_params);
+       self_size = initial_boot_params->totalsize;
+       lmb_reserve(self_base, self_size);
 
 #ifdef CONFIG_PPC32
        /* 
@@ -1289,6 +1292,9 @@ static void __init early_reserve_mem(void)
                        size_32 = *(reserve_map_32++);
                        if (size_32 == 0)
                                break;
+                       /* skip if the reservation is for the blob */
+                       if (base_32 == self_base && size_32 == self_size)
+                               continue;
                        DBG("reserving: %x -> %x\n", base_32, size_32);
                        lmb_reserve(base_32, size_32);
                }
@@ -1300,6 +1306,9 @@ static void __init early_reserve_mem(void)
                size = *(reserve_map++);
                if (size == 0)
                        break;
+               /* skip if the reservation is for the blob */
+               if (base == self_base && size == self_size)
+                       continue;
                DBG("reserving: %llx -> %llx\n", base, size);
                lmb_reserve(base, size);
        }