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
..
arch-aaec2000
Convert files to UTF-8 and some cleanups
2007-10-19 23:21:04 +02:00
arch-at91
[ARM] 4802/1: Fix typo and remove vague comment
2008-02-04 13:16:39 +00:00
arch-cl7500
[ARM] Use new get_irqnr_preamble
2007-05-12 15:25:50 +01:00
arch-clps711x
[ARM] 4185/2: entry: introduce get_irqnr_preamble and arch_ret_to_user
2007-02-17 15:04:29 +00:00
arch-davinci
[ARM] 4634/1: DaVinci GPIO header build fix
2007-10-31 15:21:52 +00:00
arch-ebsa110
[ARM] Use new get_irqnr_preamble
2007-05-12 15:25:50 +01:00
arch-ebsa285
[ARM] Use new get_irqnr_preamble
2007-05-12 15:25:50 +01:00
arch-ep93xx
[ARM] 4671/1: ep93xx: remove obsolete gpio_line_* operations
2008-01-26 14:37:31 +00:00
arch-h720x
[ARM] 4185/2: entry: introduce get_irqnr_preamble and arch_ret_to_user
2007-02-17 15:04:29 +00:00
arch-imx
imxfb: fast read flag and nonstandard field configurable
2007-10-16 09:43:21 -07:00
arch-integrator
[ARM] Remove Integrator/CP SMP platform support
2007-05-16 15:35:26 +01:00
arch-iop13xx
async_tx: replace 'int_en' with operation preparation flags
2008-02-06 10:12:18 -07:00
arch-iop32x
[ARM] 4476/1: EM7210/SS4000E support
2007-07-20 09:35:35 +01:00
arch-iop33x
iop3xx: surface the iop3xx DMA and AAU units to the iop-adma driver
2007-07-13 08:06:19 -07:00
arch-ixp4xx
Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
2008-02-04 15:29:53 -08:00
arch-ixp23xx
[ARM] 4680/1: parentheses around NR_IRQS definition
2007-11-29 20:56:57 +00:00
arch-ixp2000
[ARM] 4185/2: entry: introduce get_irqnr_preamble and arch_ret_to_user
2007-02-17 15:04:29 +00:00
arch-ks8695
[ARM] 4603/1: KS8695: debugfs interface to view pin state
2008-01-26 14:38:48 +00:00
arch-l7200
[ARM] 4185/2: entry: introduce get_irqnr_preamble and arch_ret_to_user
2007-02-17 15:04:29 +00:00
arch-lh7a40x
[ARM] 4248/1: lh7a40x: fix missing definitions for get_irqnr_preamble
2007-03-08 13:33:57 +00:00
arch-msm
[ARM] msm: dma support for MSM7X00A
2008-01-26 14:39:14 +00:00
arch-mxc
[ARM] 4530/1: MXC: fix elf_hwcap compile breakage as in iop13xx
2007-07-28 20:52:55 +01:00
arch-netx
[ARM] 4329/1: fix position of NETX_SYSTEM_REG
2007-05-03 20:22:49 +01:00
arch-ns9xxx
[ARM] 4595/1: ns9xxx: define registers as void __iomem * instead of volatile u32
2007-10-12 23:43:41 +01:00
arch-omap
[ALSA] Remove sound/driver.h
2008-01-31 17:29:48 +01:00
arch-orion
[ARM] Orion: MV88F5181 support bits
2008-01-26 15:03:55 +00:00
arch-pnx4008
[ARM] 4185/2: entry: introduce get_irqnr_preamble and arch_ret_to_user
2007-02-17 15:04:29 +00:00
arch-pxa
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
2008-02-07 12:57:44 -08:00
arch-realview
[ARM] 4822/1: RealView: Change the REALVIEW_MPCORE configuration option
2008-02-04 17:52:28 +00:00
arch-rpc
[ARM] 4564/1: Add tagged list support for Acorn RiscPC's uncompress code
2007-10-12 23:43:11 +01:00
arch-s3c2400
[ARM] 4522/1: S3C: split include/asm-arm/arch/memory.h
2007-07-22 17:06:04 +01:00
arch-s3c2410
FB/S3C2412: add S3C2412 support to S3C2410 fb driver
2008-02-06 10:41:17 -08:00
arch-sa1100
[ARM] unbalanced parenthesis fix
2007-10-12 23:43:21 +01:00
arch-shark
[ARM] 4185/2: entry: introduce get_irqnr_preamble and arch_ret_to_user
2007-02-17 15:04:29 +00:00
arch-versatile
fix typo 'the same the\>'
2008-02-03 14:59:11 +02:00
hardware
async_tx: replace 'int_en' with operation preparation flags
2008-02-06 10:12:18 -07:00
mach
include/asm-arm/: Spelling fixes
2008-02-03 16:50:59 +02:00
plat-s3c
[ARM] 4632/1: Fix a typo in include/asm-arm/plat-s3c/regs-nand.h
2007-10-31 15:21:33 +00:00
plat-s3c24xx
[ARM] 4786/1: S3C2412: Add SPI FIFO controll constants
2008-01-28 13:20:51 +00:00
.gitignore
[ARM] 4216/1: add .gitignore entries for ARM specific files
2007-02-17 11:26:41 +00:00
a.out-core.h
aout: suppress A.OUT library support if !CONFIG_ARCH_SUPPORTS_AOUT
2008-02-08 09:22:30 -08:00
a.out.h
aout: move STACK_TOP[_MAX] to asm/processor.h
2008-02-08 09:22:29 -08:00
assembler.h
atomic.h
atomic.h: atomic_add_unless as inline. Remove system.h atomic.h circular dependency
2007-05-08 11:15:20 -07:00
auxvec.h
bitops.h
ext4: Add ext4_find_next_bit()
2008-01-28 23:58:27 -05:00
bug.h
[ARM] 3983/2: remove unused argument to __bug()
2006-12-07 22:38:09 +00:00
bugs.h
byteorder.h
cache.h
cacheflush.h
[ARM] Marvell Feroceon CPU core support
2008-01-26 15:03:38 +00:00
checksum.h
[ARM] Improve csum_fold, cleanup csum_tcpudp_magic()
2007-02-06 16:46:46 +00:00
cnt32_to_63.h
[ARM] 3978/1: macro to provide a 63-bit value from a 32-bit hardware counter
2006-12-07 16:06:45 +00:00
cpu-multi32.h
[ARM] Unuse another Linux PTE bit
2006-12-13 14:34:43 +00:00
cpu-single.h
[ARM] Unuse another Linux PTE bit
2006-12-13 14:34:43 +00:00
cpu.h
cputime.h
current.h
delay.h
device.h
[ARM] Add a reference from struct device to the dma bounce info
2007-02-12 10:28:24 +00:00
div64.h
[NET]: div64_64 consolidate (rev3)
2007-04-25 22:23:33 -07:00
dma-mapping.h
arm: sg fallout
2007-10-23 12:37:59 +02:00
dma.h
domain.h
[ARM] 4127/1: Flush the prefetch buffer after changing the DACR
2007-02-08 14:49:18 +00:00
dyntick.h
ecard.h
[ARM] ecard: add ecardm_iomap() / ecardm_iounmap()
2007-05-11 17:19:02 +01:00
elf.h
Cleanup asm/{elf,page,user}.h: #ifdef __KERNEL__ is no longer needed
2008-02-07 08:42:30 -08:00
emergency-restart.h
errno.h
fb.h
fbdev: detect primary display device
2007-07-17 10:23:11 -07:00
fcntl.h
fiq.h
flat.h
[ARM] nommu: fix breakage caused by f9720205d1
2007-10-31 15:21:42 +00:00
floppy.h
cleanup floppy.h
2007-10-17 08:42:55 -07:00
fpstate.h
[ARM] 4583/1: ARMv7: Add VFPv3 support
2008-01-26 14:41:28 +00:00
futex.h
glue.h
[ARM] armv7: add support for ARMv7 cores.
2007-05-08 22:55:53 +01:00
gpio.h
[PATCH] GPIO core
2007-02-12 09:48:34 -08:00
hardirq.h
hardware.h
hw_irq.h
hwcap.h
[ARM] 4473/2: Take the HWCAP definitions out of the elf.h file
2007-07-12 16:20:15 +01:00
ide.h
ide: add CONFIG_IDE_ARCH_OBSOLETE_INIT
2007-10-20 00:32:32 +02:00
io.h
endianness annotations in arm io.h
2007-10-14 12:41:52 -07:00
ioctl.h
ioctls.h
[ARM] enable arbitary speed tty ioctls and split input/output speed
2007-05-28 23:07:34 +01:00
ipcbuf.h
irq.h
[ARM] 4073/1: Prevent s3c24xx drivers from including asm/arch/hardware.h and asm/arch/irqs.h
2006-12-30 17:05:07 +00:00
irq_regs.h
irqflags.h
Kbuild
[ARM] 4473/2: Take the HWCAP definitions out of the elf.h file
2007-07-12 16:20:15 +01:00
kdebug.h
move die notifier handling to common code
2007-05-08 11:15:04 -07:00
kexec.h
[ARM] 4736/1: Export atags to userspace and allow kexec to use customised atags
2008-02-04 13:21:03 +00:00
kmap_types.h
kprobes.h
ARM kprobes: special hook for the kprobes breakpoint handler
2008-01-26 15:25:17 +00:00
leds.h
limits.h
linkage.h
[ARM] VFP: fix section mismatch error
2007-06-10 12:22:20 +01:00
local.h
locks.h
mc146818rtc.h
memory.h
[ARM] Clean up discontigmem support
2006-11-30 22:52:28 +00:00
mman.h
mmu.h
[ARM] ARMv6: add CPU_HAS_ASID configuration
2007-05-17 10:19:23 +01:00
mmu_context.h
[ARM] ARMv6: add CPU_HAS_ASID configuration
2007-05-17 10:19:23 +01:00
mmzone.h
module.h
msgbuf.h
mtd-xip.h
mutex.h
misc: removal of final callers using fastcall
2008-02-08 09:22:31 -08:00
namei.h
nwflash.h
page-nommu.h
page.h
CONFIG_HIGHPTE vs. sub-page page tables.
2008-02-08 09:22:42 -08:00
param.h
parport.h
pci.h
[ARM] 4577/1: ITE 8152 PCI bridge support
2007-10-15 18:53:59 +01:00
percpu.h
pgalloc.h
CONFIG_HIGHPTE vs. sub-page page tables.
2008-02-08 09:22:42 -08:00
pgtable-hwdef.h
pgtable-nommu.h
[ARM] 4531/1: remove is_in_rom() protptype
2007-08-04 22:13:43 +01:00
pgtable.h
[ARM] 4644/2: fix flush_kern_tlb_range() in module space
2007-11-08 10:07:14 +00:00
poll.h
Consolidate asm/poll.h
2007-05-11 08:29:34 -07:00
posix_types.h
asm-*/posix_types.h: scrub __GLIBC__
2008-02-08 09:22:34 -08:00
proc-fns.h
[ARM] Marvell Feroceon CPU core support
2008-01-26 15:03:38 +00:00
processor.h
aout: move STACK_TOP[_MAX] to asm/processor.h
2008-02-08 09:22:29 -08:00
procinfo.h
[ARM] Move HWCAP_* definitions to asm/elf.h
2006-11-30 12:24:46 +00:00
ptrace.h
[ARM] 4474/1: Do not check the PSR_F_BIT in valid_user_regs
2007-07-12 16:20:52 +01:00
resource.h
rtc.h
scatterlist.h
Add CONFIG_DEBUG_SG sg validation
2007-10-22 21:20:03 +02:00
sections.h
segment.h
semaphore-helper.h
semaphore.h
kill DECLARE_MUTEX_LOCKED
2007-10-17 08:42:47 -07:00
sembuf.h
serial.h
setup.h
[ARM] use __used attribute
2007-05-30 13:15:06 +01:00
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
sizes.h
[ARM] 4372/1: Define byte sizes in asm-arm/sizes.h
2007-05-11 21:07:58 +01:00
smp.h
[ARM] 4814/1: RealView: Add broadcasting clockevents support for ARM11MPCore
2008-02-04 17:52:19 +00:00
socket.h
[NET]: Introducing socket mark socket option.
2008-01-31 19:27:19 -08:00
sockios.h
[NET]: Introduce SIOCGSTAMPNS ioctl to get timestamps with nanosec resolution
2007-04-25 22:24:04 -07:00
spinlock.h
[PATCH] Remove the last reference to rwlock_is_locked() macro.
2007-02-11 10:51:34 -08:00
spinlock_types.h
stat.h
statfs.h
string.h
suspend.h
system.h
Add cmpxchg_local to arm
2008-02-07 08:42:31 -08:00
termbits.h
[ARM] enable arbitary speed tty ioctls and split input/output speed
2007-05-28 23:07:34 +01:00
termios.h
[ARM] enable arbitary speed tty ioctls and split input/output speed
2007-05-28 23:07:34 +01:00
therm.h
thread_info.h
remove unused TIF_NOTIFY_RESUME flag
2007-07-31 15:39:38 -07:00
thread_notify.h
timex.h
tlb.h
add mm argument to pte/pmd/pud/pgd_free
2008-02-05 09:44:18 -08:00
tlbflush.h
remove unused flush_tlb_pgtables
2007-10-19 11:53:34 -07:00
topology.h
traps.h
ARM kprobes: prevent some functions involved with kprobes from being probed
2008-01-26 15:25:17 +00:00
types.h
remove strict ansi check from __u64 in asm/types.h
2007-10-17 08:42:53 -07:00
uaccess.h
Storage class should be before const qualifier
2007-02-17 20:11:19 +01:00
ucontext.h
unaligned.h
arm unaligned.h annotations
2007-07-26 11:11:57 -07:00
unistd.h
[ARM] Add fallocate syscall entry
2007-10-12 23:43:31 +01:00
user.h
Sanitize the type of struct user.u_ar0
2008-02-07 08:42:30 -08:00
vfp.h
[ARM] 4583/1: ARMv7: Add VFPv3 support
2008-01-26 14:41:28 +00:00
vfpmacros.h
[ARM] 4583/1: ARMv7: Add VFPv3 support
2008-01-26 14:41:28 +00:00
vga.h
xor.h