Hi Geert,
>> > You can't map more than is available. >> > >> How about trying for 16, then 8, then 4? Would help my 14 MB ST-RAM Falcon. >> >> I had a patch half prepared for that which I forgot to send ... > > And thus I never saw it ;-) Sorry - I just didn't want to send out assembly code patches I never attempted to compile. Happy to do that for C code, but that's bad enough for me. > Andreas, I amended your patch like below, and plan to queue it for 3.16. Definitely more elegant than my version :-) Cheers, Michael > This allows me to boot a multi_defconfig kernel on ARAnyM, with 14 MiB > ST-RAM in the first chunk, which didn't work with your 16 MiB-only version. > > >From fac30ceba841cd5e076f4c0e83b05ca3ba9d3eb2 Mon Sep 17 00:00:00 2001 > From: Andreas Schwab <[email protected]> > Date: Thu, 24 Apr 2014 12:24:48 +0200 > Subject: [PATCH] m68k: Increase initial mapping to 8 or 16 MiB if possible > > If the size of the first memory chunk is at least 8 or 16 MiB increase the > initial mapping to 8 resp. 16 MiB instead of 4 MiB. > This makes it possible to > 1. Map more memory in the first node without running out of space for the > page tables, > 2. Boot kernels that don't fit in 4 MiB (e.g. multi_defconfig). > > Signed-off-by: Andreas Schwab <[email protected]> > > - Add support for 8 MiB, > - Store initial mapping size in head.S for later reuse, > - Add comment about large kernels. > > Signed-off-by: Geert Uytterhoeven <[email protected]> > --- > arch/m68k/kernel/head.S | 19 +++++++++++++++++-- > arch/m68k/mm/motorola.c | 10 ++++++---- > 2 files changed, 23 insertions(+), 6 deletions(-) > > diff --git a/arch/m68k/kernel/head.S b/arch/m68k/kernel/head.S > index 145bc3d5b3da..9745156b1db8 100644 > --- a/arch/m68k/kernel/head.S > +++ b/arch/m68k/kernel/head.S > @@ -292,6 +292,7 @@ > > .globl kernel_pg_dir > .globl availmem > +.globl m68k_init_mapped_size > .globl m68k_pgtable_cachemode > .globl m68k_supervisor_cachemode > #ifdef CONFIG_MVME16x > @@ -907,10 +908,21 @@ L(nocon): > * > * This block of code does what's necessary to map in the various kinds > * of machines for execution of Linux. > - * First map the first 4 MB of kernel code & data > + * First map the first 4, 8, or 16 MB of kernel code & data > */ > > - mmu_map #PAGE_OFFSET,%pc@(L(phys_kernel_start)),#4*1024*1024,\ > + get_bi_record BI_MEMCHUNK > + movel %a0@(4),%d0 > + movel #16*1024*1024,%d1 > + cmpl %d0,%d1 > + jls 1f > + lsrl #1,%d1 > + cmpl %d0,%d1 > + jls 1f > + lsrl #1,%d1 > +1: > + movel %d1,m68k_init_mapped_size > + mmu_map #PAGE_OFFSET,%pc@(L(phys_kernel_start)),%d1,\ > %pc@(m68k_supervisor_cachemode) > > putc 'C' > @@ -3729,6 +3741,9 @@ func_return console_plot_pixel > __INITDATA > .align 4 > > +m68k_init_mapped_size: > + .long 0 > + > #if defined(CONFIG_ATARI) || defined(CONFIG_AMIGA) || \ > defined(CONFIG_HP300) || defined(CONFIG_APOLLO) > L(custom): > diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c > index cf4dfc7eeb29..3bdc56a882fd 100644 > --- a/arch/m68k/mm/motorola.c > +++ b/arch/m68k/mm/motorola.c > @@ -45,7 +45,7 @@ EXPORT_SYMBOL(mm_cachebits); > #endif > > /* size of memory already mapped in head.S */ > -#define INIT_MAPPED_SIZE (4UL<<20) > +extern __initdata unsigned long m68k_init_mapped_size; > > extern unsigned long availmem; > > @@ -273,10 +273,12 @@ printk("*** m68k_virt_to_node_shift = %d\n", > m68k_virt_to_node_shift); > */ > addr = m68k_memory[0].addr; > size = m68k_memory[0].size; > - free_bootmem_node(NODE_DATA(0), availmem, min(INIT_MAPPED_SIZE, size) > - (availmem - addr)); > + free_bootmem_node(NODE_DATA(0), availmem, > + min(m68k_init_mapped_size, size) - (availmem - > addr)); > map_node(0); > - if (size > INIT_MAPPED_SIZE) > - free_bootmem_node(NODE_DATA(0), addr + INIT_MAPPED_SIZE, size > - INIT_MAPPED_SIZE); > + if (size > m68k_init_mapped_size) > + free_bootmem_node(NODE_DATA(0), addr + m68k_init_mapped_size, > + size - m68k_init_mapped_size); > > for (i = 1; i < m68k_num_memory; i++) > map_node(i); > -- > 1.9.1 > > Gr{oetje,eeting}s, > > Geert > > -- > Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- > [email protected] > > 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 -- To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
