public inbox for linux-m68k@lists.linux-m68k.org
 help / color / mirror / Atom feed
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Michael Schmitz <schmitzmic@gmail.com>,
	Andreas Schwab <schwab@linux-m68k.org>
Cc: Thorsten Glaser <tg@debian.org>, Linux/m68k <linux-m68k@vger.kernel.org>
Subject: Re: [PATCH] m68k: Increase initial mapping to 16MB if possible
Date: Sun, 25 May 2014 18:57:49 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.02.1405251846540.6045@ayla.of.borg> (raw)
In-Reply-To: <5360A881.7040107@gmail.com>

	Hi Michael, Andreas,

On Wed, 30 Apr 2014, Michael Schmitz wrote:
> first off - thanks for the patch!

Indeed.

> > Geert Uytterhoeven <geert@linux-m68k.org> writes:
> > 
> > > Always increases the initial mapping to 16 MiB.
> > 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 ;-)

Andreas, I amended your patch like below, and plan to queue it for 3.16.
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 <schwab@linux-m68k.org>
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 <schwab@linux-m68k.org>

  - 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 <geert@linux-m68k.org>
---
 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 -- 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

  reply	other threads:[~2014-05-25 16:57 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-24 10:24 [PATCH] m68k: Increase initial mapping to 16MB if possible Andreas Schwab
2014-04-25  9:37 ` Michael Schmitz
2014-04-29 10:11 ` Thorsten Glaser
2014-04-29 10:33   ` Andreas Schwab
2014-04-29 16:29     ` Geert Uytterhoeven
2014-04-29 16:43       ` Andreas Schwab
2014-04-30  7:38         ` Michael Schmitz
2014-05-25 16:57           ` Geert Uytterhoeven [this message]
2014-05-26  1:28             ` Michael Schmitz
2014-06-28 12:46             ` Andreas Schwab
2014-06-28 13:26               ` Geert Uytterhoeven
2014-06-28 13:49                 ` Andreas Schwab
2014-06-28 14:29                   ` Geert Uytterhoeven
2014-06-28 14:36                     ` Andreas Schwab
2014-06-28 15:55                       ` Geert Uytterhoeven
2014-06-28 16:27                         ` Andreas Schwab
2014-07-06  9:31                           ` Geert Uytterhoeven
2014-07-07 22:11                             ` Andreas Schwab
2014-07-08  7:23                               ` Geert Uytterhoeven

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.02.1405251846540.6045@ayla.of.borg \
    --to=geert@linux-m68k.org \
    --cc=linux-m68k@vger.kernel.org \
    --cc=schmitzmic@gmail.com \
    --cc=schwab@linux-m68k.org \
    --cc=tg@debian.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox