linux/arch/um/include/asm
Linus Torvalds 1cf35d4771 mm: split 'tlb_flush_mmu()' into tlb flushing and memory freeing parts
The mmu-gather operation 'tlb_flush_mmu()' has done two things: the
actual tlb flush operation, and the batched freeing of the pages that
the TLB entries pointed at.

This splits the operation into separate phases, so that the forced
batched flushing done by zap_pte_range() can now do the actual TLB flush
while still holding the page table lock, but delay the batched freeing
of all the pages to after the lock has been dropped.

This in turn allows us to avoid a race condition between
set_page_dirty() (as called by zap_pte_range() when it finds a dirty
shared memory pte) and page_mkclean(): because we now flush all the
dirty page data from the TLB's while holding the pte lock,
page_mkclean() will be held up walking the (recently cleaned) page
tables until after the TLB entries have been flushed from all CPU's.

Reported-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Tested-by: Dave Hansen <dave.hansen@intel.com>
Acked-by: Hugh Dickins <hughd@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Tony Luck <tony.luck@intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2014-04-25 16:05:40 -07:00
..
Kbuild locking/mcs: Allow architecture specific asm files to be used for contended case 2014-02-09 21:18:52 +01:00
a.out-core.h
bugs.h
cache.h
common.lds.S UML: normalize global variables exported by vmlinux.lds 2013-07-03 16:07:34 -07:00
dma.h um: get rid of pointless include "..." where include <...> will do 2012-10-09 22:28:45 +02:00
fixmap.h um: use generic fixmap.h 2014-01-23 16:36:54 -08:00
irq.h
irqflags.h um: kill system-um.h 2011-11-02 14:15:34 +01:00
kmap_types.h um: remove km_type definitions 2012-07-24 15:27:31 +08:00
kvm_para.h kvmclock: Add functions to check if the host has stopped the vm 2012-04-08 12:48:59 +03:00
mmu.h um: get rid of pointless include "..." where include <...> will do 2012-10-09 22:28:45 +02:00
mmu_context.h um: uml_dup_mmap() relies on ->mmap_sem being held, but activate_mm() doesn't hold it 2012-03-20 21:29:50 -04:00
page.h um: get rid of pointless include "..." where include <...> will do 2012-10-09 22:28:45 +02:00
pgalloc.h um: remove pointless include of asm/fixmap.h from asm/pgtable.h 2012-03-25 00:29:55 +01:00
pgtable-2level.h
pgtable-3level.h um, x86: Cast to (u64 *) inside set_64bit() 2010-08-03 07:00:16 -07:00
pgtable.h consolidate io_remap_pfn_range definitions 2013-06-29 12:46:35 +04:00
processor-generic.h um: Removed unused attributes from thread_struct 2014-01-26 11:48:37 +01:00
ptrace-generic.h um: get rid of pointless include "..." where include <...> will do 2012-10-09 22:28:45 +02:00
setup.h
smp.h um: get rid of pointless include "..." where include <...> will do 2012-10-09 22:28:45 +02:00
sysrq.h um: move sysrq.h out of include/shared 2012-10-09 22:28:19 +02:00
thread_info.h preempt: Make PREEMPT_ACTIVE generic 2013-11-13 20:21:47 +01:00
timex.h
tlb.h mm: split 'tlb_flush_mmu()' into tlb flushing and memory freeing parts 2014-04-25 16:05:40 -07:00
tlbflush.h
uaccess.h um: kill um_uaccess.h 2011-11-02 14:15:13 +01:00