Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c177c81e authored by Naoya Horiguchi's avatar Naoya Horiguchi Committed by Linus Torvalds
Browse files

hugetlb: restrict hugepage_migration_support() to x86_64



Currently hugepage migration is available for all archs which support
pmd-level hugepage, but testing is done only for x86_64 and there're
bugs for other archs.  So to avoid breaking such archs, this patch
limits the availability strictly to x86_64 until developers of other
archs get interested in enabling this feature.

Simply disabling hugepage migration on non-x86_64 archs is not enough to
fix the reported problem where sys_move_pages() hits the BUG_ON() in
follow_page(FOLL_GET), so let's fix this by checking if hugepage
migration is supported in vma_migratable().

Signed-off-by: default avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Reported-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Tested-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Acked-by: default avatarHugh Dickins <hughd@google.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: David Miller <davem@davemloft.net>
Cc: <stable@vger.kernel.org>	[3.12+]
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 7f39dda9
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -56,8 +56,3 @@ int pmd_huge(pmd_t pmd)
{
	return pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT);
}

int pmd_huge_support(void)
{
	return 1;
}
+0 −5
Original line number Diff line number Diff line
@@ -58,11 +58,6 @@ int pud_huge(pud_t pud)
#endif
}

int pmd_huge_support(void)
{
	return 1;
}

static __init int setup_hugepagesz(char *opt)
{
	unsigned long ps = memparse(opt, &opt);
+0 −5
Original line number Diff line number Diff line
@@ -114,11 +114,6 @@ int pud_huge(pud_t pud)
	return 0;
}

int pmd_huge_support(void)
{
	return 0;
}

struct page *
follow_huge_pmd(struct mm_struct *mm, unsigned long address, pmd_t *pmd, int write)
{
+0 −5
Original line number Diff line number Diff line
@@ -110,11 +110,6 @@ int pud_huge(pud_t pud)
	return 0;
}

int pmd_huge_support(void)
{
	return 1;
}

struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
			     pmd_t *pmd, int write)
{
+0 −5
Original line number Diff line number Diff line
@@ -84,11 +84,6 @@ int pud_huge(pud_t pud)
	return (pud_val(pud) & _PAGE_HUGE) != 0;
}

int pmd_huge_support(void)
{
	return 1;
}

struct page *
follow_huge_pmd(struct mm_struct *mm, unsigned long address,
		pmd_t *pmd, int write)
Loading