linux/arch/sh
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
..
boards Kconfig: rename HAS_IOPORT to HAS_IOPORT_MAP 2014-04-07 16:36:11 -07:00
boot
cchips sh: hd64461: Migrate off of deprecated dynamic IRQ API. 2012-05-18 23:20:09 +09:00
configs get rid of DEBUG_WRITECOUNT 2014-04-01 23:19:12 -04:00
drivers arch/sh/drivers/pci/pcie-sh7786.h: remove duplicate SH4A_PCIEPHYCTLR 2014-04-03 16:20:53 -07:00
include mm: split 'tlb_flush_mmu()' into tlb flushing and memory freeing parts 2014-04-25 16:05:40 -07:00
kernel Kconfig: rename HAS_IOPORT to HAS_IOPORT_MAP 2014-04-07 16:36:11 -07:00
lib sh: always link in helper functions extracted from libgcc 2013-12-18 19:04:51 -08:00
lib64 sh64: Kill off old exception debugging helpers. 2012-06-14 14:12:18 +09:00
math-emu sh: remove unused do_fpu_error 2014-04-03 16:20:52 -07:00
mm sh: prefix sh-specific "CCR" and "CCR2" by "SH_" 2014-03-04 07:55:49 -08:00
oprofile
tools sh: Add RSK2+SH7269 board 2012-05-10 17:20:01 +09:00
Kconfig Merge git://git.infradead.org/users/eparis/audit 2014-04-12 12:38:53 -07:00
Kconfig.cpu arch/sh: remove depends on CONFIG_EXPERIMENTAL 2013-01-21 14:43:13 -08:00
Kconfig.debug sh: dwarf unwinder depends on SHcompact. 2012-03-30 19:31:22 +09:00
Makefile stackprotector: Unify the HAVE_CC_STACKPROTECTOR logic between architectures 2013-12-20 09:38:40 +01:00