mm: migration: add migrate_entry_wait_huge()
authorNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Wed, 12 Jun 2013 21:05:04 +0000 (14:05 -0700)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 19 Jun 2013 01:17:01 +0000 (02:17 +0100)
commit4207b3f2766e3862d8a0406898236a1eaf226678
treef9d9ec6e8b29ae3ee1ff06514fd4e92d7c747f93
parent1d9910635dfc24ecac41129b5f4752b403194ab4
mm: migration: add migrate_entry_wait_huge()

commit 30dad30922ccc733cfdbfe232090cf674dc374dc upstream.

When we have a page fault for the address which is backed by a hugepage
under migration, the kernel can't wait correctly and do busy looping on
hugepage fault until the migration finishes.  As a result, users who try
to kick hugepage migration (via soft offlining, for example) occasionally
experience long delay or soft lockup.

This is because pte_offset_map_lock() can't get a correct migration entry
or a correct page table lock for hugepage.  This patch introduces
migration_entry_wait_huge() to solve this.

Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Reviewed-by: Rik van Riel <riel@redhat.com>
Reviewed-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
Reviewed-by: Michal Hocko <mhocko@suse.cz>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
include/linux/swapops.h
mm/hugetlb.c
mm/migrate.c