linux/include/asm-powerpc
Martin Schwidefsky 2f569afd9c CONFIG_HIGHPTE vs. sub-page page tables.
Background: I've implemented 1K/2K page tables for s390.  These sub-page
page tables are required to properly support the s390 virtualization
instruction with KVM.  The SIE instruction requires that the page tables
have 256 page table entries (pte) followed by 256 page status table entries
(pgste).  The pgstes are only required if the process is using the SIE
instruction.  The pgstes are updated by the hardware and by the hypervisor
for a number of reasons, one of them is dirty and reference bit tracking.
To avoid wasting memory the standard pte table allocation should return
1K/2K (31/64 bit) and 2K/4K if the process is using SIE.

Problem: Page size on s390 is 4K, page table size is 1K or 2K.  That means
the s390 version for pte_alloc_one cannot return a pointer to a struct
page.  Trouble is that with the CONFIG_HIGHPTE feature on x86 pte_alloc_one
cannot return a pointer to a pte either, since that would require more than
32 bit for the return value of pte_alloc_one (and the pte * would not be
accessible since its not kmapped).

Solution: The only solution I found to this dilemma is a new typedef: a
pgtable_t.  For s390 pgtable_t will be a (pte *) - to be introduced with a
later patch.  For everybody else it will be a (struct page *).  The
additional problem with the initialization of the ptl lock and the
NR_PAGETABLE accounting is solved with a constructor pgtable_page_ctor and
a destructor pgtable_page_dtor.  The page table allocation and free
functions need to call these two whenever a page table page is allocated or
freed.  pmd_populate will get a pgtable_t instead of a struct page pointer.
 To get the pgtable_t back from a pmd entry that has been installed with
pmd_populate a new function pmd_pgtable is added.  It replaces the pmd_page
call in free_pte_range and apply_to_pte_range.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: <linux-arch@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-02-08 09:22:42 -08:00
..
iseries [POWERPC] include/asm-powerpc/: Spelling fixes 2007-12-20 16:17:44 +11:00
8xx_immap.h [POWERPC] include/asm-powerpc/: Spelling fixes 2007-12-20 16:17:44 +11:00
8253pit.h
a.out.h aout: move STACK_TOP[_MAX] to asm/processor.h 2008-02-08 09:22:29 -08:00
abs_addr.h
agp.h x86: remove flush_agp_mappings() 2008-01-30 13:34:07 +01:00
asm-compat.h
atomic.h
auxvec.h
backlight.h
bitops.h ext4: Add ext4_find_next_bit() 2008-01-28 23:58:27 -05:00
bootx.h
btext.h
bug.h
bugs.h
byteorder.h
cache.h
cacheflush.h
cell-pmu.h
cell-regs.h [POWERPC] cell: Add Cell memory controller register defs and expose it 2007-10-09 21:01:56 +10:00
checksum.h
clk_interface.h
compat.h asm-*/compat.h: fix typo in comment 2008-02-03 16:32:51 +02:00
cpm1.h [POWERPC] CPM: Move definition of buffer descriptor to cpm.h 2008-01-28 08:31:06 -06:00
cpm2.h [POWERPC] CPM: Move definition of buffer descriptor to cpm.h 2008-01-28 08:31:06 -06:00
cpm.h [POWERPC] CPM: Move definition of buffer descriptor to cpm.h 2008-01-28 08:31:06 -06:00
cputable.h [POWERPC] Made FSL Book-E PMC support more generic 2008-02-05 23:34:14 -06:00
cputhreads.h [POWERPC] Cleanup SMT thread handling 2007-12-03 13:56:25 +11:00
cputime.h taskstats scaled time cleanup 2008-02-06 10:41:00 -08:00
current.h
dbdma.h
dcr-mmio.h Use dcr_host_t.base in dcr_unmap() 2007-10-15 14:29:49 -04:00
dcr-native.h [POWERPC] 4xx: PCIe indirect DCR spinlock fix. 2008-02-06 21:02:57 -06:00
dcr-regs.h [POWERPC] 4xx: Improve support for 4xx indirect DCRs 2007-12-23 13:12:11 -06:00
dcr.h
delay.h
device.h
div64.h
dma-mapping.h [POWERPC] Add set_dma_ops() to match get_dma_ops() 2008-01-31 12:11:09 +11:00
dma.h scheduled OSS driver removal 2008-02-06 10:41:02 -08:00
edac.h
eeh_event.h
eeh.h
elf.h [POWERPC] Switch to generic compat_binfmt_elf code 2008-02-07 20:40:18 +11:00
emergency-restart.h
errno.h
exception.h
fb.h
fcntl.h
firmware.h [POWERPC] celleb: Add support for native CBE 2007-12-11 13:34:40 +11:00
floppy.h cleanup floppy.h 2007-10-17 08:42:55 -07:00
fs_pd.h [POWERPC] 85xx: Killed <asm/mpc85xx.h> 2007-10-11 09:14:31 -05:00
futex.h
grackle.h
hardirq.h
heathrow.h
highmem.h
hvcall.h
hvconsole.h
hvcserver.h
hw_irq.h
hydra.h
i8259.h
ibmebus.h [POWERPC] ibmebus: Move to of_device and of_platform_driver, match eHCA and eHEA drivers 2007-10-17 22:30:08 +10:00
ide.h ide: remove stale ide.h "configuration options" 2008-01-25 22:17:08 +01:00
immap_86xx.h [POWERPC] 86xx: fix guts_set_dmacr() and add guts_set_pmuxcr_dma() to immap_86xx.h 2007-12-11 13:57:18 -06:00
immap_cpm2.h
immap_qe.h [POWERPC] QE: Add ability to upload QE firmware 2008-01-23 19:34:06 -06:00
io-defs.h
io.h [POWERPC] Make isa_mem_base common to 32 and 64 bits 2007-12-11 15:43:34 +11:00
ioctl.h
ioctls.h
iommu.h iommu sg: powerpc: convert iommu to use the IOMMU helper 2008-02-05 09:44:11 -08:00
ipcbuf.h
ipic.h [POWERPC] ipic: add new interrupts introduced by new chip 2007-12-11 13:57:18 -06:00
irq_regs.h
irq.h [POWERPC] 86xx: Remove unused IRQ defines 2008-01-28 09:19:16 -06:00
irqflags.h
Kbuild remove include/asm-*/ipc.h 2007-10-17 08:42:55 -07:00
kdebug.h x86: optimize page faults like all other achitectures and kill notifier cruft 2007-10-16 09:42:50 -07:00
kdump.h
kexec.h [POWERPC] kdump shutdown hook support 2008-01-25 22:52:50 +11:00
keylargo.h
kgdb.h
kmap_types.h
kprobes.h kprobes: support kretprobe blacklist 2007-10-16 09:43:10 -07:00
libata-portmap.h
linkage.h
lmb.h [POWERPC] Fix handling of memreserve if the range lands in highmem 2008-01-23 19:29:08 -06:00
local.h
lppaca.h
lv1call.h
machdep.h [POWERPC] Implement arch disable/enable irq hooks. 2007-12-21 22:13:35 +11:00
macio.h
mc146818rtc.h
mediabay.h ppc: fix #ifdef-s in mediabay driver (take 2) 2008-02-06 02:57:50 +01:00
mman.h
mmu_context.h remove asm/bitops.h includes 2007-10-19 11:53:41 -07:00
mmu-8xx.h
mmu-40x.h
mmu-44x.h
mmu-fsl-booke.h
mmu-hash32.h
mmu-hash64.h [POWERPC] Provide a way to protect 4k subpages when using 64k pages 2008-01-24 10:06:01 +11:00
mmu.h
mmzone.h
module.h
mpc8xx.h [POWERPC] 8xx: Get rid of conditional includes of board specific setup 2008-01-28 08:31:04 -06:00
mpc52xx_psc.h [POWERPC] mpc512x: Add MPC512x PSC support to MPC52xx psc driver 2008-02-06 14:05:40 -07:00
mpc52xx.h [POWERPC] Add common clock setting routine mpc52xx_psc_set_clkdiv() 2008-01-26 15:32:18 -07:00
mpc86xx.h
mpc512x.h [POWERPC] mpc512x: Basic platform support 2008-02-06 14:03:10 -07:00
mpc8260.h [POWERPC] 82xx: Embedded Planet EP8248E support 2008-01-23 19:34:43 -06:00
mpic.h [POWERPC] pasemi: Distribute interrupts evenly across cpus 2007-12-28 09:22:25 -06:00
msgbuf.h
mutex.h
namei.h
nvram.h include/asm-powerpc/nvram.h needs list.h 2008-02-05 09:44:08 -08:00
of_device.h [POWERPC] Move of_device allocation into of_device.[ch] 2007-10-17 22:30:07 +10:00
of_platform.h [POWERPC] Enable RTC for Ebony and Walnut (v2) 2008-01-25 07:07:26 -06:00
ohare.h
oprofile_impl.h [POWERPC] Made FSL Book-E PMC support more generic 2008-02-05 23:34:14 -06:00
paca.h taskstats scaled time cleanup 2008-02-06 10:41:00 -08:00
page_32.h Cleanup asm/{elf,page,user}.h: #ifdef __KERNEL__ is no longer needed 2008-02-07 08:42:30 -08:00
page_64.h Cleanup asm/{elf,page,user}.h: #ifdef __KERNEL__ is no longer needed 2008-02-07 08:42:30 -08:00
page.h CONFIG_HIGHPTE vs. sub-page page tables. 2008-02-08 09:22:42 -08:00
param.h
parport.h
pasemi_dma.h pasemi: DMA engine management library 2008-01-28 15:04:21 -08:00
pci-bridge.h [POWERPC] Remove update_bridge_resource 2008-01-23 19:32:30 -06:00
pci.h [POWERPC] Merge PCI resource allocation & assignment 2007-12-20 16:18:09 +11:00
percpu.h POWERPC: use generic per cpu 2008-01-30 23:27:58 +01:00
pgalloc-32.h CONFIG_HIGHPTE vs. sub-page page tables. 2008-02-08 09:22:42 -08:00
pgalloc-64.h CONFIG_HIGHPTE vs. sub-page page tables. 2008-02-08 09:22:42 -08:00
pgalloc.h
pgtable-4k.h
pgtable-64k.h [POWERPC] Provide a way to protect 4k subpages when using 64k pages 2008-01-24 10:06:01 +11:00
pgtable-ppc32.h [POWERPC] Fix swapper_pg_dir size when CONFIG_PTE_64BIT=y on FSL_BOOKE 2007-12-06 13:11:04 -06:00
pgtable-ppc64.h ppc64: SPARSEMEM_VMEMMAP support 2007-10-16 09:42:51 -07:00
pgtable.h
pmac_feature.h
pmac_low_i2c.h
pmac_pfunc.h
pmc.h
pmi.h
poll.h
posix_types.h asm-*/posix_types.h: scrub __GLIBC__ 2008-02-08 09:22:34 -08:00
ppc_asm.h
ppc-pci.h [POWERPC] iSeries: Call iSeries_pcibios_init from setup_arch 2007-12-11 13:42:32 +11:00
processor.h aout: move STACK_TOP[_MAX] to asm/processor.h 2008-02-08 09:22:29 -08:00
prom.h [POWERPC] Add of_translate_dma_address 2007-12-11 15:43:35 +11:00
ps3.h [POWERPC] PS3: Add logical performance monitor driver support 2008-01-25 22:52:53 +11:00
ps3av.h ps3: use symbolic names for video modes 2008-02-06 10:41:17 -08:00
ps3fb.h
ps3stor.h
pSeries_reconfig.h
ptrace.h [POWERPC] Use generic compat_sys_ptrace 2008-02-07 20:40:21 +11:00
qe_ic.h [POWERPC] QEIC: Implement pluggable handlers, fix MPIC cascading 2007-10-08 08:38:57 -05:00
qe.h [POWERPC] QE: Add ability to upload QE firmware 2008-01-23 19:34:06 -06:00
reg_8xx.h
reg_booke.h [POWERPC] Made FSL Book-E PMC support more generic 2008-02-05 23:34:14 -06:00
reg_fsl_emb.h [POWERPC] Made FSL Book-E PMC support more generic 2008-02-05 23:34:14 -06:00
reg.h [POWERPC] Made FSL Book-E PMC support more generic 2008-02-05 23:34:14 -06:00
resource.h
rheap.h
rtas.h Revert "[POWERPC] Fix RTAS os-term usage on kernel panic" 2007-12-03 09:39:45 +11:00
rtc.h
rwsem.h
scatterlist.h Add CONFIG_DEBUG_SG sg validation 2007-10-22 21:20:03 +02:00
seccomp.h
sections.h
semaphore.h kill DECLARE_MUTEX_LOCKED 2007-10-17 08:42:47 -07:00
sembuf.h
serial.h
setjmp.h [POWERPC] Make setjmp/longjmp code usable outside of xmon 2008-01-25 22:52:50 +11:00
setup.h
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
smp.h Convert cpu_sibling_map to be a per cpu variable 2007-10-16 09:42:50 -07:00
smu.h [POWERPC] include/asm-powerpc/: Spelling fixes 2007-12-20 16:17:44 +11:00
socket.h [NET]: Introducing socket mark socket option. 2008-01-31 19:27:19 -08:00
sockios.h
sparsemem.h [POWERPC] PS3: Remove lpar address workaround 2008-01-25 22:52:53 +11:00
spinlock_types.h
spinlock.h
spu_csa.h [POWERPC] spufs: rework class 0 and 1 interrupt handling 2007-12-21 19:46:20 +11:00
spu_info.h
spu_priv1.h [POWERPC] cell: wrap master run control bit 2007-12-21 19:45:05 +11:00
spu.h Merge branch 'linux-2.6' 2008-01-24 10:07:21 +11:00
sstep.h
stat.h
statfs.h
string.h
suspend.h
synch.h
syscalls.h
systbl.h timerfd: new timerfd API 2008-02-05 09:44:07 -08:00
system.h Merge branch 'for-2.6.25' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2008-02-07 09:02:26 -08:00
tce.h
termbits.h
termios.h
thread_info.h
time.h [POWERPC] Fix hardware IRQ time accounting problem. 2007-12-06 16:08:59 +11:00
timex.h
tlb.h
tlbflush.h [POWERPC] Fix oops related to 4xx flush_tlb_page modification 2007-11-09 03:51:14 -06:00
topology.h Convert cpu_sibling_map to be a per cpu variable 2007-10-16 09:42:50 -07:00
tsi108_irq.h
tsi108_pci.h
tsi108.h
types.h remove strict ansi check from __u64 in asm/types.h 2007-10-17 08:42:53 -07:00
uaccess.h
ucc_fast.h
ucc_slow.h [POWERPC] qe: miscellaneous code improvements and fixes to the QE library 2007-10-08 08:38:15 -05:00
ucc.h [POWERPC] qe: miscellaneous code improvements and fixes to the QE library 2007-10-08 08:38:15 -05:00
ucontext.h
udbg.h [POWERPC] 4xx: Add early udbg support for 40x processors 2007-12-23 13:13:03 -06:00
uic.h
unaligned.h
uninorth.h
unistd.h [POWERPC] Provide a way to protect 4k subpages when using 64k pages 2008-01-24 10:06:01 +11:00
user.h Sanitize the type of struct user.u_ar0 2008-02-07 08:42:30 -08:00
vdso_datapage.h [POWERPC] vdso: Fixes for cache block sizes 2007-11-20 13:56:31 +11:00
vdso.h
vga.h
vio.h [POWERPC] iSeries: Fix section mismatch in viodsasd 2008-02-06 16:30:00 +11:00
xilinx_intc.h
xmon.h
xor.h