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