sh: Fix up broken 32-bit initrd support.
authorStuart Menefy <stuart.menefy@st.com>
Fri, 5 Sep 2008 07:14:17 +0000 (16:14 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 8 Sep 2008 01:35:04 +0000 (10:35 +0900)
Signed-off-by: Stuart Menefy <stuart.menefy@st.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/setup.c

index 6d0899e890d09595a8f13ef3c748d9a657a00eb4..fc7171a9c80421a407b3f32f13ac2405300f13a9 100644 (file)
@@ -249,17 +249,18 @@ void __init setup_bootmem_allocator(unsigned long free_pfn)
        ROOT_DEV = Root_RAM0;
 
        if (LOADER_TYPE && INITRD_START) {
-               if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) {
-                       reserve_bootmem(INITRD_START + __MEMORY_START,
-                                       INITRD_SIZE, BOOTMEM_DEFAULT);
-                       initrd_start = INITRD_START + PAGE_OFFSET +
-                                       __MEMORY_START;
+               unsigned long initrd_start_phys = INITRD_START + __MEMORY_START;
+
+               if (initrd_start_phys + INITRD_SIZE <= PFN_PHYS(max_low_pfn)) {
+                       reserve_bootmem(initrd_start_phys, INITRD_SIZE,
+                                       BOOTMEM_DEFAULT);
+                       initrd_start = (unsigned long)__va(initrd_start_phys);
                        initrd_end = initrd_start + INITRD_SIZE;
                } else {
                        printk("initrd extends beyond end of memory "
-                           "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
-                                   INITRD_START + INITRD_SIZE,
-                                   max_low_pfn << PAGE_SHIFT);
+                              "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
+                              initrd_start_phys + INITRD_SIZE,
+                              PFN_PHYS(max_low_pfn));
                        initrd_start = 0;
                }
        }