kernel-ark/arch/s390/include/asm
Martin Schwidefsky abf09bed3c s390/mm: implement software dirty bits
The s390 architecture is unique in respect to dirty page detection,
it uses the change bit in the per-page storage key to track page
modifications. All other architectures track dirty bits by means
of page table entries. This property of s390 has caused numerous
problems in the past, e.g. see git commit ef5d437f71
"mm: fix XFS oops due to dirty pages without buffers on s390".

To avoid future issues in regard to per-page dirty bits convert
s390 to a fault based software dirty bit detection mechanism. All
user page table entries which are marked as clean will be hardware
read-only, even if the pte is supposed to be writable. A write by
the user process will trigger a protection fault which will cause
the user pte to be marked as dirty and the hardware read-only bit
is removed.

With this change the dirty bit in the storage key is irrelevant
for Linux as a host, but the storage key is still required for
KVM guests. The effect is that page_test_and_clear_dirty and the
related code can be removed. The referenced bit in the storage
key is still used by the page_test_and_clear_young primitive to
provide page age information.

For page cache pages of mappings with mapping_cap_account_dirty
there will not be any change in behavior as the dirty bit tracking
already uses read-only ptes to control the amount of dirty pages.
Only for swap cache pages and pages of mappings without
mapping_cap_account_dirty there can be additional protection faults.
To avoid an excessive number of additional faults the mk_pte
primitive checks for PageDirty if the pgprot value allows for writes
and pre-dirties the pte. That avoids all additional faults for
tmpfs and shmem pages until these pages are added to the swap cache.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2013-02-14 15:55:23 +01:00
..
airq.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
appldata.h s390/appldata: change return value of appldata_asm 2012-09-26 15:45:15 +02:00
asm-offsets.h kbuild: move asm-offsets.h to include/generated 2009-12-12 13:08:14 +01:00
atomic.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
barrier.h s390/barrier: convert mb() to define again 2013-02-14 15:55:11 +01:00
bitops.h s390/bitops: find leftmost bit instruction support 2012-11-30 15:40:48 +01:00
bug.h panic: Allow warnings to set different taint flags 2010-05-19 08:36:48 +01:00
bugs.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
cache.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
cacheflush.h module: undo module RONX protection correctly. 2011-05-19 16:55:26 +09:30
ccwdev.h s390/ccwdev: Include asm/schid.h. 2012-12-17 09:50:34 +01:00
ccwgroup.h s390/ccwgroup: allow drivers to call set_{on,off}line 2012-11-23 11:14:35 +01:00
checksum.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
chpid.h UAPI Disintegration 2012-10-09 2012-10-09 14:18:10 +02:00
cio.h s390: Move css limits from drivers/s390/cio/ to include/asm/. 2012-11-06 22:39:49 +01:00
clp.h s390/pci: cleanup clp page allocation 2013-02-14 15:55:16 +01:00
cmb.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
cmpxchg.h s390/cmpxchg,percpu: implement cmpxchg_double() 2012-09-26 15:45:25 +02:00
compat.h COMPAT_SYSCALL_DEFINE: infrastructure 2012-12-19 18:06:58 -05:00
cpcmd.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
cpu_mf.h s390: add support for runtime instrumentation 2012-09-26 15:45:02 +02:00
cpu.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
cputime.h vtime: Consolidate a bit the ctx switch code 2012-11-19 16:41:32 +01:00
crw.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
css_chars.h s390/css_chars: remove superfluous ifdef 2012-10-09 14:17:00 +02:00
ctl_reg.h s390/headers: replace __s390x__ with CONFIG_64BIT where possible 2012-05-24 10:10:10 +02:00
current.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
debug.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
delay.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
device.h
diag.h [S390] replace diag10() with diag10_range() function 2011-05-10 17:13:43 +02:00
div64.h
dma-mapping.h s390/dma: remove dma_is_consistent() declaration 2013-02-14 15:55:12 +01:00
dma.h s390/pci: define isa_dma_bridge_buggy 2013-01-08 10:57:09 +01:00
eadm.h s390/scm: remove superfluous lock 2012-09-26 15:45:09 +02:00
ebcdic.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
elf.h s390/crashdump: move fill_cpu_elf_notes() prototype to header file 2012-09-26 15:45:22 +02:00
emergency-restart.h
etr.h s390/etr,stp: use -EOPNOTSUPP instead of -ENOSYS 2012-09-26 15:45:14 +02:00
exec.h Disintegrate asm/system.h for S390 2012-03-28 18:30:02 +01:00
extmem.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
facility.h [S390] Fix stfle() lowcore protection problem 2012-04-11 14:28:26 +02:00
fb.h
fcx.h
ftrace.h ftrace/s390: mcount offset calculation 2011-05-16 15:05:06 -04:00
futex.h s390/headers: remove #ifdef __KERNEL__ from not exported headers 2012-05-24 10:10:05 +02:00
hardirq.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
hugetlb.h thp, s390: architecture backend for thp on s390 2012-10-09 16:22:31 +09:00
hw_irq.h s390/pci: PCI adapter interrupts for MSI/MSI-X 2012-11-30 17:47:21 +01:00
idals.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
io.h s390/pci: define read*_relaxed functions 2013-01-08 10:57:11 +01:00
ipl.h [S390] kernel: Add z/VM LGR detection 2012-03-11 11:59:29 -04:00
irq_regs.h
irq.h s390/irq: count cpu restart events 2013-01-08 10:57:07 +01:00
irqflags.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
isc.h s390/pci: PCI adapter interrupts for MSI/MSI-X 2012-11-30 17:47:21 +01:00
itcw.h UAPI: Alter the S390 asm include guards to be recognisable by the UAPI splitter 2011-12-13 09:26:45 +00:00
jump_label.h static keys: Introduce 'struct static_key', static_key_true()/false() and static_key_slow_[inc|dec]() 2012-02-24 10:05:59 +01:00
Kbuild tracing,x86: Add a TSC trace_clock 2012-11-13 15:48:27 -05:00
kdebug.h [S390] cleanup trap handling 2011-12-27 11:27:12 +01:00
kexec.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
kmap_types.h s390/headers: remove #ifdef __KERNEL__ from not exported headers 2012-05-24 10:10:05 +02:00
kprobes.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
kvm_host.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
kvm_para.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
linkage.h [S390] fix s390 assembler code alignments 2011-07-24 10:48:21 +02:00
local64.h arch: Implement local64_t 2010-06-09 11:12:36 +02:00
local.h
lowcore.h s390: add support for transactional memory 2012-09-26 15:45:02 +02:00
mathemu.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
mman.h s390/mm: Fix crst upgrade of mmap with MAP_FIXED 2013-02-14 15:55:22 +01:00
mmu_context.h s390/mm: rename addressing_mode to s390_user_mode 2012-09-26 15:45:05 +02:00
mmu.h [S390] Fix build errors (fallout from system.h disintegration) 2012-03-30 09:41:12 +02:00
module.h Make most arch asm/module.h files use asm-generic/module.h 2012-09-28 14:31:03 +09:30
mutex.h [S390] mutex: Introduce arch_mutex_cpu_relax() 2011-01-05 12:47:31 +01:00
nmi.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
os_info.h s390/kernel: Remove OS info init function call and diag 308 for kdump 2012-05-23 17:06:50 +02:00
page.h s390/mm: implement software dirty bits 2013-02-14 15:55:23 +01:00
pci_clp.h s390/pci: CLP interface 2012-11-30 15:40:47 +01:00
pci_debug.h s390/pci: performance statistics and debug infrastructure 2012-12-14 10:01:17 +01:00
pci_dma.h s390/pci: DMA support 2012-11-30 17:47:23 +01:00
pci_insn.h s390/pci: no msleep in potential IRQ context 2012-12-05 09:12:51 -05:00
pci_io.h s390/pci: base support 2012-11-30 15:40:45 +01:00
pci.h s390/pci: fix hotplug module init 2013-02-14 15:55:17 +01:00
percpu.h s390/cmpxchg,percpu: implement cmpxchg_double() 2012-09-26 15:45:25 +02:00
perf_event.h perf_cpum_cf: Add support for counters available with IBM zEC12 2012-10-18 17:50:09 +02:00
pgalloc.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
pgtable.h s390/mm: implement software dirty bits 2013-02-14 15:55:23 +01:00
processor.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2012-10-10 12:02:25 +09:00
ptrace.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
qdio.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
reset.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
runtime_instr.h s390: add support for runtime instrumentation 2012-09-26 15:45:02 +02:00
rwsem.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
scatterlist.h [S390] set ARCH_HAS_SG_CHAIN for s390 2010-10-25 16:10:15 +02:00
schid.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
sclp.h s390/mm: implement software dirty bits 2013-02-14 15:55:23 +01:00
scsw.h s390: add eadm related structures 2012-09-26 15:44:57 +02:00
seccomp.h
sections.h
segment.h
setup.h s390/mm: implement software dirty bits 2013-02-14 15:55:23 +01:00
sfp-machine.h
sfp-util.h s390/headers: replace __s390x__ with CONFIG_64BIT where possible 2012-05-24 10:10:10 +02:00
shmparam.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
signal.h unify default ptrace_signal_deliver 2012-11-29 00:01:23 -05:00
sigp.h KVM: s390: Fix sigp sense handling. 2012-07-03 14:55:37 -03:00
smp.h s390/smp,topology: add polarization member to pcpu struct 2012-09-26 15:45:09 +02:00
sparsemem.h s390/mm: remove MAX_PHYSADDR_BITS define 2012-08-08 07:32:55 -07:00
spinlock_types.h locking: Convert raw_rwlock to arch_rwlock 2009-12-14 23:55:32 +01:00
spinlock.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
string.h s390/string: provide asm lib functions for memcpy and memcmp 2012-09-26 15:44:50 +02:00
switch_to.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2012-10-01 11:49:56 -07:00
syscall.h s390/seccomp: add support for system call filtering using BPF 2012-08-08 07:32:56 -07:00
sysinfo.h s390/sysinfo,stsi: change return code handling 2012-09-26 15:45:12 +02:00
termios.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
thread_info.h sanitize tsk_is_polling() 2012-10-01 09:58:13 -04:00
timex.h s390/time: rename tod clock access functions 2013-02-14 15:55:10 +01:00
tlb.h thp, s390: architecture backend for thp on s390 2012-10-09 16:22:31 +09:00
tlbflush.h s390/mm: fix deadlock in unmap_hugepage_range() 2012-09-03 11:14:06 +02:00
topology.h s390/topology: cleanup topology code 2012-11-23 11:14:31 +01:00
types.h UAPI: (Scripted) Disintegrate arch/s390/include/asm 2012-10-09 09:47:31 +01:00
uaccess.h s390/exceptions: switch to relative exception table entries 2012-09-26 15:45:10 +02:00
unaligned.h
unistd.h Bury the conditionals from kernel_thread/kernel_execve series 2012-12-19 18:07:38 -05:00
user.h s390/comments: unify copyright messages and remove file names 2012-07-20 11:15:04 +02:00
vdso.h s390/headers: remove #ifdef __KERNEL__ from not exported headers 2012-05-24 10:10:05 +02:00
vga.h vga: compile fix, disable vga for s390 2012-11-30 17:47:28 +01:00
vtimer.h s390/vtimer: rework virtual timer interface 2012-07-20 11:15:08 +02:00
xor.h