Revision 2b4847e73004c10ae6666c2e27b5c5430aed8698 authored by Mel Gorman on 19 December 2013, 01:08:32 UTC, committed by Linus Torvalds on 19 December 2013, 03:04:50 UTC
Base pages are unmapped and flushed from cache and TLB during normal
page migration and replaced with a migration entry that causes any
parallel NUMA hinting fault or gup to block until migration completes.

THP does not unmap pages due to a lack of support for migration entries
at a PMD level.  This allows races with get_user_pages and
get_user_pages_fast which commit 3f926ab945b6 ("mm: Close races between
THP migration and PMD numa clearing") made worse by introducing a
pmd_clear_flush().

This patch forces get_user_page (fast and normal) on a pmd_numa page to
go through the slow get_user_page path where it will serialise against
THP migration and properly account for the NUMA hinting fault.  On the
migration side the page table lock is taken for each PTE update.

Signed-off-by: Mel Gorman <mgorman@suse.de>
Reviewed-by: Rik van Riel <riel@redhat.com>
Cc: Alex Thorlton <athorlton@sgi.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent c97102b
History
File Mode Size
fonts
lz4
lzo
mpi
raid6
reed_solomon
xz
zlib_deflate
zlib_inflate
.gitignore -rw-r--r-- 70 bytes
Kconfig -rw-r--r-- 9.8 KB
Kconfig.debug -rw-r--r-- 53.3 KB
Kconfig.kgdb -rw-r--r-- 3.1 KB
Kconfig.kmemcheck -rw-r--r-- 2.9 KB
Makefile -rw-r--r-- 5.7 KB
argv_split.c -rw-r--r-- 2.1 KB
asn1_decoder.c -rw-r--r-- 12.5 KB
assoc_array.c -rw-r--r-- 52.5 KB
atomic64.c -rw-r--r-- 4.2 KB
atomic64_test.c -rw-r--r-- 3.4 KB
audit.c -rw-r--r-- 1.2 KB
average.c -rw-r--r-- 1.9 KB
bcd.c -rw-r--r-- 261 bytes
bch.c -rw-r--r-- 35.6 KB
bitmap.c -rw-r--r-- 34.7 KB
bitrev.c -rw-r--r-- 2.1 KB
bsearch.c -rw-r--r-- 1.6 KB
btree.c -rw-r--r-- 19.2 KB
bug.c -rw-r--r-- 4.8 KB
build_OID_registry -rwxr-xr-x 4.7 KB
bust_spinlocks.c -rw-r--r-- 660 bytes
check_signature.c -rw-r--r-- 599 bytes
checksum.c -rw-r--r-- 4.9 KB
clz_ctz.c -rw-r--r-- 1009 bytes
clz_tab.c -rw-r--r-- 855 bytes
cmdline.c -rw-r--r-- 3.6 KB
cordic.c -rw-r--r-- 2.5 KB
cpu-notifier-error-inject.c -rw-r--r-- 1.2 KB
cpu_rmap.c -rw-r--r-- 7.8 KB
cpumask.c -rw-r--r-- 4.4 KB
crc-ccitt.c -rw-r--r-- 3.0 KB
crc-itu-t.c -rw-r--r-- 2.8 KB
crc-t10dif.c -rw-r--r-- 1.5 KB
crc16.c -rw-r--r-- 2.8 KB
crc32.c -rw-r--r-- 45.3 KB
crc32defs.h -rw-r--r-- 2.0 KB
crc7.c -rw-r--r-- 2.3 KB
crc8.c -rw-r--r-- 2.4 KB
ctype.c -rw-r--r-- 1.4 KB
debug_locks.c -rw-r--r-- 1.2 KB
debugobjects.c -rw-r--r-- 26.2 KB
dec_and_lock.c -rw-r--r-- 784 bytes
decompress.c -rw-r--r-- 1.5 KB
decompress_bunzip2.c -rw-r--r-- 23.4 KB
decompress_inflate.c -rw-r--r-- 3.7 KB
decompress_unlz4.c -rw-r--r-- 3.8 KB
decompress_unlzma.c -rw-r--r-- 15.8 KB
decompress_unlzo.c -rw-r--r-- 6.8 KB
decompress_unxz.c -rw-r--r-- 10.6 KB
devres.c -rw-r--r-- 10.2 KB
digsig.c -rw-r--r-- 5.5 KB
div64.c -rw-r--r-- 4.0 KB
dma-debug.c -rw-r--r-- 34.9 KB
dump_stack.c -rw-r--r-- 1.1 KB
dynamic_debug.c -rw-r--r-- 25.3 KB
dynamic_queue_limits.c -rw-r--r-- 4.3 KB
earlycpio.c -rw-r--r-- 3.9 KB
extable.c -rw-r--r-- 2.4 KB
fault-inject.c -rw-r--r-- 5.5 KB
fdt.c -rw-r--r-- 69 bytes
fdt_ro.c -rw-r--r-- 72 bytes
fdt_rw.c -rw-r--r-- 72 bytes
fdt_strerror.c -rw-r--r-- 78 bytes
fdt_sw.c -rw-r--r-- 72 bytes
fdt_wip.c -rw-r--r-- 73 bytes
find_last_bit.c -rw-r--r-- 1.1 KB
find_next_bit.c -rw-r--r-- 6.4 KB
flex_array.c -rw-r--r-- 10.9 KB
flex_proportions.c -rw-r--r-- 6.8 KB
gcd.c -rw-r--r-- 313 bytes
gen_crc32table.c -rw-r--r-- 3.2 KB
genalloc.c -rw-r--r-- 16.2 KB
halfmd4.c -rw-r--r-- 2.0 KB
hexdump.c -rw-r--r-- 7.2 KB
hweight.c -rw-r--r-- 1.9 KB
idr.c -rw-r--r-- 28.7 KB
inflate.c -rw-r--r-- 38.6 KB
int_sqrt.c -rw-r--r-- 652 bytes
interval_tree.c -rw-r--r-- 297 bytes
interval_tree_test_main.c -rw-r--r-- 2.3 KB
iomap.c -rw-r--r-- 6.5 KB
iomap_copy.c -rw-r--r-- 2.1 KB
iommu-helper.c -rw-r--r-- 1.0 KB
ioremap.c -rw-r--r-- 2.1 KB
iovec.c -rw-r--r-- 1.0 KB
irq_regs.c -rw-r--r-- 604 bytes
is_single_threaded.c -rw-r--r-- 1.3 KB
jedec_ddr_data.c -rw-r--r-- 3.0 KB
kasprintf.c -rw-r--r-- 717 bytes
kfifo.c -rw-r--r-- 12.7 KB
klist.c -rw-r--r-- 9.3 KB
kobject.c -rw-r--r-- 26.6 KB
kobject_uevent.c -rw-r--r-- 10.4 KB
kstrtox.c -rw-r--r-- 9.4 KB
kstrtox.h -rw-r--r-- 254 bytes
lcm.c -rw-r--r-- 288 bytes
libcrc32c.c -rw-r--r-- 2.1 KB
list_debug.c -rw-r--r-- 2.6 KB
list_sort.c -rw-r--r-- 7.0 KB
llist.c -rw-r--r-- 3.1 KB
locking-selftest-hardirq.h -rw-r--r-- 207 bytes
locking-selftest-mutex.h -rw-r--r-- 120 bytes
locking-selftest-rlock-hardirq.h -rw-r--r-- 74 bytes
locking-selftest-rlock-softirq.h -rw-r--r-- 74 bytes
locking-selftest-rlock.h -rw-r--r-- 158 bytes
locking-selftest-rsem.h -rw-r--r-- 163 bytes
locking-selftest-softirq.h -rw-r--r-- 207 bytes
locking-selftest-spin-hardirq.h -rw-r--r-- 73 bytes
locking-selftest-spin-softirq.h -rw-r--r-- 73 bytes
locking-selftest-spin.h -rw-r--r-- 118 bytes
locking-selftest-wlock-hardirq.h -rw-r--r-- 74 bytes
locking-selftest-wlock-softirq.h -rw-r--r-- 74 bytes
locking-selftest-wlock.h -rw-r--r-- 158 bytes
locking-selftest-wsem.h -rw-r--r-- 163 bytes
locking-selftest.c -rw-r--r-- 40.1 KB
lockref.c -rw-r--r-- 3.7 KB
lru_cache.c -rw-r--r-- 19.2 KB
md5.c -rw-r--r-- 3.7 KB
memory-notifier-error-inject.c -rw-r--r-- 1.1 KB
memweight.c -rw-r--r-- 999 bytes
net_utils.c -rw-r--r-- 588 bytes
nlattr.c -rw-r--r-- 12.4 KB
notifier-error-inject.c -rw-r--r-- 2.7 KB
notifier-error-inject.h -rw-r--r-- 614 bytes
of-reconfig-notifier-error-inject.c -rw-r--r-- 1.3 KB
oid_registry.c -rw-r--r-- 3.8 KB
parser.c -rw-r--r-- 6.2 KB
pci_iomap.c -rw-r--r-- 1.4 KB
percpu-refcount.c -rw-r--r-- 5.7 KB
percpu_counter.c -rw-r--r-- 5.3 KB
percpu_ida.c -rw-r--r-- 9.6 KB
percpu_test.c -rw-r--r-- 3.2 KB
plist.c -rw-r--r-- 4.7 KB
pm-notifier-error-inject.c -rw-r--r-- 1.1 KB
prio_heap.c -rw-r--r-- 1.4 KB
proportions.c -rw-r--r-- 9.3 KB
radix-tree.c -rw-r--r-- 40.0 KB
random32.c -rw-r--r-- 12.3 KB
ratelimit.c -rw-r--r-- 1.5 KB
rational.c -rw-r--r-- 1.5 KB
rbtree.c -rw-r--r-- 15.0 KB
rbtree_test.c -rw-r--r-- 5.3 KB
reciprocal_div.c -rw-r--r-- 218 bytes
scatterlist.c -rw-r--r-- 17.8 KB
sha1.c -rw-r--r-- 6.1 KB
show_mem.c -rw-r--r-- 1.1 KB
smp_processor_id.c -rw-r--r-- 1.1 KB
sort.c -rw-r--r-- 2.5 KB
stmp_device.c -rw-r--r-- 2.1 KB
string.c -rw-r--r-- 16.2 KB
string_helpers.c -rw-r--r-- 3.6 KB
strncpy_from_user.c -rw-r--r-- 2.9 KB
strnlen_user.c -rw-r--r-- 3.6 KB
swiotlb.c -rw-r--r-- 26.8 KB
syscall.c -rw-r--r-- 2.4 KB
test-kstrtox.c -rw-r--r-- 17.4 KB
test-string_helpers.c -rw-r--r-- 2.5 KB
textsearch.c -rw-r--r-- 9.6 KB
timerqueue.c -rw-r--r-- 3.1 KB
ts_bm.c -rw-r--r-- 5.3 KB
ts_fsm.c -rw-r--r-- 10.6 KB
ts_kmp.c -rw-r--r-- 4.3 KB
ucs2_string.c -rw-r--r-- 1.2 KB
usercopy.c -rw-r--r-- 197 bytes
uuid.c -rw-r--r-- 1.3 KB
vsprintf.c -rw-r--r-- 58.3 KB

back to top