lkml.org 
[lkml]   [2007]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] initrd: Fix virtual/physical mix-up in overwrite test
    On recent kernels, I get the following error when using an initrd:

    | initrd overwritten (0x00b78000 < 0x07668000) - disabling it.

    My Amiga 4000 has 12 MiB of RAM at physical address 0x07400000 (virtual
    0x00000000).
    The initrd is located at the end of RAM: 0x00b78000 - 0x00c00000 (virtual).
    The overwrite test compares the (virtual) initrd location to the (physical)
    first available memory location, which fails.

    This patch converts initrd_start to a page frame number, so it can be safely
    compared with min_low_pfn.

    Before the introduction of discontiguous memory support on m68k
    (12d810c1b8c2b913d48e629e2b5c01d105029839), min_low_pfn was just left
    untouched by the m68k-specific code (zero, I guess), and everything worked
    fine.

    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    ---
    On several platforms, initrd_below_start_ok is set to 1:

    | arch/mips/kernel/setup.c: initrd_below_start_ok = 1;
    | arch/parisc/mm/init.c: initrd_below_start_ok = 1;
    | arch/powerpc/kernel/prom.c: initrd_below_start_ok = 1;
    | arch/ppc/platforms/hdpu.c: initrd_below_start_ok = 1;
    | arch/xtensa/kernel/setup.c: initrd_below_start_ok = 1;

    Some of these may be workarounds for this bug. Please check.

    init/main.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/init/main.c
    +++ b/init/main.c
    @@ -598,9 +598,9 @@ asmlinkage void __init start_kernel(void

    #ifdef CONFIG_BLK_DEV_INITRD
    if (initrd_start && !initrd_below_start_ok &&
    - initrd_start < min_low_pfn << PAGE_SHIFT) {
    + virt_to_pfn(initrd_start) < min_low_pfn) {
    printk(KERN_CRIT "initrd overwritten (0x%08lx < 0x%08lx) - "
    - "disabling it.\n",initrd_start,min_low_pfn << PAGE_SHIFT);
    + "disabling it.\n", virt_to_pfn(initrd_start), min_low_pfn);
    initrd_start = 0;
    }
    #endif
    Gr{oetje,eeting}s,
    Geert

    --
    Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

    In personal conversations with technical people, I call myself a hacker. But
    when I'm talking to journalists I just say "programmer" or something like that.
    -- Linus Torvalds


    \
     
     \ /
      Last update: 2007-12-16 11:53    [W:0.022 / U:0.224 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site