diff --git a/debian/changelog b/debian/changelog index 964bbb430..2380a0df6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,6 +19,9 @@ linux-2.6 (2.6.17+2.6.18-rc7-0experimental.1) UNRELEASED; urgency=low * [powerpc] Updated the powerpc serial patch. This fixes the XServe serial port, but at the cost powermac pcmcia serial cards support. Thanks go to Mark Hymers for providing the patch. + * [powerpc] Added tentative patch to fix oldworld ramdisk size bug. + Thanks fo to Christian Aichinger for investigating and providing the + patch. (Closes: #366620, #375035). [ Frederik Schüler ] * Remove obsolete options from amd64 and i386 configs. diff --git a/debian/patches/powerpc-oldworld-boot-fix.diff b/debian/patches/powerpc-oldworld-boot-fix.diff new file mode 100644 index 000000000..9e066b7bd --- /dev/null +++ b/debian/patches/powerpc-oldworld-boot-fix.diff @@ -0,0 +1,40 @@ +# +# Patch author: Christian Aichinger +# Description: Fix oldworld initrd loading problems. +# The kernel somehow loses the information where the initrd image is +# placed in memory. The correct data is there in +# arch/powerpc/kernel/prom_init.c:prom_check_initrd(), but in +# init/initramfs.c:populate_rootfs() it's wrong, initrd_{start,end} +# are both 0. +# arch/powerpc/kernel/prom_init.c:prom_check_initrd() is broken. The +# relevant part of the code is: +# Closes: +# 375035: Kernel 2.6.16 attempts to access root device before running initramfs init +# 366620: initramfs-tools: 2.6.16-1-powerpc fails to mount rootfs, 2.6.15-1-powerpc works +# + +--- a/arch/powerpc/kernel/prom_init.c 2006-09-15 18:33:50.000000000 +0200 ++++ b/arch/powerpc/kernel/prom_init.c 2006-09-15 18:33:44.000000000 +0200 +@@ -2141,17 +2141,17 @@ + struct prom_t *_prom = &RELOC(prom); + + if (r3 && r4 && r4 != 0xdeadbeef) { +- unsigned long val; ++ unsigned long *ptr; + + RELOC(prom_initrd_start) = is_kernel_addr(r3) ? __pa(r3) : r3; + RELOC(prom_initrd_end) = RELOC(prom_initrd_start) + r4; + +- val = RELOC(prom_initrd_start); ++ ptr = &RELOC(prom_initrd_start); + prom_setprop(_prom->chosen, "/chosen", "linux,initrd-start", +- &val, sizeof(val)); +- val = RELOC(prom_initrd_end); ++ ptr, sizeof(prom_initrd_start)); ++ ptr = &RELOC(prom_initrd_end); + prom_setprop(_prom->chosen, "/chosen", "linux,initrd-end", +- &val, sizeof(val)); ++ ptr, sizeof(prom_initrd_end)); + + reserve_mem(RELOC(prom_initrd_start), + RELOC(prom_initrd_end) - RELOC(prom_initrd_start)); diff --git a/debian/patches/series/0experimental.1 b/debian/patches/series/0experimental.1 index 2b1378ea9..e050ab75e 100644 --- a/debian/patches/series/0experimental.1 +++ b/debian/patches/series/0experimental.1 @@ -30,3 +30,4 @@ + arm-iop-fix-cpuid + arm-get_unaligned-gcc41-const.patch + powerpc-serial.patch ++ powerpc-oldworld-boot-fix.diff