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=-10.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 61EF0C433DB for ; Tue, 2 Feb 2021 02:10:07 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id C97E064EDA for ; Tue, 2 Feb 2021 02:10:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C97E064EDA Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 2C3F36B0005; Mon, 1 Feb 2021 21:10:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2751C6B0006; Mon, 1 Feb 2021 21:10:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1B2886B006E; Mon, 1 Feb 2021 21:10:06 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0230.hostedemail.com [216.40.44.230]) by kanga.kvack.org (Postfix) with ESMTP id 06FAC6B0005 for ; Mon, 1 Feb 2021 21:10:06 -0500 (EST) Received: from smtpin02.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id C1CF78249980 for ; Tue, 2 Feb 2021 02:10:05 +0000 (UTC) X-FDA: 77771697570.02.land68_5e0575a275c7 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin02.hostedemail.com (Postfix) with ESMTP id A7D5310097AA1 for ; Tue, 2 Feb 2021 02:10:05 +0000 (UTC) X-HE-Tag: land68_5e0575a275c7 X-Filterd-Recvd-Size: 3604 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by imf05.hostedemail.com (Postfix) with ESMTP for ; Tue, 2 Feb 2021 02:10:04 +0000 (UTC) Received: from DGGEMS405-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DV7XC4Dh3zjHJp; Tue, 2 Feb 2021 10:08:43 +0800 (CST) Received: from [10.174.179.241] (10.174.179.241) by DGGEMS405-HUB.china.huawei.com (10.3.19.205) with Microsoft SMTP Server id 14.3.498.0; Tue, 2 Feb 2021 10:09:59 +0800 Subject: Re: [PATCH] mm: simplify the VM_BUG_ON condition in pmdp_huge_clear_flush() To: Andrew Morton CC: , References: <20210201114319.34720-1-linmiaohe@huawei.com> <20210201153354.e640247cb5ab306e909322d0@linux-foundation.org> From: Miaohe Lin Message-ID: <2e2c1d42-9492-4e30-9646-bfa06b2d14d7@huawei.com> Date: Tue, 2 Feb 2021 10:09:59 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <20210201153354.e640247cb5ab306e909322d0@linux-foundation.org> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.179.241] X-CFilter-Loop: Reflected 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: Hi: On 2021/2/2 7:33, Andrew Morton wrote: > On Mon, 1 Feb 2021 06:43:19 -0500 Miaohe Lin wrote: > >> The condition (A && !C && !D) || !A is equivalent to !A || (A && !C && !D) >> and can be further simplified to !A || (!C && !D). >> >> .. >> >> --- a/mm/pgtable-generic.c >> +++ b/mm/pgtable-generic.c >> @@ -135,8 +135,8 @@ pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma, unsigned long address, >> { >> pmd_t pmd; >> VM_BUG_ON(address & ~HPAGE_PMD_MASK); >> - VM_BUG_ON((pmd_present(*pmdp) && !pmd_trans_huge(*pmdp) && >> - !pmd_devmap(*pmdp)) || !pmd_present(*pmdp)); >> + VM_BUG_ON(!pmd_present(*pmdp) || (!pmd_trans_huge(*pmdp) && >> + !pmd_devmap(*pmdp))); >> pmd = pmdp_huge_get_and_clear(vma->vm_mm, address, pmdp); >> flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); >> return pmd; > > True, and the resulting code is still readable enough. > > But a problem with such a complex expression is that the developer will > have trouble figuring out why the BUG actually triggered. > Agree! We can determine which condition is failing through the line number __but__ we can't figure out exactly which one triggered BUG for a complex expression. > If we had a VM_BUG_ON_PMD() then we could print the pmd's value and > permit diagnosis from that. But we don't have such a thing. > > So I suggest that it would be better to have > > VM_BUG_ON((pmd_present(*pmdp) && !pmd_trans_huge(*pmdp) && > !pmd_devmap(*pmdp))); > VM_BUG_ON(!pmd_present(*pmdp)); > > This way, the BUG()'s file-n-line output will tell us more about why the > kernel went splat. > > > I suppose maybe this could be optimized the same way, as > > VM_BUG_ON(!pmd_present(*pmdp)); > /* Below assumes pmd_present() is true */ > VM_BUG_ON(!pmd_trans_huge(*pmdp) && !pmd_devmap(*pmdp)); This one looks good and provide more information than before. I can send another patch to do this (and feel free to merge into this one), should I ? Many thanks. > > Which works because VM_BUG_ON is, depending up Kconfig, either a no-op > or a noreturn-if-it-triggered. I'm not sure if I like this trick much though. > > . >