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 78659D1A427 for ; Fri, 11 Oct 2024 23:23:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E6C416B00B2; Fri, 11 Oct 2024 19:22:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DCD596B00B4; Fri, 11 Oct 2024 19:22:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C20CC6B00B6; Fri, 11 Oct 2024 19:22:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id A06F86B00B2 for ; Fri, 11 Oct 2024 19:22:59 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id EDE7A1605B4 for ; Fri, 11 Oct 2024 23:22:53 +0000 (UTC) X-FDA: 82662898794.10.53BC719 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) by imf05.hostedemail.com (Postfix) with ESMTP id C93BE10000A for ; Fri, 11 Oct 2024 23:22:51 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=qmPEhKuh; spf=pass (imf05.hostedemail.com: domain of 3T7MJZwsKCBw24C6JD6QLF88GG8D6.4GEDAFMP-EECN24C.GJ8@flex--ackerleytng.bounces.google.com designates 209.85.210.201 as permitted sender) smtp.mailfrom=3T7MJZwsKCBw24C6JD6QLF88GG8D6.4GEDAFMP-EECN24C.GJ8@flex--ackerleytng.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728688839; 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=5z/uTVdP5L9L1RuFDdlTqhHJV3lmY38mQBJGe8OEp3E=; b=HTPPEz0t7f8R6j1OXJmd8EpR+tJX38iH1oty6zdvJ+oA7sVVVz7qlgpnbCSe+tXZ/ZgJdE nX3qX5Li8o17WJj4WJCGwdT3SX/fKCxMG3fDMnFudsOXNbkD/2UC9u5g8dg+l/n2MJRieO GqlGWDxoWGEOVMkks9ZMhFysSkuEPjs= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728688839; a=rsa-sha256; cv=none; b=UOUJ2WvSBNrmNbg+tTlfG0I344lIDQQtzLM3ARBMZJtM6RDDDBo/4RTzK1O8TuxyhGfKh5 5DPcwhLCHasEOdgI7IzZ8CYR9Z+b8Z1ydmb/VBxlOaOCb2FpxYQ6PqOxXxdFUnNWuHB+4M C0cH9odH+dkjqkoI9MGtgYKJKG8/Uds= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=qmPEhKuh; spf=pass (imf05.hostedemail.com: domain of 3T7MJZwsKCBw24C6JD6QLF88GG8D6.4GEDAFMP-EECN24C.GJ8@flex--ackerleytng.bounces.google.com designates 209.85.210.201 as permitted sender) smtp.mailfrom=3T7MJZwsKCBw24C6JD6QLF88GG8D6.4GEDAFMP-EECN24C.GJ8@flex--ackerleytng.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-71e49ae1172so531286b3a.2 for ; Fri, 11 Oct 2024 16:22:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1728688976; x=1729293776; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=5z/uTVdP5L9L1RuFDdlTqhHJV3lmY38mQBJGe8OEp3E=; b=qmPEhKuhLiX1M8gZ5tkW95FvkXIYzuRa8WD5gJnyXU9wUaTxxGeANEKxfRiIIGRgQ9 TKQD2ccQcgWsUnINvI8HTqnQR+8HnkZYlYRIhgvhVG2Sua/IUZzerGTN8NLFZ4XFa/SN KJPdHSlznGl5PWa9vCsHn9JwcypMpzCby9XfkdjW+rPAiN3z903Aldc/JtR2cqVCoBqE jImjL5vnzDKssg6BqCVtPad+8+tggDSBwaV3NHE1oiQHazE2cDK0e5d71Lr3YEu8pNeV vBUmXXgkX1yd5cGFXHWeGMK5fuDxMcbaDAPBVHv0f316zptFsYn3CAjcGnXvbjK6ZaR7 gwpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728688976; x=1729293776; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5z/uTVdP5L9L1RuFDdlTqhHJV3lmY38mQBJGe8OEp3E=; b=icte1NlBfnqNbAUq6TTUJV4TWV7tb3B/FCZvG/JZLnC+z/M5leU6Dn5QiJw8pOlxSh MVcUX6o9f8Vo7IIgPYVDJyfxyKPsHA62DN56IDfyopEDqMWTaTvpPI3sez+db7vX/nSl OTuwrS+YCWti9S2ftBT8lU4F6vVgzpT7TUQQSGHQnSeLdJ6dx04aZmuin47Wtil6QnXG TTjIeaf1Ypx73qeT3M2eEMGsAiD7FWAmbXCrJAHDcID7lxepccA4+cOH8QiCoOxTImuH J5pKGAamL3s2qYrqVHSwFwzRnsxrT3eZLu+Gk0rAtVKWWLMqMscK0HNTsFjcZ7YIrerG BK7Q== X-Forwarded-Encrypted: i=1; AJvYcCVDo8kJmKgW9m7e0iWLwczcoMPOKeYYw5O4/9CautV5OOOtEB/WeUq6WONcQVztXRKCGcKmtCQ05w==@kvack.org X-Gm-Message-State: AOJu0YxjKVSH96krFj1yqPaWf6RRK2A+zcP5t3VxUSYArtSAKxD/OZd7 JjRIA0WXMArggrGSAoR2DC4HHFJATZjs8DrtGsD1tRea+q76tN3VMag2GkAXmtQZSk/OwYFX0DQ R6SKpwMY3R/5EW9+Ax1m5ag== X-Google-Smtp-Source: AGHT+IFfT7z16+ucRzSRkvBaeFJLnd4Fcce7MUMDnNMVo0kKP75g66nPfjELWNwdxuLQm7HYU5qKFyPa9P3bxM35iw== X-Received: from ackerleytng-ctop.c.googlers.com ([fda3:e722:ac3:cc00:146:b875:ac13:a9fc]) (user=ackerleytng job=sendgmr) by 2002:a05:6a00:6f60:b0:70d:fba:c51c with SMTP id d2e1a72fcca58-71e380c6404mr6646b3a.3.1728688975598; Fri, 11 Oct 2024 16:22:55 -0700 (PDT) Date: Fri, 11 Oct 2024 23:22:36 +0000 In-Reply-To: Mime-Version: 1.0 References: X-Mailer: git-send-email 2.47.0.rc1.288.g06298d1525-goog Message-ID: Subject: [RFC PATCH 1/3] mm: hugetlb: Simplify logic in dequeue_hugetlb_folio_vma() From: Ackerley Tng To: muchun.song@linux.dev, peterx@redhat.com, akpm@linux-foundation.org, rientjes@google.com, fvdl@google.com, jthoughton@google.com, david@redhat.com Cc: isaku.yamahata@intel.com, zhiquan1.li@intel.com, fan.du@intel.com, jun.miao@intel.com, tabba@google.com, quic_eberman@quicinc.com, roypat@amazon.co.uk, jgg@nvidia.com, jhubbard@nvidia.com, seanjc@google.com, pbonzini@redhat.com, erdemaktas@google.com, vannapurve@google.com, ackerleytng@google.com, pgonda@google.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: C93BE10000A X-Stat-Signature: 14pmfqdz6tiu3s8e5ggirppsb9nnrb18 X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1728688971-583460 X-HE-Meta: U2FsdGVkX1+TWf2cFEzf3/vEZOwIxk4nx04mltx/dq8tsTVC3S6/Bp1QhlCPwpWyKZe0wFummRloKwcRzqfsMVtD7xZFGzds6ZCesJZge+nRoi90+aVjme2L/EttYyVwtPujoCl6KhY3oXLahzGTDwzmDkqRcAj5uHDvyyPDqwZsx5I+hs2vLYiwBB+rXPJJWCwYU/9Sq/UBVCvkW0BzF5e4Ig3vro02E2R3MKZY+9iZsFvqAgGQ7PXkV5w5LK3zjtgXAd+lxwlRVoIv1A3F8oKtg7DVsSu/pOnq+KdzQwDg05ByyDDRO5e7CUhv5ZI+r2aPAzuaUwiy8yBcJ2G2+LxwC4si2piS7pQIohOHDxFVarba4OQrRPqgZ3xchChEt7ejstwv2oi6CHYjuJmTh4yWactskLj1io2bj/JuHFoJ17Aa/AWEMupVq92NPmSP/tfEY3FOvBUstNMZ/wcGLndEycfj+XHkTz+Dk/Dmom/UGp4siirIVpHji6H8UPmBXYyG60Fm5SyFhDeITeGOOO0mbBzGDY83V+lyr2hmTIe+GOTr9Ddv5GRnAG+95zgJSo88w765yZXNQGKg5Tk4AxInySmVPFo+OzjfRrQB3Zgh+gDaWYxBpPBxkGTkyD80M/5c9GtVqyrCz8RN4mgQnN2j22P6YlwD7TcbCGHojzXhf0UKJZisPGuLdenmIK475pLm2DjJB+Pcx2NDyKdYeRoNTz3jz43XuBWTSqQfhZLMVMT6i+Tf6AXwcQst3jMV9dCC8ZzmwiPfyaBtoOgCGlbfy+xghViBNMQkvvGmv8K9OIevWrRNaxnu16D8mPLud/hwvBotwZ6Mj6GfzaAcMNQ1jGLAE6iH212M/0aGGTv+YZSF9SSQcWm+9PEIRT0YuIEf7GlG76X7xePn4Niar4suOfPvVIYsdWf/Ic2m3XRufxO8gNcvcmxWu1SN9ZmHpDlNfp6Zn6n7uZTzJhI H9L3WrQJ v7e8YjLJpoERNBjk5zbJiGuGYpMOX9euayerUEZbYfWE9iCD5uS5vr6AzQh+b923P8kygu1hNvdb38AfCdkugLR6pSmtQnhHKtcG+KNorv0QYOvoJbsTlhpKXpibvUhZm+b4BVkJ2kW1IhBnXTxHZWdq+n92y236fvthOhpBQXWQtq6ycNqlTUJqU/UNMeqP78JMPT9ZSTqqsbYQx3M3/X8jpkO9Lg64IYdXmo14T+augODCpp2gUtjdqg2UYcaF9JQ7dDCbfdgi9dra9L7zFFqcbjl31jqEqaClPfmqKOzjLWIm29iqH6uWNcKSzQIsxedh+IrjoHvheWsVvt4Qq+ZHFYBPhjyhORecxx/HXRGrGCDSnJEDVzSX32xLwUvtnFsbiPpO5N4FS7yBRvKTLdmtf0sEvzb4QEdN3yzdDxbTAw+bLS/HLDWO6xFn95FOHEoSE3qy3Psq3dgr+0mx8ejvLxNPH4++Hkzbxr6TIWA43MuSqyG2AIK0cBLXpSFrBkCS6C0RFMB7tEo+NJWA8O+HijCWreE2/5BrjcqTcoJGLfZQQ/pJi0NKEyILRcfHxSv8bOQf8toQhKPfNNfleYm0A8SyIWi7/X6ciEY2DxMy8qy/bjoknYA+kbw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000008, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Replace arguments avoid_reserve and chg in dequeue_hugetlb_folio_vma() so dequeue_hugetlb_folio_vma() is more understandable. The new argument, use_hstate_resv, indicates whether the folio to be dequeued should be taken from reservations in hstate. If use_hstate_resv is true, the folio to be dequeued should be taken from reservations in hstate and hence h->resv_huge_pages is decremented, and the folio is marked so that the reservation is restored. If use_hstate_resv is false, then a folio needs to be taken from the pool and hence there must exist available_huge_pages(h), failing which, goto err. The bool use_hstate_resv can be reused within dequeue_hugetlb_folio_vma()'s caller, alloc_hugetlb_folio(). No functional changes are intended. As proof, the original two if conditions !vma_has_reserves(vma, chg) && !available_huge_pages(h) and avoid_reserve && !available_huge_pages(h) can be combined into (avoid_reserve || !vma_has_reserves(vma, chg)) && !available_huge_pages(h). Applying de Morgan's theorem on avoid_reserve || !vma_has_reserves(vma, chg) yields !avoid_reserve && vma_has_reserves(vma, chg), hence the simplification is correct. Signed-off-by: Ackerley Tng --- mm/hugetlb.c | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 190fa05635f4..73165c670739 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1281,8 +1281,9 @@ static bool vma_has_reserves(struct vm_area_struct *vma, long chg) } /* - * Only the process that called mmap() has reserves for - * private mappings. + * Only the process that called mmap() has reserves for private + * mappings. A child process with MAP_PRIVATE mappings created by their + * parent have no page reserves. */ if (is_vma_resv_set(vma, HPAGE_RESV_OWNER)) { /* @@ -1394,8 +1395,7 @@ static unsigned long available_huge_pages(struct hstate *h) static struct folio *dequeue_hugetlb_folio_vma(struct hstate *h, struct vm_area_struct *vma, - unsigned long address, int avoid_reserve, - long chg) + unsigned long address, bool use_hstate_resv) { struct folio *folio = NULL; struct mempolicy *mpol; @@ -1403,16 +1403,7 @@ static struct folio *dequeue_hugetlb_folio_vma(struct hstate *h, nodemask_t *nodemask; int nid; - /* - * A child process with MAP_PRIVATE mappings created by their parent - * have no page reserves. This check ensures that reservations are - * not "stolen". The child may still get SIGKILLed - */ - if (!vma_has_reserves(vma, chg) && !available_huge_pages(h)) - goto err; - - /* If reserves cannot be used, ensure enough pages are in the pool */ - if (avoid_reserve && !available_huge_pages(h)) + if (!use_hstate_resv && !available_huge_pages(h)) goto err; gfp_mask = htlb_alloc_mask(h); @@ -1430,7 +1421,7 @@ static struct folio *dequeue_hugetlb_folio_vma(struct hstate *h, folio = dequeue_hugetlb_folio_nodemask(h, gfp_mask, nid, nodemask); - if (folio && !avoid_reserve && vma_has_reserves(vma, chg)) { + if (folio && use_hstate_resv) { folio_set_hugetlb_restore_reserve(folio); h->resv_huge_pages--; } @@ -2973,6 +2964,7 @@ struct folio *alloc_hugetlb_folio(struct vm_area_struct *vma, struct mem_cgroup *memcg; bool deferred_reserve; gfp_t gfp = htlb_alloc_mask(h) | __GFP_RETRY_MAYFAIL; + bool use_hstate_resv; memcg = get_mem_cgroup_from_current(); memcg_charge_ret = mem_cgroup_hugetlb_try_charge(memcg, gfp, nr_pages); @@ -3033,20 +3025,17 @@ struct folio *alloc_hugetlb_folio(struct vm_area_struct *vma, if (ret) goto out_uncharge_cgroup_reservation; + use_hstate_resv = !avoid_reserve && vma_has_reserves(vma, gbl_chg); + spin_lock_irq(&hugetlb_lock); - /* - * glb_chg is passed to indicate whether or not a page must be taken - * from the global free pool (global change). gbl_chg == 0 indicates - * a reservation exists for the allocation. - */ - folio = dequeue_hugetlb_folio_vma(h, vma, addr, avoid_reserve, gbl_chg); + folio = dequeue_hugetlb_folio_vma(h, vma, addr, use_hstate_resv); if (!folio) { spin_unlock_irq(&hugetlb_lock); folio = alloc_buddy_hugetlb_folio_with_mpol(h, vma, addr); if (!folio) goto out_uncharge_cgroup; spin_lock_irq(&hugetlb_lock); - if (!avoid_reserve && vma_has_reserves(vma, gbl_chg)) { + if (use_hstate_resv) { folio_set_hugetlb_restore_reserve(folio); h->resv_huge_pages--; } -- 2.47.0.rc1.288.g06298d1525-goog