Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757480AbcCCKvG (ORCPT ); Thu, 3 Mar 2016 05:51:06 -0500 Received: from mail-wm0-f52.google.com ([74.125.82.52]:38588 "EHLO mail-wm0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757425AbcCCKvB (ORCPT ); Thu, 3 Mar 2016 05:51:01 -0500 Date: Thu, 3 Mar 2016 13:50:58 +0300 From: "Kirill A. Shutemov" To: Naoya Horiguchi Cc: linux-mm@kvack.org, "Kirill A. Shutemov" , Hugh Dickins , Andrew Morton , Dave Hansen , Andrea Arcangeli , Mel Gorman , Michal Hocko , Vlastimil Babka , Pavel Emelyanov , linux-kernel@vger.kernel.org, Naoya Horiguchi Subject: Re: [PATCH v1 05/11] mm: thp: check pmd migration entry in common path Message-ID: <20160303105058.GC30948@node.shutemov.name> References: <1456990918-30906-1-git-send-email-n-horiguchi@ah.jp.nec.com> <1456990918-30906-6-git-send-email-n-horiguchi@ah.jp.nec.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456990918-30906-6-git-send-email-n-horiguchi@ah.jp.nec.com> User-Agent: Mutt/1.5.23.1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1857 Lines: 45 On Thu, Mar 03, 2016 at 04:41:52PM +0900, Naoya Horiguchi wrote: > If one of callers of page migration starts to handle thp, memory management code > start to see pmd migration entry, so we need to prepare for it before enabling. > This patch changes various code point which checks the status of given pmds in > order to prevent race between thp migration and the pmd-related works. > > Signed-off-by: Naoya Horiguchi > --- > arch/x86/mm/gup.c | 3 +++ > fs/proc/task_mmu.c | 25 +++++++++++++-------- > mm/gup.c | 8 +++++++ > mm/huge_memory.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++------ > mm/memcontrol.c | 2 ++ > mm/memory.c | 5 +++++ > 6 files changed, 93 insertions(+), 16 deletions(-) > > diff --git v4.5-rc5-mmotm-2016-02-24-16-18/arch/x86/mm/gup.c v4.5-rc5-mmotm-2016-02-24-16-18_patched/arch/x86/mm/gup.c > index f8d0b5e..34c3d43 100644 > --- v4.5-rc5-mmotm-2016-02-24-16-18/arch/x86/mm/gup.c > +++ v4.5-rc5-mmotm-2016-02-24-16-18_patched/arch/x86/mm/gup.c > @@ -10,6 +10,7 @@ > #include > #include > #include > +#include > > #include > > @@ -210,6 +211,8 @@ static int gup_pmd_range(pud_t pud, unsigned long addr, unsigned long end, > if (pmd_none(pmd)) > return 0; > if (unlikely(pmd_large(pmd) || !pmd_present(pmd))) { > + if (unlikely(is_pmd_migration_entry(pmd))) > + return 0; Hm. I've expected to see bunch of pmd_none() to pmd_present() conversions. That's seems a right way guard the code. Otherwise we wound need even more checks once PMD-level swap is implemented. I think we need to check for migration entires only if we have something to do with migration. In all other cases pmd_present() should be enough to bail out. -- Kirill A. Shutemov