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 X-Spam-Level: X-Spam-Status: No, score=-8.0 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4BF22C54FD0 for ; Fri, 24 Apr 2020 12:58:01 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 0989420706 for ; Fri, 24 Apr 2020 12:58:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="BIxnMw8T" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0989420706 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 73D5C8E0005; Fri, 24 Apr 2020 08:58:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6C5138E0003; Fri, 24 Apr 2020 08:58:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5659C8E0005; Fri, 24 Apr 2020 08:58:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0226.hostedemail.com [216.40.44.226]) by kanga.kvack.org (Postfix) with ESMTP id 3C3438E0003 for ; Fri, 24 Apr 2020 08:58:00 -0400 (EDT) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id DB260181AC9B6 for ; Fri, 24 Apr 2020 12:57:59 +0000 (UTC) X-FDA: 76742751078.09.tin76_b8846ce28139 X-HE-Tag: tin76_b8846ce28139 X-Filterd-Recvd-Size: 9616 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2072.outbound.protection.outlook.com [40.107.21.72]) by imf27.hostedemail.com (Postfix) with ESMTP for ; Fri, 24 Apr 2020 12:57:59 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kg0+1w3V6wusiCtp+XEsA7DwpAEv2OBu8jJo6Kr2kA+fCcsbtBXACeRwZdF/K179qX0QggnA4yvw3XyO5OsVd15AXVi0qh/+pNBvrfAKCxUG5ywjKZYnmYPWbqqaayoCikh6IY1XysittG8uiUs3R2Etk76GKnX1sDsu8jzYP28Rvp52lRS9IyvMowrB6pES64eQFAYMBW55/gDDAdmtqtD+Z4YYL7tmPX6Zn4r/AVsfrxXVrA295MId7hwrtfBL+MDZgd9i9MYvCY3b5sP2BYWpyopZ1ONzgaagBCb0w9xxXOgfxbfLXWxooW5iSBdIHSfF62bBSEgtTVQeXd2H5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bMorG1dntksl741/jvON840PD0NxwIq2IqnXZGPPbcY=; b=C8wDzX+v5fksQIBT8Fl3C8Fxl0KBPS8kDY8dgHz0QCvR09KSkhxIh+Pcd7sCeCiQJctrtCfwL6HsFGoiqveNEtfn207VS50IlkqPkpe7qwdG1spigKonPDizn4KEbxsQJTCzIDO5agATxio0dBD5PGESOBqSnjlcfmchm+xaW2hi5twAMUEnnPSZlWO2h4ITjW0Z1s2Qy1Ee+aBJ8OQi5NFd2e2n6l8CaRBwUN4uF2KRY8XTKXD11NzuAiurCzlEryE2f2TM4tSKlhGKfejtkpgdfRcrKVtGBYK15j8bHM9pBV7PGnMyqzKgMFYhr9F/FAP1h+526dAQgpCgnclNsQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bMorG1dntksl741/jvON840PD0NxwIq2IqnXZGPPbcY=; b=BIxnMw8TXVDxDWWjdbKTPgq4Ia6uH0uOkM8OFJt89HuXC92DhOETi+1BT4g+2r+FfHNXU4dxl5aG283T3UmIsrDVR1INz9bR4Xt70I5WZttlxRKYFzeMzl3X+KnDK4KYMkJKBnFGTTtlQb5ZUOkJHQ6DhRTi/znkkwJITzwN+80= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jgg@mellanox.com; Received: from VI1PR05MB4141.eurprd05.prod.outlook.com (2603:10a6:803:44::15) by VI1PR05MB6479.eurprd05.prod.outlook.com (2603:10a6:803:f4::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.29; Fri, 24 Apr 2020 12:57:56 +0000 Received: from VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::a47b:e3cd:7d6d:5d4e]) by VI1PR05MB4141.eurprd05.prod.outlook.com ([fe80::a47b:e3cd:7d6d:5d4e%6]) with mapi id 15.20.2921.030; Fri, 24 Apr 2020 12:57:56 +0000 Date: Fri, 24 Apr 2020 09:57:53 -0300 From: Jason Gunthorpe To: Li Xinhai Cc: Mike Kravetz , "linux-mm@kvack.org" , akpm , Punit Agrawal , Longpeng Subject: Re: [PATCH] mm/hugetlb: avoid unnecessary check on pud and pmd entry in huge_pte_offset Message-ID: <20200424125753.GK13640@mellanox.com> References: <1587646154-26276-1-git-send-email-lixinhai.lxh@gmail.com> <20200423183835.GA13640@mellanox.com> <202004241207494655904@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <202004241207494655904@gmail.com> User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: MN2PR01CA0015.prod.exchangelabs.com (2603:10b6:208:10c::28) To VI1PR05MB4141.eurprd05.prod.outlook.com (2603:10a6:803:44::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from mlx.ziepe.ca (142.68.57.212) by MN2PR01CA0015.prod.exchangelabs.com (2603:10b6:208:10c::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.13 via Frontend Transport; Fri, 24 Apr 2020 12:57:56 +0000 Received: from jgg by mlx.ziepe.ca with local (Exim 4.90_1) (envelope-from ) id 1jRxtx-0005Yv-4o; Fri, 24 Apr 2020 09:57:53 -0300 X-Originating-IP: [142.68.57.212] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: de83a3b2-325d-4e14-a775-08d7e84f1bef X-MS-TrafficTypeDiagnostic: VI1PR05MB6479: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-Forefront-PRVS: 03838E948C X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR05MB4141.eurprd05.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(10009020)(4636009)(366004)(346002)(136003)(396003)(376002)(39860400002)(8676002)(81156014)(36756003)(478600001)(9746002)(5660300002)(33656002)(186003)(9786002)(1076003)(8936002)(2906002)(26005)(6916009)(2616005)(4326008)(66556008)(66946007)(86362001)(66476007)(52116002)(53546011)(54906003)(316002)(14583001)(24400500001);DIR:OUT;SFP:1101; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +Kz1GvAf0HU5cH6Aj+f28kT+S1gOtFq1F42Pq3W4yPJTWMNYSL1qk+LLQ9t8mO4tillrA/vX1CKpAN+L9Lzo6vT0XjsOO+NlaHpBfnQkOO8y0JYrcRaA+DfSR6W0OAghRw7PakbceJE8kCtKqLS/gk1mP+Lb5yIL73nhz4r0GAZbzxdrclD2wx+MLVWXqgs4+c0K0DHmubKUKt1plnYaXgXnoJ/aac/Qn8RmIkqB1mLJCkUm50Bc0jit+bTguSJjRAvaEbiuhnZWfr7pdnx0msmp2DtDP0pIQ3Ji/481ZZaZqe4H0JryZEpyFdVm0Qd65cp6zw9uRaNABPzvgpwVdg74rmHiXUlvTJ5+n+yUoDkp3vydmlFlY+ypwnV31/AAMgKgYWh7gErAB8fokMSdipf8r4TRuAMBjItws8iyhpZJaloZOO1YjS1awbKKiJt/C9r/kV30s6rRh5Qls6VD25DrFsjuvNvKgPSe8ZKBJVLtlT8z2O5W0fgP8mR9wxrIxDCTfB0zbF1Oie4fHSBisg== X-MS-Exchange-AntiSpam-MessageData: xDvIsVSVzmvI9lh2AqP9X+tJGcpQ7imlzrywgWYwj6iHYZeTTcCWT55D4JCTnBpRSt01Rrm2eVrqbaSUjRwothW13Q056P1WBM6kFwBEhUulsqyqYf8zdMdkulv6IK/Nz5OElUEdpuyjp+zNLT/y7Q== X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: de83a3b2-325d-4e14-a775-08d7e84f1bef X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2020 12:57:56.7904 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OoXCD/VUHpxi/Qa8SDsaMbjUoEowH3BSPL+CiO9isg7uVam970fihYV2Nyy2osI+mGB16KBZQiWXvNVV1sIa3Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB6479 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 Fri, Apr 24, 2020 at 12:07:50PM +0800, Li Xinhai wrote: > On 2020-04-24=C2=A0at 02:38=C2=A0Jason Gunthorpe=C2=A0wrote: > >On Thu, Apr 23, 2020 at 11:14:28AM -0700, Mike Kravetz wrote: > >> Cc a few people who have looked at huge_pte_offset() recently. > >> > >> On 4/23/20 5:49 AM, Li Xinhai wrote: > >> > When huge_pte_offset() is called, the parameter sz can only be PUD= _SIZE > >> > or PMD_SIZE. > >> > If sz is PUD_SIZE and code can reach pud, then *pud must be none, = or > >> > normal hugetlb entry, or non-present (migration or hwpoisoned) hug= etlb > >> > entry, and we can directly return pud. > >> > When sz is PMD_SIZE, pud must be none or present, and if code can = reach > >> > pmd, we can directly return pmd. > >> > > >> > So, after this patch, the code is simplified by first check on the > >> > parameter sz, and avoid unnecessary checks in current code. > >> > > >> > Signed-off-by: Li Xinhai > >> > Cc: Mike Kravetz > >> > Cc: Andrew Morton > >> >=C2=A0 mm/hugetlb.c | 24 +++++++++--------------- > >> >=C2=A0 1 file changed, 9 insertions(+), 15 deletions(-) > >> > > >> > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > >> > index bcabbe0..e1424f5 100644 > >> > +++ b/mm/hugetlb.c > >> > @@ -5365,8 +5365,8 @@ pte_t *huge_pte_offset(struct mm_struct *mm, > >> >=C2=A0 { > >> >=C2=A0 pgd_t *pgd; > >> >=C2=A0 p4d_t *p4d; > >> > - pud_t *pud, pud_entry; > >> > - pmd_t *pmd, pmd_entry; > >> > + pud_t *pud; > >> > + pmd_t *pmd; > >> >=C2=A0 > >> >=C2=A0 pgd =3D pgd_offset(mm, addr); > >> >=C2=A0 if (!pgd_present(*pgd)) > >> > @@ -5376,22 +5376,16 @@ pte_t *huge_pte_offset(struct mm_struct *m= m, > >> >=C2=A0 return NULL; > >> >=C2=A0 > >> >=C2=A0 pud =3D pud_offset(p4d, addr); > >> > - pud_entry =3D READ_ONCE(*pud); > >> > - if (sz !=3D PUD_SIZE && pud_none(pud_entry)) > >> > - return NULL; > >> > - /* hugepage or swap? */ > >> > - if (pud_huge(pud_entry) || !pud_present(pud_entry)) > >> > + if (sz =3D=3D PUD_SIZE) > >> > + /* must be pud_huge or pud_none */ > >> >=C2=A0 return (pte_t *)pud; > >> > - > >> > - pmd =3D pmd_offset(pud, addr); > >> > - pmd_entry =3D READ_ONCE(*pmd); > >> > - if (sz !=3D PMD_SIZE && pmd_none(pmd_entry)) > >> > + if (!pud_present(*pud)) > >> >=C2=A0 return NULL; > >> > - /* hugepage or swap? */ > >> > - if (pmd_huge(pmd_entry) || !pmd_present(pmd_entry)) > >> > - return (pte_t *)pmd; > >> > + /* must have a valid entry and size to go further */ > >> >=C2=A0 > >> > - return NULL; > >> > + pmd =3D pmd_offset(pud, addr); > >> > >> Can we get here with sz =3D PMD_SIZE and pud_none(*pud)?=C2=A0 Would= that be > >> an issue for the pmd_offset() call? > > > >Certainly pmd_offset() must only be called if the PUD entry is > >pointing at a pmd level. > > > >AFAIK this means it should not be called on pud_none(), pud_huge() or > >!pud_present() cases.=20 >=20 > The test of=C2=A0!pud_present(*pud) also block pud_none(*pud) Sure > , so when sz =3D=3D PMD_SIZE, pmd_offset() only called with a valid PUD > entry which point to PMD page table. But what prevents pud_huge? This API seems kind of strange to be honest.. Should it be two functions instead of a sz parameter? huge_pud_offset() and huge_pmd_offset() ? Jason