kernel-ark/arch/powerpc/kernel
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
..
vdso32
vdso64
align.c
asm-offsets.c powerpc: Use 64k pages without needing cache-inhibited large pages 2006-06-15 10:45:18 +10:00
binfmt_elf32.c
btext.c
cpu_setup_6xx.S
cpu_setup_power4.S
cputable.c
crash_dump.c
crash.c
dma_64.c
entry_32.S
entry_64.S
firmware.c
fpu.S
head_4xx.S
head_8xx.S
head_32.S
head_44x.S
head_64.S
head_booke.h
head_fsl_booke.S
ibmebus.c
idle_6xx.S
idle_power4.S
idle.c
init_task.c
iomap.c
iommu.c
irq.c
kprobes.c
l2cr_6xx.S
legacy_serial.c
lparcfg.c
lparmap.c
machine_kexec_32.c
machine_kexec_64.c
machine_kexec.c
Makefile
misc_32.S
misc_64.S
module_32.c
module_64.c
nvram_64.c
of_device.c
paca.c
pci_32.c
pci_64.c
pci_direct_iommu.c
pci_dn.c
pci_iommu.c
perfmon_fsl_booke.c
pmc.c
ppc32.h
ppc_ksyms.c
proc_ppc64.c
process.c
prom_init.c
prom_parse.c
prom.c powerpc: Use 64k pages without needing cache-inhibited large pages 2006-06-15 10:45:18 +10:00
ptrace32.c
ptrace-common.h
ptrace.c
rtas_flash.c
rtas_pci.c
rtas-proc.c
rtas-rtc.c
rtas.c
semaphore.c
setup_32.c
setup_64.c
setup-common.c
setup.h
signal_32.c
signal_64.c
smp-tbsync.c
smp.c
swsusp_32.S
sys_ppc32.c
syscalls.c
sysfs.c
systbl.S
tau_6xx.c
time.c
traps.c
udbg_16550.c
udbg.c
vdso.c
vecemu.c
vector.S
vio.c
vmlinux.lds.S