Nick Piggin
7e675137a8
mm: introduce pte_special pte bit
...
s390 for one, cannot implement VM_MIXEDMAP with pfn_valid, due to their memory
model (which is more dynamic than most). Instead, they had proposed to
implement it with an additional path through vm_normal_page(), using a bit in
the pte to determine whether or not the page should be refcounted:
vm_normal_page()
{
...
if (unlikely(vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP))) {
if (vma->vm_flags & VM_MIXEDMAP) {
#ifdef s390
if (!mixedmap_refcount_pte(pte))
return NULL;
#else
if (!pfn_valid(pfn))
return NULL;
#endif
goto out;
}
...
}
This is fine, however if we are allowed to use a bit in the pte to determine
refcountedness, we can use that to _completely_ replace all the vma based
schemes. So instead of adding more cases to the already complex vma-based
scheme, we can have a clearly seperate and simple pte-based scheme (and get
slightly better code generation in the process):
vm_normal_page()
{
#ifdef s390
if (!mixedmap_refcount_pte(pte))
return NULL;
return pte_page(pte);
#else
...
#endif
}
And finally, we may rather make this concept usable by any architecture rather
than making it s390 only, so implement a new type of pte state for this.
Unfortunately the old vma based code must stay, because some architectures may
not be able to spare pte bits. This makes vm_normal_page a little bit more
ugly than we would like, but the 2 cases are clearly seperate.
So introduce a pte_special pte state, and use it in mm/memory.c. It is
currently a noop for all architectures, so this doesn't actually result in any
compiled code changes to mm/memory.o.
BTW:
I haven't put vm_normal_page() into arch code as-per an earlier suggestion.
The reason is that, regardless of where vm_normal_page is actually
implemented, the *abstraction* is still exactly the same. Also, while it
depends on whether the architecture has pte_special or not, that is the
only two possible cases, and it really isn't an arch specific function --
the role of the arch code should be to provide primitive functions and
accessors with which to build the core code; pte_special does that. We do
not want architectures to know or care about vm_normal_page itself, and
we definitely don't want them being able to invent something new there
out of sight of mm/ code. If we made vm_normal_page an arch function, then
we have to make vm_insert_mixed (next patch) an arch function too. So I
don't think moving it to arch code fundamentally improves any abstractions,
while it does practically make the code more difficult to follow, for both
mm and arch developers, and easier to misuse.
[akpm@linux-foundation.org: build fix]
Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-by: Carsten Otte <cotte@de.ibm.com>
Cc: Jared Hulbert <jaredeh@gmail.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-04-28 08:58:23 -07:00
..
dec
zs: move to the serial subsystem
2007-07-18 08:38:22 -07:00
emma2rh
[MIPS] Define MIPS_CPU_IRQ_BASE in generic header
2007-02-06 16:53:08 +00:00
fw
[MIPS] CFE: Make code remotely resemble Linux code.
2008-01-29 10:14:55 +00:00
ip32
[MIPS] IP32: More interrupt renumbering fixes.
2007-11-26 17:26:13 +00:00
jmr3927
[MIPS] txx9tmr clockevent/clocksource driver
2007-10-29 19:35:35 +00:00
lasat
[MIPS] Lasat: Fix overlap of interrupt number ranges.
2007-11-15 23:21:50 +00:00
mach-atlas
[MIPS] SNI: Fix mc146818_decode_year
2007-03-04 19:02:31 +00:00
mach-au1x00
au1xxx-ide: fix MWDMA support
2008-04-26 22:25:22 +02:00
mach-bcm47xx
[MIPS] Deforest the function pointer jungle in the time code.
2007-10-11 23:46:08 +01:00
mach-cobalt
[MIPS] remove unneeded button check for reset
2008-01-29 10:15:00 +00:00
mach-db1x00
Pb1200/DBAu1200: fix bad IDE resource size
2008-04-17 01:14:33 +02:00
mach-dec
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mach-emma2rh
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mach-excite
include/asm-mips/: Spelling fixes
2008-02-03 16:57:20 +02:00
mach-generic
ide: remove ide_init_default_irq() macro
2008-04-18 00:46:35 +02:00
mach-ip22
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mach-ip27
[MIPS] IP27: Tighten up CPU description to fix warnings.
2008-03-12 14:14:41 +00:00
mach-ip28
[MIPS] IP28 support
2008-01-29 10:14:58 +00:00
mach-ip32
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
mach-jazz
[MIPS] Fix and cleanup the MIPS part of the (ab)use of CLOCK_TICK_RATE.
2007-11-02 16:13:48 +00:00
mach-jmr3927
[MIPS] Fix plat_ioremap for JMR3927
2008-03-12 14:14:41 +00:00
mach-lasat
[MIPS] Lasat: fix LASAT_CASCADE_IRQ
2008-03-12 14:14:42 +00:00
mach-lemote
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mach-mips
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mach-mipssim
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mach-pb1x00
Pb1200/DBAu1200: fix bad IDE resource size
2008-04-17 01:14:33 +02:00
mach-pnx8550
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
mach-rm
[MIPS] Fix and cleanup the MIPS part of the (ab)use of CLOCK_TICK_RATE.
2007-11-02 16:13:48 +00:00
mach-sibyte
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mach-tx49xx
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mach-vr41xx
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mach-wrppmc
include/asm-mips/: Spelling fixes
2008-02-03 16:57:20 +02:00
mach-yosemite
[MIPS] Split up war.h
2007-10-11 23:46:07 +01:00
mips-boards
[MIPS] Malta, Atlas: move an extern function declaration to the header file
2008-01-29 10:15:05 +00:00
pci
Fix misspellings of "system", "controller", "interrupt" and "necessary".
2007-10-19 23:10:43 +02:00
pmc-sierra /msp71xx
[MIPS] Delete CONFIG_MSP_FPGA
2008-01-29 10:15:01 +00:00
sgi
include/asm-mips/: Spelling fixes
2008-02-03 16:57:20 +02:00
sibyte
[MIPS] Remove CONFIG_SIBYTE_PT{1120,1125,SWARM}
2008-01-29 10:14:58 +00:00
sn
include/asm-mips/: Spelling fixes
2008-02-03 16:57:20 +02:00
tx4927
[MIPS] TXx9 watchdog support for rbhma3100,rbhma4200,rbhma4500
2008-01-29 10:14:58 +00:00
tx4938
[MIPS] txx9tmr clockevent/clocksource driver
2007-10-29 19:35:35 +00:00
vr41xx
[MIPS] Separate platform_device registration for VR41xx GPIO
2007-07-12 17:41:15 +01:00
xtalk
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
a.out.h
aout: move STACK_TOP[_MAX] to asm/processor.h
2008-02-08 09:22:29 -08:00
abi.h
[MIPS] signals: Share even more code.
2007-02-18 21:31:35 +00:00
addrspace.h
[MIPS] Put cast inside macro instead of all the callers
2008-01-29 10:14:55 +00:00
asm.h
[MIPS] IP28: added cache barrier to assembly routines
2008-01-29 10:14:58 +00:00
asmmacro-32.h
asmmacro-64.h
asmmacro.h
[MIPS] Fix "no space between function name and open parenthesis" warnings.
2007-10-11 23:46:15 +01:00
atomic.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
auxvec.h
barrier.h
[MIPS] Make support for weakly ordered LL/SC a config option.
2007-07-20 18:57:39 +01:00
bcache.h
[MIPS] SNI: remove unused pcimt_scache.c
2007-08-27 02:16:54 +01:00
bitops.h
generic: implement __fls on all 64-bit archs
2008-04-26 19:21:16 +02:00
bootinfo.h
[MIPS] RM: Collected changes
2008-01-29 10:14:59 +00:00
branch.h
break.h
bug.h
[MIPS] Fix BUG(), BUG_ON() handling
2007-04-20 14:58:37 +01:00
bugs.h
[MIPS] R4000/R4400 errata workarounds
2008-01-29 10:14:54 +00:00
byteorder.h
[MIPS] Fix "no space between function name and open parenthesis" warnings.
2007-10-11 23:46:15 +01:00
cache.h
cachectl.h
cacheflush.h
[MIPS] Handle aliases in vmalloc correctly.
2008-04-07 22:31:04 +01:00
cacheops.h
[MIPS] Cacheops.h: Fix typo.
2008-01-15 01:04:42 +00:00
checksum.h
[MIPS] Fix wrong checksum for split TCP packets on 64-bit MIPS
2007-04-20 14:58:37 +01:00
cmpxchg.h
Add cmpxchg64 and cmpxchg64_local to mips
2008-02-07 08:42:30 -08:00
compat-signal.h
[MIPS] use compat_siginfo in rt_sigframe_n32
2007-06-26 19:57:33 +02:00
compat.h
asm-*/compat.h: fix typo in comment
2008-02-03 16:32:51 +02:00
compiler.h
[MIPS] cpu-bugs64.c: GCC 3.3 constraint workaround
2007-09-19 19:33:14 +01:00
cpu-features.h
[MIPS] Fix use of smp_processor_id() in preemptible code.
2007-12-01 00:39:37 +00:00
cpu-info.h
[MIPS] MT: Scheduler support for SMT
2008-01-29 10:14:57 +00:00
cpu.h
[MIPS] Alchemy: Au1210/Au1250 CPU support
2008-01-29 10:14:59 +00:00
cputime.h
current.h
debug.h
delay.h
[MIPS] R4000/R4400 daddiu erratum workaround
2008-01-29 10:14:55 +00:00
device.h
Driver core: add dev_archdata to struct device
2006-12-01 14:52:01 -08:00
div64.h
[MIPS] Change names of local variables to silence sparse
2007-07-10 17:33:06 +01:00
dma-mapping.h
[MIPS] Don't claim we support dma_declare_coherent_memory - we don't.
2007-02-13 22:40:50 +00:00
dma.h
[MIPS] IP28 support
2008-01-29 10:14:58 +00:00
ds1286.h
dsp.h
edac.h
[MIPS] Polish <asm/edac.h>.
2007-08-27 02:16:59 +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
[MIPS] Fix value of O_TRUNC
2007-10-01 14:17:50 +01:00
fixmap.h
[MIPS] fixmap: delete unused __set_fixmap, set_fixmap and set_fixmap_nocache
2008-01-29 10:15:00 +00:00
floppy.h
cleanup floppy.h
2007-10-17 08:42:55 -07:00
fpregdef.h
fpu.h
remove asm/bitops.h includes
2007-10-19 11:53:41 -07:00
fpu_emulator.h
futex.h
[MIPS] Fix possible hang in LL/SC futex loops.
2007-11-26 17:26:14 +00:00
gdb-stub.h
gpio.h
[MIPS] Add generic GPIO support
2007-07-10 17:32:55 +01:00
gt64120.h
[MIPS] time: Add GT641xx timer0 clockevent driver
2007-10-22 22:09:00 +01:00
hardirq.h
hazards.h
[MIPS] R1: Fix hazard barriers to make kernels work on R2 also.
2007-10-11 23:46:19 +01:00
highmem.h
[MIPS] Fix yosemite build error
2008-03-12 14:14:42 +00:00
hw_irq.h
[MIPS] i8295 cleanups.
2007-10-11 23:46:04 +01:00
i8253.h
[MIPS] Fix pcspeaker build.
2007-11-26 17:26:13 +00:00
i8259.h
[MIPS] i8295 cleanups.
2007-10-11 23:46:04 +01:00
ide.h
inst.h
[MIPS] Fix rdhwr_op definition.
2006-07-13 21:26:08 +01:00
inventory.h
[MIPS] Fix "no space between function name and open parenthesis" warnings.
2007-10-11 23:46:15 +01:00
io.h
Remove dma_cache_(wback|inv|wback_inv) functions
2007-10-17 08:42:57 -07:00
ioctl.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
ioctls.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
ipcbuf.h
irq.h
[MIPS] IRQ Affinity Support for SMTC on Malta Platform
2007-10-11 23:45:57 +01:00
irq_cpu.h
[MIPS] Define MIPS_CPU_IRQ_BASE in generic header
2007-02-06 16:53:08 +00:00
irq_gt641xx.h
[MIPS] Add GT641xx IRQ routines.
2007-10-11 23:46:04 +01:00
irq_regs.h
[MIPS] Complete fixes after removal of pt_regs argument to int handlers.
2006-10-08 02:38:28 +01:00
irqflags.h
[MIPS] Fix "no space between function name and open parenthesis" warnings.
2007-10-11 23:46:15 +01:00
isadep.h
jazz.h
[MIPS] JAZZ fixes
2007-10-11 23:46:00 +01:00
jazzdma.h
[MIPS] JAZZ fixes
2007-10-11 23:46:00 +01:00
Kbuild
[MIPS] Have headers_install install <asm/cachectl.h> and <asm/sysmips.h>.
2006-09-27 13:37:56 +01:00
kdebug.h
move die notifier handling to common code
2007-05-08 11:15:04 -07:00
kexec.h
kdump/kexec: calculate note size at compile time
2007-05-08 11:15:07 -07:00
kmap_types.h
kspd.h
kvm.h
kvm: provide kvm.h for all architecture: fixes headers_install
2008-04-02 15:28:18 -07:00
linkage.h
[MIPS] Sibyte: Replace SB1 cachecode with standard R4000 class cache code.
2007-10-11 23:46:05 +01:00
local.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
m48t35.h
m48t37.h
mc146818-time.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
mc146818rtc.h
mips_mt.h
[MIPS] MT: Enable coexistence of AP/SP with VSMP and SMTC.
2007-07-31 21:35:24 +01:00
mipsmtregs.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
mipsprom.h
[MIPS] RM: Collected changes
2008-01-29 10:14:59 +00:00
mipsregs.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
mman.h
[PATCH] Remove final references to deprecated "MAP_ANON" page protection flag
2007-02-11 10:51:17 -08:00
mmu.h
mmu_context.h
[MIPS] Kill num_online_cpus() loops.
2007-10-11 23:46:18 +01:00
mmzone.h
module.h
[MIPS] define Hit_Invalidate_I to Index_Invalidate_I for loongson2
2007-07-10 17:33:02 +01:00
msc01_ic.h
[MIPS] MT: Reenable EIC support and add support for SOCit SC.
2007-05-11 14:28:31 +01:00
msgbuf.h
mutex.h
namei.h
nile4.h
[MIPS] Add back support for LASAT platforms
2007-10-11 23:46:00 +01:00
paccess.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
page.h
CONFIG_HIGHPTE vs. sub-page page tables.
2008-02-08 09:22:42 -08:00
param.h
parport.h
[MIPS] Fix "no space between function name and open parenthesis" warnings.
2007-10-11 23:46:15 +01:00
pci.h
[MIPS] PCI: Always enable CONFIG_PCI_DOMAINS
2007-10-11 23:46:03 +01:00
percpu.h
pgalloc.h
CONFIG_HIGHPTE vs. sub-page page tables.
2008-02-08 09:22:42 -08:00
pgtable-32.h
[MIPS] Fix yosemite build error
2008-03-12 14:14:42 +00:00
pgtable-64.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
pgtable-bits.h
pgtable.h
mm: introduce pte_special pte bit
2008-04-28 08:58:23 -07:00
pmon.h
[MIPS] PMON: Fix cpustart declaration.
2007-07-31 21:35:32 +01: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
prctl.h
[MIPS] Fix "no space between function name and open parenthesis" warnings.
2007-10-11 23:46:15 +01:00
prefetch.h
processor.h
aout: move STACK_TOP[_MAX] to asm/processor.h
2008-02-08 09:22:29 -08:00
ptrace.h
[MIPS] IP22: Fix warning.
2007-10-16 18:23:47 +01:00
r4kcache.h
[MIPS] Use real cache invalidate
2008-01-29 10:14:57 +00:00
reboot.h
reg.h
regdef.h
resource.h
rm9k-ocd.h
rtlx.h
[MIPS] RTLX: Handle copy_*_user return values.
2007-03-17 01:03:29 +00:00
scatterlist.h
Add CONFIG_DEBUG_SG sg validation
2007-10-22 21:20:03 +02:00
seccomp.h
[MIPS] Fixup secure computing stuff.
2007-07-31 21:35:21 +01:00
sections.h
[MIPS] Remove _fdata from asm-mips/sections.h
2007-02-06 16:53:15 +00:00
segment.h
semaphore.h
Generic semaphore implementation
2008-04-17 10:42:34 -04:00
sembuf.h
serial.h
[MIPS] Put an end to <asm/serial.h>'s long and annyoing existence
2007-07-10 17:33:01 +01:00
setup.h
[PATCH] cleanup asm/setup.h userspace visibility
2006-12-07 08:39:46 -08:00
sgialib.h
[MIPS] Fix and cleanup the mess that a dozen prom_printf variants are.
2007-03-04 19:02:37 +00:00
sgiarcs.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
sgidefs.h
shmbuf.h
shmparam.h
sigcontext.h
[MIPS] Add basic SMARTMIPS ASE support
2007-02-22 00:50:44 +00:00
siginfo.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
signal.h
[MIPS] signals: Share even more code.
2007-02-18 21:31:35 +00:00
sim.h
[MIPS] Fix "no space between function name and open parenthesis" warnings.
2007-10-11 23:46:15 +01:00
smp-ops.h
[MIPS] SMP: Call platform methods via ops structure.
2008-01-29 10:14:57 +00:00
smp.h
[MIPS] SMP: Call platform methods via ops structure.
2008-01-29 10:14:57 +00:00
smtc.h
[MIPS] SMTC: Move MIPS_CPU_IPI_IRQ definition into header.
2007-08-27 02:16:55 +01:00
smtc_ipi.h
[MIPS] SMTC: Fix build error.
2008-01-22 00:35:23 +00:00
smtc_proc.h
sni.h
[MIPS] RM: fix EISA=n compilation
2008-02-19 17:01:34 +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
sparsemem.h
spinlock.h
[MIPS] Make support for weakly ordered LL/SC a config option.
2007-07-20 18:57:39 +01:00
spinlock_types.h
stackframe.h
[MIPS] R4000/R4400 daddiu erratum workaround
2008-01-29 10:14:55 +00:00
stacktrace.h
[MIPS] unwind_stack should return a value ...
2007-08-27 02:16:55 +01:00
stat.h
statfs.h
string.h
suspend.h
sysmips.h
system.h
IP22ZILOG: fix lockup and sysrq
2007-11-29 09:24:53 -08:00
termbits.h
[MIPS] tty: add the new ioctls and definitions.
2007-09-10 21:25:27 +01:00
termios.h
[MIPS] tty: add the new ioctls and definitions.
2007-09-10 21:25:27 +01:00
thread_info.h
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
2007-07-31 20:41:53 -07:00
time.h
[MIPS] Clocksource: Only install r4k counter as clocksource if present.
2008-03-12 14:14:42 +00:00
timex.h
[MIPS] Change get_cycles to always return 0.
2007-11-15 23:21:49 +00:00
titan_dep.h
tlb.h
tlbdebug.h
[MIPS] Cleanup tlbdebug.h
2007-07-12 17:41:11 +01:00
tlbflush.h
remove unused flush_tlb_pgtables
2007-10-19 11:53:34 -07:00
topology.h
[MIPS] MT: Scheduler support for SMT
2008-01-29 10:14:57 +00:00
traps.h
txx9irq.h
[MIPS] The irq_chip for TX39/TX49 SoCs
2007-08-27 02:16:52 +01:00
txx9tmr.h
[MIPS] txx9tmr clockevent/clocksource driver
2007-10-29 19:35:35 +00:00
types.h
remove strict ansi check from __u64 in asm/types.h
2007-10-17 08:42:53 -07:00
uaccess.h
[MIPS] R4000/R4400 daddiu erratum workaround
2008-01-29 10:14:55 +00:00
ucontext.h
unaligned.h
[MIPS] Optimize get_unaligned / put_unaligned implementations.
2007-10-11 23:46:15 +01:00
unistd.h
[MIPS] Wire up the timerfd_*() o32 system calls
2008-02-19 17:01:31 +00:00
user.h
Sanitize the type of struct user.u_ar0
2008-02-07 08:42:30 -08:00
vga.h
[MIPS] checkfiles: Fix "need space after that ','" errors.
2007-10-11 23:46:15 +01:00
vpe.h
war.h
[MIPS] R4000/R4400 errata workarounds
2008-01-29 10:14:54 +00:00
wbflush.h
xor.h