From patchwork Tue Aug 15 03:26:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13353485 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 EABEAEB64DD for ; Tue, 15 Aug 2023 03:27:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 833FB900020; Mon, 14 Aug 2023 23:27:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7E48190000B; Mon, 14 Aug 2023 23:27:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6D3AA900020; Mon, 14 Aug 2023 23:27:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 6070190000B for ; Mon, 14 Aug 2023 23:27:19 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 422DCA08A2 for ; Tue, 15 Aug 2023 03:27:19 +0000 (UTC) X-FDA: 81124903398.06.7C30F87 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf18.hostedemail.com (Postfix) with ESMTP id 7E8F31C0021 for ; Tue, 15 Aug 2023 03:27:17 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=n+Cmbhnp; dmarc=none; spf=none (imf18.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692070037; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hTIBRejTHMVa47/OsAXgkrlKS1/xzRl/GmhV8qZATSk=; b=JqAmWUuknIpBRgcGbPF1XH+xbXwljjtPoSeprPl777LT3oF1vujAo5cX2HiRKnH4EIqhv9 5tteRpDB90HFGgPDKrrv+iYBUvgIJnYG65OMpTa1OP7WnswQgH+30y4zHEXZx18oehFPvr SnH3hB8uVW8Z9HndTO1GW7YS7IQco0U= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=n+Cmbhnp; dmarc=none; spf=none (imf18.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692070037; a=rsa-sha256; cv=none; b=yLbVCvQsH1dLqnOv85jxBi0XXPqItP0yulgEa/ntt1IcGjVnFb7WlnrM2V7O3heiZKMgR5 hiheXaEfz72GnfjONa6lSlSKeL0tDYwaiRH6GdRlgw77fEXydAVqqz3FEfzsuiCd10KhtZ Pg1Qtilc2EH/RV8tuB2pFbj9qbUwhyM= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=hTIBRejTHMVa47/OsAXgkrlKS1/xzRl/GmhV8qZATSk=; b=n+CmbhnpgxNvlfkTNzd9P2ZaHX Cn45PUv3SBi6Yq/3tgjPgZhhAF2R2RadpQ+j8MfyJ+gBK8nKGwkGNhQ686uOAnB/GaaXr+OxhWr/p CASKUPLP7CqSS81qN2gJHZahP+7uSiKiEV4IW3JtnHcTDEa4hCgyR7CvAytGlgvXzWDCF3TVZEDZT w+BU72BcAA/EyE38WlK6CoB6yKsCJr6xxLzEE0WqV0pzP4I7ls5jzKE9jdghA3qHmXUIzBqX6yoQu GEGXj1HYkffhAfBUhFp2clFl6v+eHn7AFzflOwOs2BCJFy6D3/dLnWFXx+28EhmUUUebp0RPGbtkk /d4Hpkjw==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qVkhm-005qaX-Eo; Tue, 15 Aug 2023 03:26:50 +0000 From: "Matthew Wilcox (Oracle)" To: Andrew Morton Cc: "Matthew Wilcox (Oracle)" , Jens Axboe , io-uring@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 4/9] mm: Make free_compound_page() static Date: Tue, 15 Aug 2023 04:26:40 +0100 Message-Id: <20230815032645.1393700-5-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230815032645.1393700-1-willy@infradead.org> References: <20230815032645.1393700-1-willy@infradead.org> MIME-Version: 1.0 X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 7E8F31C0021 X-Stat-Signature: jhky63ngru4rhxejmajcuwwx49eqnbha X-Rspam-User: X-HE-Tag: 1692070037-46113 X-HE-Meta: U2FsdGVkX1+KvhL/M9SgPg87F55pqsqH1AZJ764kSCV7ZiRY6XgtN5ZIUGZt4Bet5k4Ol2ygAZkgbEMqpYnopXIV4dnuoC4WlLEwJ2R9M/KbVCRF3aJIjmp4Ht5GXTN8KisHIWa3zI8csuXE7UuFnQsMoq74uDub9t1lRwAPeT577esCyDiUWnMHW1l4fuLSj4tXiKII44e8MV/ix4nErnt6w635LgHW5d+BHqxxTpfSmIKI1Z6rNYyAkT+DMbxzfNEwhJkhggPm2iJi3/J6n+iYTclxgk6cKm1w+3tYXZtkdYGWIlhgQGjdFYkOTxMUDjqMstrJA0DzPdYPSZkufGp7aVoKVrf7eMuhJ3GfH4AtkXZusXL/Zf9obY2FS8co5a9CsWuquNMhWDM4+KmRuDKlr+lYTIIy1/oP5yfIcW3g0sdMaYyypIuk48U33VVJKWJe1vNc6lo4dKn51ggq5syarhi7x2zIqIzCgZDwJ87p5zLZfpFKYFP/p/iUS/qxbRX/PZcaWWivXmSHJFX1agWh1hCCPJGopbS0jSXVPFFCHQklGRtC4nXK8SJONqy31Jf5fzjj2LnnJpY1brl/WAJvyI+JGprHpnpstU+rbwlh0npGc95nT31dhlz9apbdkh5daYespws5DdanPCQzNkEpd3WNEh2xALTENYBYv6+F3tA3yvtCaYAxeY7nvEoC+nDACF6cQgsjvO/cQmZ/R8VpXGzEevBdRCbqrJOp3dJFmaimYYaPAKhwz9Mx9pOHaA+IWMwkGLN9VtlJ1shCULOViUrWBwXBu1HDCUNSxiH1n1RKxa2fCIG6XqfssmogfgS41fkveprVT/S2e6z2OoWPqhdkDAcj2IwgTX/g0zG97jnHEd+zJLj2adjv3eaPl8dxAd58MjfSDTwPKYnzeBbrc0koKIJEUFPZmyBfWHGNqzOkGTUqjzVNNrQVUgT6749VlysV2Ioju8hsiw1 YndGNOJf UfRR3+Qu4w9L1KDjgZ0ToUl2hB5SbMKO9TGqMYPHmLiiL1EtEKHCupo/HjmV/S+EGvii3h+sNSqgB2rH+qWuM01XVWINv1vzbOD7Oqj26omabC2kNuH/CeKcWr6f7iUdsdO9KacfXmXWF45AfXOr6GlpfcFw+Jcsw1ydzGLkYfjI9mbf0z04F383qSxDB7pAjc0WAMv8Ua/i8MXAQBviZ3dwQ6ePfCJVZ7Om1 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: free_compound_page() is the only remaining dynamic destructor. Call it unconditionally from destroy_large_folio() and convert it to take a folio. It used to be the last thing called from free_transhuge_folio(), and the call from destroy_large_folio() will take care of that case too. This was the last entry in the compound_page_dtors array, so delete it and reword the comments that referred to it. Signed-off-by: Matthew Wilcox (Oracle) Acked-by: David Hildenbrand --- include/linux/mm.h | 11 +---------- mm/huge_memory.c | 1 - mm/page_alloc.c | 23 +++++++---------------- 3 files changed, 8 insertions(+), 27 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 7fb529dbff31..cf6707a7069e 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1267,14 +1267,7 @@ void folio_copy(struct folio *dst, struct folio *src); unsigned long nr_free_buffer_pages(void); -/* - * Compound pages have a destructor function. Provide a - * prototype for that function and accessor functions. - * These are _only_ valid on the head of a compound page. - */ -typedef void compound_page_dtor(struct page *); - -/* Keep the enum in sync with compound_page_dtors array in mm/page_alloc.c */ +/* Compound pages may have a special destructor */ enum compound_dtor_id { NULL_COMPOUND_DTOR, COMPOUND_PAGE_DTOR, @@ -1325,8 +1318,6 @@ static inline unsigned long thp_size(struct page *page) return PAGE_SIZE << thp_order(page); } -void free_compound_page(struct page *page); - #ifdef CONFIG_MMU /* * Do pte_mkwrite, but only if the vma says VM_WRITE. We do this when diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 516fe3c26ef3..99e36ad540c4 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2797,7 +2797,6 @@ void free_transhuge_folio(struct folio *folio) } spin_unlock_irqrestore(&ds_queue->split_queue_lock, flags); } - free_compound_page(&folio->page); } void deferred_split_folio(struct folio *folio) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index feb2e95cf021..804982faba4e 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -284,11 +284,6 @@ const char * const migratetype_names[MIGRATE_TYPES] = { #endif }; -static compound_page_dtor * const compound_page_dtors[NR_COMPOUND_DTORS] = { - [NULL_COMPOUND_DTOR] = NULL, - [COMPOUND_PAGE_DTOR] = free_compound_page, -}; - int min_free_kbytes = 1024; int user_min_free_kbytes = -1; static int watermark_boost_factor __read_mostly = 15000; @@ -587,17 +582,17 @@ static inline void free_the_page(struct page *page, unsigned int order) * The remaining PAGE_SIZE pages are called "tail pages". PageTail() is encoded * in bit 0 of page->compound_head. The rest of bits is pointer to head page. * - * The first tail page's ->compound_dtor holds the offset in array of compound - * page destructors. See compound_page_dtors. + * The first tail page's ->compound_dtor describes how to destroy the + * compound page. * * The first tail page's ->compound_order holds the order of allocation. * This usage means that zero-order pages may not be compound. */ -void free_compound_page(struct page *page) +static void free_compound_page(struct folio *folio) { - mem_cgroup_uncharge(page_folio(page)); - free_the_page(page, compound_order(page)); + mem_cgroup_uncharge(folio); + free_the_page(&folio->page, folio_order(folio)); } void prep_compound_page(struct page *page, unsigned int order) @@ -621,13 +616,9 @@ void destroy_large_folio(struct folio *folio) return; } - if (folio_test_transhuge(folio) && dtor == TRANSHUGE_PAGE_DTOR) { + if (folio_test_transhuge(folio) && dtor == TRANSHUGE_PAGE_DTOR) free_transhuge_folio(folio); - return; - } - - VM_BUG_ON_FOLIO(dtor >= NR_COMPOUND_DTORS, folio); - compound_page_dtors[dtor](&folio->page); + free_compound_page(folio); } static inline void set_buddy_order(struct page *page, unsigned int order)