linux/arch/ia64
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
..
configs ACPI and power management updates for 3.15-rc1 2014-04-01 12:48:54 -07:00
dig Disintegrate asm/system.h for IA64 2012-03-28 18:30:02 +01:00
hp PCI changes for the v3.15 merge window: 2014-04-01 15:14:04 -07:00
include mm: split 'tlb_flush_mmu()' into tlb flushing and memory freeing parts 2014-04-25 16:05:40 -07:00
kernel Small workaround for a rare, but annoying, erratum 2014-04-16 11:22:45 -07:00
kvm Small workaround for a rare, but annoying, erratum 2014-04-16 11:22:45 -07:00
lib Fix common misspellings 2011-03-31 11:26:23 -03:00
mm mm, show_mem: remove SHOW_MEM_FILTER_PAGE_COUNT 2014-01-21 16:19:44 -08:00
oprofile Disintegrate asm/system.h for IA64 2012-03-28 18:30:02 +01:00
pci Merge branch 'pci/misc' into next 2014-02-18 17:02:04 -07:00
scripts
sn ia64: Validate online cpus in irq_set_affinity() callbacks 2014-03-12 13:07:40 +01:00
uv ia64: change to new flag variables 2011-03-17 14:02:56 +01:00
install.sh
Kconfig Merge git://git.infradead.org/users/eparis/audit 2014-04-12 12:38:53 -07:00
Kconfig.debug
Makefile ia64/xen: Remove Xen support for ia64 2013-12-10 16:11:07 -08:00
module.lds