From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 873EFC433EF for ; Wed, 15 Dec 2021 12:48:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2331C6B0071; Wed, 15 Dec 2021 07:48:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1E3216B0073; Wed, 15 Dec 2021 07:48:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0AA316B0074; Wed, 15 Dec 2021 07:48:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0037.hostedemail.com [216.40.44.37]) by kanga.kvack.org (Postfix) with ESMTP id F08476B0071 for ; Wed, 15 Dec 2021 07:48:07 -0500 (EST) Received: from smtpin07.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id B40EF85D7B for ; Wed, 15 Dec 2021 12:47:57 +0000 (UTC) X-FDA: 78920005794.07.A083F07 Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by imf23.hostedemail.com (Postfix) with ESMTP id 8D46D140002 for ; Wed, 15 Dec 2021 12:47:53 +0000 (UTC) Received: by mail-lj1-f176.google.com with SMTP id k2so33121523lji.4 for ; Wed, 15 Dec 2021 04:47:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=y2UCg3eULSLG5k5boATE/0qGLCVvQVIwm5Yptka3M5Q=; b=AVyOzGaoaavrjVU6JaV8k8x1b4iRaHadoCkVxcHwOJNgGFmbeRpJ0p1KcMyzAEjFKj tZee/emc6rtexiyK1A51wVI0eO+V7pNVDcH8AKZGp57FCIHH8ItdsFrw7Ll7hziSFGNv /wJzdn9wBuNARHsP5qKBAfFBEWe2XfIZ8ouLxRbwjDlCawfMqDPpFqYKfbK8a9dhhhAp KbD+r0kx0tKyOgvxLq0KdQ3BMZiJzGwu9THThh3E/pEQ8W9LkduTUJtQlWMiswcXnAiZ 2fuGvznhdq8lOyGVUnEhzM7LlF8ojudZmZg2FCZhgHS51HSXDDwm5NJepIH2MiR8EiUf 7+Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=y2UCg3eULSLG5k5boATE/0qGLCVvQVIwm5Yptka3M5Q=; b=icFCZc6xllUTvJHxsffuTsw1pqTMD0HQMKC00msE7yySdRBo8d4yRKHxjJthXz2Opi e1/nYO7sYvHKXEeptvg0ROSuGm+mlS0kDc+Fuav0j4h7dItHls58MVdkvwW1Sf6Pp43T EdW41+TQEV0gIuzdmTycyTLpuOLXwOOkuZNFLF5odoho/ry4mtDvcxQzJjGdpAD2Jnjg JMGguMkhmbrUj7XhUBAX27scXeQlkb91SDNuD6K83NSgsKhpLLsVz7qd+SVoAcZD/X2g HHarvVvNXuq5vCikLnFOu84Ll5lrcPbN1CPjOe9nO6v/qwqwLHaDj001zRvr45A4hGRb PoPA== X-Gm-Message-State: AOAM533V3wzzrCyza/q1kZBSCUIkQHm6LSUgZmzhrsKrkrX19trkyg5e bLTWu6bm834j94mMKu6/9XY= X-Google-Smtp-Source: ABdhPJw/8KEEv7SZSp4hjwpYfgcUTZaNIPtcVhz0RHd7upqNDwfvIlstvSl4pZ1uNBU5H4kvAMvIXg== X-Received: by 2002:a2e:9bd4:: with SMTP id w20mr10051285ljj.69.1639572475495; Wed, 15 Dec 2021 04:47:55 -0800 (PST) Received: from localhost.localdomain ([131.228.2.21]) by smtp.gmail.com with ESMTPSA id y6sm427339ljh.98.2021.12.15.04.47.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 15 Dec 2021 04:47:55 -0800 (PST) Subject: Re: [PATCH V2] mm/gup.c: stricter check on THP migration entry during follow_pmd_mask From: Li Xinhai To: linux-mm@kvack.org, Zi Yan , Huang Ying , "Kirill A. Shutemov" Cc: akpm@linux-foundation.org References: <20211211151014.650778-1-lixinhai.lxh@gmail.com> <5c0f5b5c-7c22-a7ab-4add-fa6bd11f7af8@gmail.com> Message-ID: Date: Wed, 15 Dec 2021 20:47:47 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <5c0f5b5c-7c22-a7ab-4add-fa6bd11f7af8@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 8D46D140002 X-Stat-Signature: ugmfhfs68y7ugymqd8gttr9sn3q453w7 Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=AVyOzGao; spf=pass (imf23.hostedemail.com: domain of lixinhai.lxh@gmail.com designates 209.85.208.176 as permitted sender) smtp.mailfrom=lixinhai.lxh@gmail.com; dmarc=pass (policy=none) header.from=gmail.com X-HE-Tag: 1639572473-732823 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 12/11/21 11:16 PM, Li Xinhai wrote: >=20 >=20 > On 12/11/21 11:10 PM, Li Xinhai wrote: >> When BUG_ON check for THP migration entry, the exsiting code only chec= k >> thp_migration_supported case, but not for !thp_migration_supported cas= e. >> To make the BUG_ON check consistent, we need catch both cases. >> >> Move the BUG_ON check one step eariler, because if the bug happen we >> should know it instead of depend on FOLL_MIGRATION been used by caller= . >> >> Because pmdval instead of *pmd is read by the is_pmd_migration_entry() >> check, the existing code don't help to avoid useless locking within >> pmd_migration_entry_wait(), so remove that check. >> >> Signed-off-by: Li Xinhai >> --- > V1->V2: > Move the BUG_ON() check before if(!(flags & FOLL_MIGRATION)); and add c= omments > for it. >=20 Yan, Ying and Kirill have been worked on this part of code, may help to r= eview. This change was based on my code review, no real bug has been observed. >> =C2=A0 mm/gup.c | 13 +++++++++---- >> =C2=A0 1 file changed, 9 insertions(+), 4 deletions(-) >> >> diff --git a/mm/gup.c b/mm/gup.c >> index 2c51e9748a6a..94d0e586ca0b 100644 >> --- a/mm/gup.c >> +++ b/mm/gup.c >> @@ -642,12 +642,17 @@ static struct page *follow_pmd_mask(struct vm_ar= ea_struct *vma, >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0 retry: >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!pmd_present(pmdval)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * Should never reach= here, if thp migration is not supported; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * Otherwise, it must= be a thp miration entry. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 VM_BUG_ON(!thp_migration_s= upported() || >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 !is_pmd_migration_entry(pmdval)); >> + >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (likely(!(fl= ags & FOLL_MIGRATION))) >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 return no_page_table(vma, flags); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 VM_BUG_ON(thp_migration_su= pported() && >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 !is_pmd_migration_entry(pmdval)); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (is_pmd_migration_entry= (pmdval)) >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pm= d_migration_entry_wait(mm, pmd); >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmd_migration_entry_wait(m= m, pmd); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pmdval =3D READ= _ONCE(*pmd); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * MADV_DO= NTNEED may convert the pmd to null because >>