--- a/arch/sparc/mm/init.c +++ b/arch/sparc/mm/init.c @@ -206,9 +206,13 @@ unsigned long __init bootmem_init(unsigned long *pages_avail) #ifdef CONFIG_BLK_DEV_INITRD /* Now have to check initial ramdisk, so that bootmap does not overwrite it */ if (sparc_ramdisk_image) { - sparc_ramdisk_image -= KERNBASE; +printk("sparc_ramdisk_image = %x, &_end = %p, phys_base = %lx, sparc_ramdisk_size = %u\n", +sparc_ramdisk_image, &_end, phys_base, sparc_ramdisk_size); + 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; +printk("initrd_start = %lx, initrd_end = %lx\n", initrd_start, initrd_end); if (initrd_end > end_of_phys_memory) { printk(KERN_CRIT "initrd extends beyond end of memory " "(0x%016lx > 0x%016lx)\ndisabling initrd\n",