linux/arch/powerpc/mm
Benjamin Herrenschmidt ee4f2ea486 [POWERPC] Fix 32-bit mm operations when not using BATs
On hash table based 32 bits powerpc's, the hash management code runs with
a big spinlock. It's thus important that it never causes itself a hash
fault. That code is generally safe (it does memory accesses in real mode
among other things) with the exception of the actual access to the code
itself. That is, the kernel text needs to be accessible without taking
a hash miss exceptions.

This is currently guaranteed by having a BAT register mapping part of the
linear mapping permanently, which includes the kernel text. But this is
not true if using the "nobats" kernel command line option (which can be
useful for debugging) and will not be true when using DEBUG_PAGEALLOC
implemented in a subsequent patch.

This patch fixes this by pre-faulting in the hash table pages that hit
the kernel text, and making sure we never evict such a page under hash
pressure.

Signed-off-by: Benjamin Herrenchmidt <benh@kernel.crashing.org>

 arch/powerpc/mm/hash_low_32.S |   22 ++++++++++++++++++++--
 arch/powerpc/mm/mem.c         |    3 ---
 arch/powerpc/mm/mmu_decl.h    |    4 ++++
 arch/powerpc/mm/pgtable_32.c  |   11 +++++++----
 4 files changed, 31 insertions(+), 9 deletions(-)
Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-04-13 04:09:39 +10:00
..
4xx_mmu.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
44x_mmu.c [POWERPC] Fix powerpc 44x_mmu build 2006-08-25 13:41:41 +10:00
fault.c [PATCH] Do a single one-line printk in bad_page_fault() 2006-11-13 14:48:56 +11:00
fsl_booke_mmu.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
hash_low_32.S [POWERPC] Fix 32-bit mm operations when not using BATs 2007-04-13 04:09:39 +10:00
hash_low_64.S [POWERPC] Allow drivers to map individual 4k pages to userspace 2007-04-13 03:55:18 +10:00
hash_native_64.c [POWERPC] Rename get_property to of_get_property: arch/powerpc 2007-04-13 03:55:19 +10:00
hash_utils_64.c [POWERPC] Allow drivers to map individual 4k pages to userspace 2007-04-13 03:55:18 +10:00
hugetlbpage.c [POWERPC] Make tlb flush batch use lazy MMU mode 2007-04-13 04:09:38 +10:00
imalloc.c [PATCH] getting rid of all casts of k[cmz]alloc() calls 2006-12-13 09:05:58 -08:00
init_32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
init_64.c [PATCH] slab: remove kmem_cache_t 2006-12-07 08:39:25 -08:00
lmb.c [POWERPC] Allow duplicate lmb_reserve() calls 2007-03-08 15:43:28 +11:00
Makefile [POWERPC] ps3: multiplatform build fixes 2006-12-04 20:41:16 +11:00
mem.c [POWERPC] Fix 32-bit mm operations when not using BATs 2007-04-13 04:09:39 +10:00
mmap.c [PATCH] powerpc: trivial: modify comments to refer to new location of files 2006-02-10 16:53:51 +11:00
mmu_context_32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
mmu_context_64.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
mmu_decl.h [POWERPC] Fix 32-bit mm operations when not using BATs 2007-04-13 04:09:39 +10:00
numa.c [POWERPC] Rename get_property to of_get_property: arch/powerpc 2007-04-13 03:55:19 +10:00
pgtable_32.c [POWERPC] Fix 32-bit mm operations when not using BATs 2007-04-13 04:09:39 +10:00
pgtable_64.c [POWERPC] Fix bug with early ioremap and 64k pages 2007-02-16 14:00:20 +11:00
ppc_mmu_32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
slb_low.S [POWERPC] implement BEGIN/END_FW_FTR_SECTION 2006-10-03 16:50:21 +10:00
slb.c [POWERPC] iSeries: fix slb.c for combined build 2006-12-04 20:39:19 +11:00
stab.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tlb_32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tlb_64.c [POWERPC] Make tlb flush batch use lazy MMU mode 2007-04-13 04:09:38 +10:00