From mboxrd@z Thu Jan 1 00:00:00 1970 Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 09 Aug 2012 17:05:20 +0200 (CEST) Received: from mga01.intel.com ([192.55.52.88]:31735 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by eddie.linux-mips.org with ESMTP id S1903755Ab2HIPDr (ORCPT ); Thu, 9 Aug 2012 17:03:47 +0200 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP; 09 Aug 2012 08:03:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.77,740,1336374000"; d="scan'208";a="195494524" Received: from blue.fi.intel.com ([10.237.72.50]) by fmsmga001.fm.intel.com with ESMTP; 09 Aug 2012 08:03:10 -0700 Received: by blue.fi.intel.com (Postfix, from userid 1000) id 9B902E0069; Thu, 9 Aug 2012 18:03:14 +0300 (EEST) From: "Kirill A. Shutemov" To: linux-mm@kvack.org Cc: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Andi Kleen , "Kirill A. Shutemov" , Tim Chen , Alex Shi , Jan Beulich , Robert Richter , Andy Lutomirski , Andrew Morton , Andrea Arcangeli , Johannes Weiner , Hugh Dickins , KAMEZAWA Hiroyuki , Mel Gorman , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-mips@linux-mips.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org Subject: [PATCH v2 2/6] mm: make clear_huge_page tolerate non aligned address Date: Thu, 9 Aug 2012 18:02:59 +0300 Message-Id: <1344524583-1096-3-git-send-email-kirill.shutemov@linux.intel.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1344524583-1096-1-git-send-email-kirill.shutemov@linux.intel.com> References: <1344524583-1096-1-git-send-email-kirill.shutemov@linux.intel.com> X-archive-position: 34079 X-ecartis-version: Ecartis v1.0.0 Sender: linux-mips-bounce@linux-mips.org Errors-to: linux-mips-bounce@linux-mips.org X-original-sender: kirill.shutemov@linux.intel.com Precedence: bulk List-help: List-unsubscribe: List-software: Ecartis version 1.0.0 List-Id: linux-mips X-List-ID: linux-mips List-subscribe: List-owner: List-post: List-archive: X-list: linux-mips Return-Path: From: Andi Kleen 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 Signed-off-by: Kirill A. Shutemov --- mm/memory.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 5736170..b47199a 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3987,16 +3987,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