From: Andi Kleen <[email protected]> hugetlb does not necessarily pass in an aligned address, so the low level address computation is wrong.
This will fix architectures that actually use the address for flushing the cleared address (very few, like xtensa/sparc/...?) Signed-off-by: Andi Kleen <[email protected]> Signed-off-by: Kirill A. Shutemov <[email protected]> --- mm/memory.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 2466d12..c356ead 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3975,16 +3975,17 @@ void clear_huge_page(struct page *page, unsigned long addr, unsigned int pages_per_huge_page) { int i; + unsigned long haddr = addr & HPAGE_PMD_MASK; if (unlikely(pages_per_huge_page > MAX_ORDER_NR_PAGES)) { - clear_gigantic_page(page, addr, pages_per_huge_page); + clear_gigantic_page(page, haddr, pages_per_huge_page); return; } might_sleep(); for (i = 0; i < pages_per_huge_page; i++) { cond_resched(); - clear_user_highpage(page + i, addr + i * PAGE_SIZE); + clear_user_highpage(page + i, haddr + i * PAGE_SIZE); } } -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

