Large TLBs on 40x

Josh Boyer jwboyer at charter.net
Thu Aug 12 03:42:40 EST 2004


On Wed, 2004-08-11 at 10:45, Matt Porter wrote:
> On Wed, Aug 11, 2004 at 08:50:03AM -0500, Josh Boyer wrote:
> > On Tue, 2004-08-10 at 09:35, Matt Porter wrote:
> > > On Tue, Aug 10, 2004 at 02:04:44AM -0400, Dan Malek wrote:
> > > >
> > > > On Aug 9, 2004, at 10:21 PM, Josh Boyer wrote:
> > > >
> > > > > I have some boards I could test such a patch on.  Or is it a case of
> > > > > "this isn't trivial to do"?
> > > >
> > > > Ummmmm.....what are we talking about here?
> > > >
> > > > Both MPC8xx, and IBM40x have configuration options for
> > > > pinning some (small) amount of kernel space.  You can choose
> > > > to enable this if you wish, I don't think it is normally enabled.
> > > > I've never found a benchmark that proved either was better,
> > > > but I left the code there for others to experiment with.
> > >
> > > PPC40x no longer has this in 2.6. It has been deprecated by the dynamic
> > > large tlb support. He's looking for an option (like nobats) to cause
> > > kernel lowmem to not be mapped by large page entries.
> > >
> > > So, to answer the original question, I would suggest a patch
> > > that that uses a 'noltlb' cmdline option, then skips the PPC40x
> > > large page mapping in 4xx_mmu.c based on that. See the code
> > > that implements 'nobats' for an example.
> >
> > Hm...  like this?  Against 2.6.8-rc4.
>
> Looks good to me, except we should probably have the cmdline option
> be 'noltlbs'...minor nit.

Yep, fixed.  Thanks for the tips.

thx,
josh

Signed-off-by: Josh Boyer

diff -Naur -x '*.swp' linux-2.6.orig/arch/ppc/mm/4xx_mmu.c linux-2.6/arch/ppc/mm/4xx_mmu.c
--- linux-2.6.orig/arch/ppc/mm/4xx_mmu.c	2004-06-16 00:18:37.000000000 -0500
+++ linux-2.6/arch/ppc/mm/4xx_mmu.c	2004-08-11 08:25:11.000000000 -0500
@@ -52,6 +52,7 @@
 #include <asm/setup.h>
 #include "mmu_decl.h"

+extern int __map_without_ltlbs;
 /*
  * MMU_init_hw does the chip-specific initialization of the MMU hardware.
  */
@@ -102,6 +103,10 @@
 	p = PPC_MEMSTART;
 	s = 0;

+	if (__map_without_ltlbs) {
+		return s;
+	}
+
 	while (s <= (total_lowmem - LARGE_PAGE_SIZE_16M)) {
 		pmd_t *pmdp;
 		unsigned long val = p | _PMD_SIZE_16M | _PAGE_HWEXEC | _PAGE_HWWRITE;
diff -Naur -x '*.swp' linux-2.6.orig/arch/ppc/mm/init.c linux-2.6/arch/ppc/mm/init.c
--- linux-2.6.orig/arch/ppc/mm/init.c	2004-08-11 08:03:55.000000000 -0500
+++ linux-2.6/arch/ppc/mm/init.c	2004-08-11 08:11:24.000000000 -0500
@@ -104,6 +104,7 @@
  * -- Cort
  */
 int __map_without_bats;
+int __map_without_ltlbs;

 /* max amount of RAM to use */
 unsigned long __max_memory;
@@ -204,6 +205,10 @@
 		__map_without_bats = 1;
 	}

+	if (strstr(cmd_line, "noltlbs")) {
+		__map_without_ltlbs = 1;
+	}
+
 	/* Look for mem= option on command line */
 	if (strstr(cmd_line, "mem=")) {
 		char *p, *q;


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-embedded mailing list