1
linux/arch/powerpc/mm
Paul Mackerras bf72aeba2f powerpc: Use 64k pages without needing cache-inhibited large pages
Some POWER5+ machines can do 64k hardware pages for normal memory but
not for cache-inhibited pages.  This patch lets us use 64k hardware
pages for most user processes on such machines (assuming the kernel
has been configured with CONFIG_PPC_64K_PAGES=y).  User processes
start out using 64k pages and get switched to 4k pages if they use any
non-cacheable mappings.

With this, we use 64k pages for the vmalloc region and 4k pages for
the imalloc region.  If anything creates a non-cacheable mapping in
the vmalloc region, the vmalloc region will get switched to 4k pages.
I don't know of any driver other than the DRM that would do this,
though, and these machines don't have AGP.

When a region gets switched from 64k pages to 4k pages, we do not have
to clear out all the 64k HPTEs from the hash table immediately.  We
use the _PAGE_COMBO bit in the Linux PTE to indicate whether the page
was hashed in as a 64k page or a set of 4k pages.  If hash_page is
trying to insert a 4k page for a Linux PTE and it sees that it has
already been inserted as a 64k page, it first invalidates the 64k HPTE
before inserting the 4k HPTE.  The hash invalidation routines also use
the _PAGE_COMBO bit, to determine whether to look for a 64k HPTE or a
set of 4k HPTEs to remove.  With those two changes, we can tolerate a
mix of 4k and 64k HPTEs in the hash table, and they will all get
removed when the address space is torn down.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-06-15 10:45:18 +10:00
..
4xx_mmu.c [PATCH] mm: powerpc init_mm without ptlock 2005-11-23 16:08:38 -08:00
44x_mmu.c
fault.c [PATCH] powerpc: trivial spelling fixes in fault.c 2006-04-01 22:37:13 +11:00
fsl_booke_mmu.c [PATCH] Update email address for Kumar 2005-11-13 18:14:10 -08:00
hash_low_32.S [PATCH] powerpc: trivial: modify comments to refer to new location of files 2006-02-10 16:53:51 +11:00
hash_low_64.S powerpc: Use 64k pages without needing cache-inhibited large pages 2006-06-15 10:45:18 +10:00
hash_native_64.c [PATCH] powerpc: Fix buglet with MMU hash management 2006-06-09 21:20:59 +10:00
hash_utils_64.c powerpc: Use 64k pages without needing cache-inhibited large pages 2006-06-15 10:45:18 +10:00
hugetlbpage.c [PATCH] powerpc: Fix pagetable bloat for hugepages 2006-04-28 15:02:51 +10:00
imalloc.c [PATCH] sem2mutex: misc static one-file mutexes 2006-03-26 08:56:55 -08:00
init_32.c [PATCH] remove set_page_count() outside mm/ 2006-03-22 07:54:02 -08:00
init_64.c [PATCH] powerpc: Fix pagetable bloat for hugepages 2006-04-28 15:02:51 +10:00
lmb.c [PATCH] powerpc: Unify mem= handling 2006-05-19 15:02:15 +10:00
Makefile [PATCH] powerpc: Some more fixes to allow building for a Book-E processor 2005-10-20 09:43:32 +10:00
mem.c [PATCH] powerpc: Less verbose mem configuration output 2006-04-22 18:45:12 +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 powerpc: add context.vdso_base for 32-bit too 2006-06-11 14:15:17 +10:00
mmu_context_64.c powerpc: Use 64k pages without needing cache-inhibited large pages 2006-06-15 10:45:18 +10:00
mmu_decl.h [PATCH] powerpc: Remove imalloc.h 2005-11-19 14:46:02 +11:00
numa.c Merge ../linux-2.6 2006-05-05 15:45:48 +10:00
pgtable_32.c [PATCH] lock PTE before updating it in 440/BookE page fault handler 2006-03-29 13:44:15 +11:00
pgtable_64.c [PATCH] powerpc: IOMMU: don't ioremap null addresses 2006-01-10 15:30:31 +11:00
ppc_mmu_32.c powerpc: add context.vdso_base for 32-bit too 2006-06-11 14:15:17 +10:00
slb_low.S powerpc: Use 64k pages without needing cache-inhibited large pages 2006-06-15 10:45:18 +10:00
slb.c powerpc: Use 64k pages without needing cache-inhibited large pages 2006-06-15 10:45:18 +10:00
stab.c powerpc: Remove unused paca->pgdir field 2006-06-12 18:38:21 +10:00
tlb_32.c powerpc: add context.vdso_base for 32-bit too 2006-06-11 14:15:17 +10:00
tlb_64.c powerpc: Use 64k pages without needing cache-inhibited large pages 2006-06-15 10:45:18 +10:00