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 13A20C433EF for ; Wed, 20 Jul 2022 17:28:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9DEFC6B0071; Wed, 20 Jul 2022 13:28:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 98DF46B0073; Wed, 20 Jul 2022 13:28:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 855D96B0074; Wed, 20 Jul 2022 13:28:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 770546B0071 for ; Wed, 20 Jul 2022 13:28:07 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 47D1316062E for ; Wed, 20 Jul 2022 17:28:07 +0000 (UTC) X-FDA: 79708161414.09.588BE52 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by imf03.hostedemail.com (Postfix) with ESMTP id E347520065 for ; Wed, 20 Jul 2022 17:28:06 +0000 (UTC) Received: by mail-pl1-f181.google.com with SMTP id q5so15584790plr.11 for ; Wed, 20 Jul 2022 10:28:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=nB7WKXTyOeDVUKoA0VcsG8uYG6ZJWhMp3+zqVavAA2o=; b=mXID+GN/WUpuEyRK9jX6TtB6wahpKYiZjYWXG6mI2+uMtOTDYL90a/uomwoVmo5Z7J 7/kBwHAWPydjlOPqeGyf7n9tX6cp7ISG6/JiDEKiz4L1WN/+kIVE6vMApQGfnYxQ+G1G eoin4D1eUqcBqp1USA2v6YCKHvU9i2DpIKOSAwNQFZut3eUM2Xnh6f4v9Un5AfRkHysa /gr7zItJI7nyg9q1UGCyTBqfPMYSTKKmR1pdkepl4bATps/iL2mUZBEcnrTWV2lsQ5/k BpeCWTehA5czUkV9qPc4z6ruUWR69di0EHVmOn1Ig42nCV99XQ7+8ov7vKfJNBkiql9E XElQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nB7WKXTyOeDVUKoA0VcsG8uYG6ZJWhMp3+zqVavAA2o=; b=RyX8B4n2nYkR3BgmkCvB5k9Z4y2BiBiCNYm4mSBOywxQ5rdE4QC/AtiErnHy7lRJrJ yolGLAt+2zjIlwn9t6u4/oQQ9AGZaAwhxrwFMzvlkQVm+EIpKvitUIBu6WpE28bYFeNq 8k0HMvfS3mGwEG7YHj7rSBL0NE9b2ls6RLe12pa2rVUL/cQUCyBzhGB7aaRBJg7xKBVX vpIIklIIFG5uDBtBtMnD1lVrmD/5USXaxutwDgglr2hwVMW3LsU0Q0Km4y3zFMtreT5u f9zqL6z7Wegt2/0YX0iPc8Bs0OSR4hWQxWGfpZe5f0n90XFNSpU8RrLY8QhgATXiuJJ9 VfZw== X-Gm-Message-State: AJIora+/XAEK1Pp3NeYcv2b6KauHrYW02T0xzCnvVFJP53Uc/j/fphAJ FU6Y8qU4/5F9L8I+OhL0pFcXfvHUvHRFgdWSD4Q= X-Google-Smtp-Source: AGRyM1u4JOHu+RjuEDCAVqXxAeYoq9E2viplaJqivxXNgwEJUj6aiGTJw5abU4d+mCE0EoPGWdu4aX774IJ+bRQmSdg= X-Received: by 2002:a17:90b:4c48:b0:1ef:ff05:99f5 with SMTP id np8-20020a17090b4c4800b001efff0599f5mr6453226pjb.21.1658338085855; Wed, 20 Jul 2022 10:28:05 -0700 (PDT) MIME-Version: 1.0 References: <20220720140603.1958773-1-zokeefe@google.com> <20220720140603.1958773-3-zokeefe@google.com> In-Reply-To: <20220720140603.1958773-3-zokeefe@google.com> From: Yang Shi Date: Wed, 20 Jul 2022 10:27:53 -0700 Message-ID: Subject: Re: [PATCH mm-unstable 2/4] mm/khugepaged: consistently order cc->is_khugepaged and pte_* checks To: "Zach O'Keefe" Cc: Andrew Morton , Linux MM , Hugh Dickins , Miaohe Lin Content-Type: text/plain; charset="UTF-8" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1658338087; a=rsa-sha256; cv=none; b=Qhw3R0DKOUUJvchu+gRPwlFEp5bxIy2o0VO6kRM1+2oNU6MXNzzaxU0a8hOlusBdem2J0Z Ro6Or0egENn7AdN6esugOWGGdYO7fF4H6GCL2S6JyUKvBLkMI6Od805RdYqpCU5C55sEA/ NGsU5kmW/5/ld/LbLvlez8Mf9WYrlXg= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b="mXID+GN/"; spf=pass (imf03.hostedemail.com: domain of shy828301@gmail.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=shy828301@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1658338087; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=nB7WKXTyOeDVUKoA0VcsG8uYG6ZJWhMp3+zqVavAA2o=; b=g9hNMFc8kqzLpCK8LvOr94J8NqbTZRJTBdY7+NmqNM+G2R63JDOaZ2APlcDjQ1gCpQfs4S iSAXImN/q1mcNHazQ+1djAKLktq0/2EwOoy1JO3B+esRiNdJhn5TnATfjNFyVrSHaRnEFv eJqMWERGixoqU8gQeHflRFDlH8zdHFs= X-Rspam-User: X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: E347520065 Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b="mXID+GN/"; spf=pass (imf03.hostedemail.com: domain of shy828301@gmail.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=shy828301@gmail.com; dmarc=pass (policy=none) header.from=gmail.com X-Stat-Signature: cpgja13iujsz833f7cph66enys19gosh X-HE-Tag: 1658338086-707026 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 Wed, Jul 20, 2022 at 7:06 AM Zach O'Keefe wrote: > > cc->is_khugepaged is used to predicate the khugepaged-only behavior > of enforcing khugepaged heuristics limited by the sysfs knobs > khugepaged_max_ptes_[none|swap|shared]. > > In branches where khugepaged_max_ptes_* is checked, consistently check > cc->is_khugepaged first. Also, local counters (for comparison vs > khugepaged_max_ptes_* limits) were previously incremented in the > comparison expression. Some of these counters (unmapped) are > additionally used outside of khugepaged_max_ptes_* enforcement, and > all counters are communicated in tracepoints. Move the correct > accounting of these counters before branching statements to avoid future > errors due to C's short-circuiting evaluation. Yeah, it is safer to not depend on the order of branch statements to inc the counter. Reviewed-by: Yang Shi > > Fixes: 9fab4752a181 ("mm/khugepaged: add flag to predicate khugepaged-only behavior") > Link: https://lore.kernel.org/linux-mm/Ys2qJm6FaOQcxkha@google.com/ > Signed-off-by: Zach O'Keefe > --- > mm/khugepaged.c | 49 +++++++++++++++++++++++++++++-------------------- > 1 file changed, 29 insertions(+), 20 deletions(-) > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index ecd28bfeab60..290422577172 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -574,9 +574,10 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, > pte_t pteval = *_pte; > if (pte_none(pteval) || (pte_present(pteval) && > is_zero_pfn(pte_pfn(pteval)))) { > + ++none_or_zero; > if (!userfaultfd_armed(vma) && > - (++none_or_zero <= khugepaged_max_ptes_none || > - !cc->is_khugepaged)) { > + (!cc->is_khugepaged || > + none_or_zero <= khugepaged_max_ptes_none)) { > continue; > } else { > result = SCAN_EXCEED_NONE_PTE; > @@ -596,11 +597,14 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, > > VM_BUG_ON_PAGE(!PageAnon(page), page); > > - if (cc->is_khugepaged && page_mapcount(page) > 1 && > - ++shared > khugepaged_max_ptes_shared) { > - result = SCAN_EXCEED_SHARED_PTE; > - count_vm_event(THP_SCAN_EXCEED_SHARED_PTE); > - goto out; > + if (page_mapcount(page) > 1) { > + ++shared; > + if (cc->is_khugepaged && > + shared > khugepaged_max_ptes_shared) { > + result = SCAN_EXCEED_SHARED_PTE; > + count_vm_event(THP_SCAN_EXCEED_SHARED_PTE); > + goto out; > + } > } > > if (PageCompound(page)) { > @@ -1170,8 +1174,9 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm, > _pte++, _address += PAGE_SIZE) { > pte_t pteval = *_pte; > if (is_swap_pte(pteval)) { > - if (++unmapped <= khugepaged_max_ptes_swap || > - !cc->is_khugepaged) { > + ++unmapped; > + if (!cc->is_khugepaged || > + unmapped <= khugepaged_max_ptes_swap) { > /* > * Always be strict with uffd-wp > * enabled swap entries. Please see > @@ -1189,9 +1194,10 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm, > } > } > if (pte_none(pteval) || is_zero_pfn(pte_pfn(pteval))) { > + ++none_or_zero; > if (!userfaultfd_armed(vma) && > - (++none_or_zero <= khugepaged_max_ptes_none || > - !cc->is_khugepaged)) { > + (!cc->is_khugepaged || > + none_or_zero <= khugepaged_max_ptes_none)) { > continue; > } else { > result = SCAN_EXCEED_NONE_PTE; > @@ -1221,12 +1227,14 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm, > goto out_unmap; > } > > - if (cc->is_khugepaged && > - page_mapcount(page) > 1 && > - ++shared > khugepaged_max_ptes_shared) { > - result = SCAN_EXCEED_SHARED_PTE; > - count_vm_event(THP_SCAN_EXCEED_SHARED_PTE); > - goto out_unmap; > + if (page_mapcount(page) > 1) { > + ++shared; > + if (cc->is_khugepaged && > + shared > khugepaged_max_ptes_shared) { > + result = SCAN_EXCEED_SHARED_PTE; > + count_vm_event(THP_SCAN_EXCEED_SHARED_PTE); > + goto out_unmap; > + } > } > > page = compound_head(page); > @@ -1961,8 +1969,9 @@ static int khugepaged_scan_file(struct mm_struct *mm, struct file *file, > continue; > > if (xa_is_value(page)) { > + ++swap; > if (cc->is_khugepaged && > - ++swap > khugepaged_max_ptes_swap) { > + swap > khugepaged_max_ptes_swap) { > result = SCAN_EXCEED_SWAP_PTE; > count_vm_event(THP_SCAN_EXCEED_SWAP_PTE); > break; > @@ -2013,8 +2022,8 @@ static int khugepaged_scan_file(struct mm_struct *mm, struct file *file, > rcu_read_unlock(); > > if (result == SCAN_SUCCEED) { > - if (present < HPAGE_PMD_NR - khugepaged_max_ptes_none && > - cc->is_khugepaged) { > + if (cc->is_khugepaged && > + present < HPAGE_PMD_NR - khugepaged_max_ptes_none) { > result = SCAN_EXCEED_NONE_PTE; > count_vm_event(THP_SCAN_EXCEED_NONE_PTE); > } else { > -- > 2.37.0.170.g444d1eabd0-goog >