]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - arch/sparc/mm/init_32.c
sparc32: split ramdisk detection and reservation to a helper function
[linux.git] / arch / sparc / mm / init_32.c
index e786fe0f0059ed446fa44a9ac3f9f7f0da7b81d5..92634d4e440c26be54dddd96c22160259654dd1e 100644 (file)
@@ -102,6 +102,36 @@ static unsigned long calc_max_low_pfn(void)
        return tmp;
 }
 
+static void __init find_ramdisk(unsigned long end_of_phys_memory)
+{
+#ifdef CONFIG_BLK_DEV_INITRD
+       unsigned long size;
+
+       /* Now have to check initial ramdisk, so that it won't pass
+        * the end of memory
+        */
+       if (sparc_ramdisk_image) {
+               if (sparc_ramdisk_image >= (unsigned long)&_end - 2 * PAGE_SIZE)
+                       sparc_ramdisk_image -= KERNBASE;
+               initrd_start = sparc_ramdisk_image + phys_base;
+               initrd_end = initrd_start + sparc_ramdisk_size;
+               if (initrd_end > end_of_phys_memory) {
+                       printk(KERN_CRIT "initrd extends beyond end of memory "
+                              "(0x%016lx > 0x%016lx)\ndisabling initrd\n",
+                              initrd_end, end_of_phys_memory);
+                       initrd_start = 0;
+               } else {
+                       /* Reserve the initrd image area. */
+                       size = initrd_end - initrd_start;
+                       memblock_reserve(initrd_start, size);
+
+                       initrd_start = (initrd_start - phys_base) + PAGE_OFFSET;
+                       initrd_end = (initrd_end - phys_base) + PAGE_OFFSET;
+               }
+       }
+#endif
+}
+
 unsigned long __init bootmem_init(unsigned long *pages_avail)
 {
        unsigned long start_pfn, bytes_avail, size;
@@ -160,32 +190,8 @@ unsigned long __init bootmem_init(unsigned long *pages_avail)
                    high_pages >> (20 - PAGE_SHIFT));
        }
 
-#ifdef CONFIG_BLK_DEV_INITRD
-       /* Now have to check initial ramdisk, so that it won't pass
-        * the end of memory
-        */
-       if (sparc_ramdisk_image) {
-               if (sparc_ramdisk_image >= (unsigned long)&_end - 2 * PAGE_SIZE)
-                       sparc_ramdisk_image -= KERNBASE;
-               initrd_start = sparc_ramdisk_image + phys_base;
-               initrd_end = initrd_start + sparc_ramdisk_size;
-               if (initrd_end > end_of_phys_memory) {
-                       printk(KERN_CRIT "initrd extends beyond end of memory "
-                                        "(0x%016lx > 0x%016lx)\ndisabling initrd\n",
-                              initrd_end, end_of_phys_memory);
-                       initrd_start = 0;
-               }
-       }
-
-       if (initrd_start) {
-               /* Reserve the initrd image area. */
-               size = initrd_end - initrd_start;
-               memblock_reserve(initrd_start, size);
+       find_ramdisk(end_of_phys_memory);
 
-               initrd_start = (initrd_start - phys_base) + PAGE_OFFSET;
-               initrd_end = (initrd_end - phys_base) + PAGE_OFFSET;
-       }
-#endif
        /* Reserve the kernel text/data/bss. */
        size = (start_pfn << PAGE_SHIFT) - phys_base;
        memblock_reserve(phys_base, size);