Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752611Ab3GSEOP (ORCPT ); Fri, 19 Jul 2013 00:14:15 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56974 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751131Ab3GSEOO (ORCPT ); Fri, 19 Jul 2013 00:14:14 -0400 Date: Fri, 19 Jul 2013 00:13:44 -0400 From: Naoya Horiguchi To: Hillf Danton Cc: linux-mm@kvack.org, Andrew Morton , Mel Gorman , Hugh Dickins , KOSAKI Motohiro , Andi Kleen , Michal Hocko , Rik van Riel , "Aneesh Kumar K.V" , linux-kernel@vger.kernel.org, Naoya Horiguchi Message-ID: <1374207224-agckpfwt-mutt-n-horiguchi@ah.jp.nec.com> In-Reply-To: References: <1374183272-10153-1-git-send-email-n-horiguchi@ah.jp.nec.com> <1374183272-10153-4-git-send-email-n-horiguchi@ah.jp.nec.com> Subject: Re: [PATCH 3/8] migrate: add hugepage migration code to migrate_pages() Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Mutt-References: X-Mutt-Fcc: ~/Maildir/sent/ User-Agent: Mutt 1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3183 Lines: 78 On Fri, Jul 19, 2013 at 11:05:37AM +0800, Hillf Danton wrote: > On Fri, Jul 19, 2013 at 5:34 AM, Naoya Horiguchi > wrote: > > This patch extends check_range() to handle vma with VM_HUGETLB set. > > We will be able to migrate hugepage with migrate_pages(2) after > > applying the enablement patch which comes later in this series. > > > > Note that for larger hugepages (covered by pud entries, 1GB for > > x86_64 for example), we simply skip it now. > > > > Note that using pmd_huge/pud_huge assumes that hugepages are pointed to > > by pmd/pud. This is not true in some architectures implementing hugepage > > with other mechanisms like ia64, but it's OK because pmd_huge/pud_huge > > simply return 0 in such arch and page walker simply ignores such hugepages. > > > > ChangeLog v3: > > - revert introducing migrate_movable_pages > > - use isolate_huge_page > > > > ChangeLog v2: > > - remove unnecessary extern > > - fix page table lock in check_hugetlb_pmd_range > > - updated description and renamed patch title > > > > Signed-off-by: Naoya Horiguchi > > --- > > mm/mempolicy.c | 39 ++++++++++++++++++++++++++++++++++----- > > 1 file changed, 34 insertions(+), 5 deletions(-) > > > > diff --git v3.11-rc1.orig/mm/mempolicy.c v3.11-rc1/mm/mempolicy.c > > index 7431001..f3b65c0 100644 > > --- v3.11-rc1.orig/mm/mempolicy.c > > +++ v3.11-rc1/mm/mempolicy.c > > @@ -512,6 +512,27 @@ static int check_pte_range(struct vm_area_struct *vma, pmd_t *pmd, > > return addr != end; > > } > > > > +static void check_hugetlb_pmd_range(struct vm_area_struct *vma, pmd_t *pmd, > > + const nodemask_t *nodes, unsigned long flags, > > + void *private) > > +{ > > +#ifdef CONFIG_HUGETLB_PAGE > > + int nid; > > + struct page *page; > > + > > + spin_lock(&vma->vm_mm->page_table_lock); > > + page = pte_page(huge_ptep_get((pte_t *)pmd)); > > + nid = page_to_nid(page); > > Can you please add a brief comment for the if block? Hmm, honestly saying, I just copied this complex if-condition from check_pte_range() and opened migrate_page_add(), and refactored. But this refactoring might not be good considering readability. I will factorize duplicated logic into a single function and add some comment to make it more readable. Thanks, Naoya > > + if (node_isset(nid, *nodes) != !!(flags & MPOL_MF_INVERT) > > + && ((flags & MPOL_MF_MOVE && page_mapcount(page) == 1) > > + || flags & MPOL_MF_MOVE_ALL)) > > + isolate_huge_page(page, private); > > + spin_unlock(&vma->vm_mm->page_table_lock); > > +#else > > + BUG(); > > +#endif > > +} > > + > > static inline int check_pmd_range(struct vm_area_struct *vma, pud_t *pud, > > unsigned long addr, unsigned long end, > > const nodemask_t *nodes, unsigned long flags, -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/