Skip to content

Commit d4b9792

Browse files
committed
m68k: mm: Move initrd phys_to_virt handling after paging_init()
When booting with an initial ramdisk on platforms where physical memory does not start at address zero (e.g. on Amiga): initrd: 0ef0602c - 0f800000 Zone ranges: DMA [mem 0x0000000008000000-0x000000f7ffffffff] Normal empty Movable zone start for each node Early memory node ranges node 0: [mem 0x0000000008000000-0x000000000f7fffff] Initmem setup node 0 [mem 0x0000000008000000-0x000000000f7fffff] Unable to handle kernel access at virtual address (ptrval) Oops: 00000000 Modules linked in: PC: [<00201d3c>] memcmp+0x28/0x56 As phys_to_virt() relies on m68k_memoffset and module_fixup(), it must not be called before paging_init(). Hence postpone the phys_to_virt handling for the initial ramdisk until after calling paging_init(). While at it, reduce #ifdef clutter by using IS_ENABLED() instead. Fixes: 376e3fd ("m68k: Enable memtest functionality") Reported-by: Stephen Walsh <[email protected]> Link: https://lists.debian.org/debian-68k/2022/09/msg00007.html Reported-by: John Paul Adrian Glaubitz <[email protected]> Link: https://lore.kernel.org/r/4f45f05f377bf3f5baf88dbd5c3c8aeac59d94f0.camel@physik.fu-berlin.de Signed-off-by: Geert Uytterhoeven <[email protected]> Acked-by: Finn Thain <[email protected]> Link: https://lore.kernel.org/r/dff216da09ab7a60217c3fc2147e671ae07d636f.1677528627.git.geert@linux-m68k.org
1 parent 0d9fad9 commit d4b9792

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

arch/m68k/kernel/setup_mm.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -326,16 +326,16 @@ void __init setup_arch(char **cmdline_p)
326326
panic("No configuration setup");
327327
}
328328

329-
#ifdef CONFIG_BLK_DEV_INITRD
330-
if (m68k_ramdisk.size) {
329+
if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && m68k_ramdisk.size)
331330
memblock_reserve(m68k_ramdisk.addr, m68k_ramdisk.size);
331+
332+
paging_init();
333+
334+
if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && m68k_ramdisk.size) {
332335
initrd_start = (unsigned long)phys_to_virt(m68k_ramdisk.addr);
333336
initrd_end = initrd_start + m68k_ramdisk.size;
334337
pr_info("initrd: %08lx - %08lx\n", initrd_start, initrd_end);
335338
}
336-
#endif
337-
338-
paging_init();
339339

340340
#ifdef CONFIG_NATFEAT
341341
nf_init();

0 commit comments

Comments
 (0)