diff -urN linux-2.2.12/arch/alpha/kernel/setup.c linux-2.2.12.SuSE/arch/alpha/kernel/setup.c --- linux-2.2.12/arch/alpha/kernel/setup.c Thu Aug 26 02:29:45 1999 +++ linux-2.2.12.SuSE/arch/alpha/kernel/setup.c Mon Sep 20 13:54:41 1999 @@ -261,8 +261,18 @@ if (initrd_end > *memory_end_p) { printk("initrd extends beyond end of memory " "(0x%08lx > 0x%08lx)\ndisabling initrd\n", - initrd_end, (unsigned long) memory_end_p); + initrd_end, *memory_end_p); initrd_start = initrd_end = 0; + } else { + /* move initrd from the middle of the RAM to the + start of the RAM so we won't risk to rewrite + initrd while allocating the memory at boot time */ + memmove((char *) *memory_start_p, + (char *) initrd_start, INITRD_SIZE); + initrd_start = *memory_start_p; + initrd_end = initrd_start + INITRD_SIZE; + *memory_start_p = PAGE_ALIGN(initrd_end); + initrd_below_start_ok = 1; } } #endif diff -urN linux-2.2.12/arch/alpha/mm/init.c linux-2.2.12.SuSE/arch/alpha/mm/init.c --- linux-2.2.12/arch/alpha/mm/init.c Mon Aug 9 21:04:38 1999 +++ linux-2.2.12.SuSE/arch/alpha/mm/init.c Mon Sep 20 13:54:39 1999 @@ -322,7 +322,7 @@ continue; atomic_set(&mem_map[MAP_NR(tmp)].count, 1); #ifdef CONFIG_BLK_DEV_INITRD - if (initrd_start && tmp >= initrd_start && tmp < initrd_end) + if (initrd_start && tmp >= (initrd_start & PAGE_MASK) && tmp < initrd_end) continue; #endif kill_page(tmp);