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 31B3EE77187 for ; Wed, 18 Dec 2024 13:06:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B43B66B0083; Wed, 18 Dec 2024 08:06:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id ACBF66B00AB; Wed, 18 Dec 2024 08:06:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 91E6C6B00AC; Wed, 18 Dec 2024 08:06:54 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 6FAC46B0083 for ; Wed, 18 Dec 2024 08:06:54 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 9FCDF44B9D for ; Wed, 18 Dec 2024 13:06:52 +0000 (UTC) X-FDA: 82908104286.28.817401F Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by imf24.hostedemail.com (Postfix) with ESMTP id 8D9B7180010 for ; Wed, 18 Dec 2024 13:06:46 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MsDXbFrM; spf=pass (imf24.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1734527177; 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=KC7Ql8GT7M6xqj/drFleO18sYzKRSHwzPDd2hD5Jtik=; b=18eOKYnNI5zyUsneFnC3/6qDszK6P8tDSyXjhzY0rFAn5Iv0sJXsln78dRNX1oKiGKouIW RI0xEst/8cq3TPDg5ovj+Gv9DuUI6nBUAXvjPCqOFzltOIyZVmzqN04ddgcEJ9xIb+sytN k9H28E69f0fm4cYG22xZCoSTlFhSUUA= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=MsDXbFrM; spf=pass (imf24.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1734527177; a=rsa-sha256; cv=none; b=Dm6Ot8f4gZAS9l17Y8hvbI6TvMhSqMnP2cHjTHgR2ApaeOSvrwGIzbZ1rllz+jdJyMBK3g ho61sMUdwvJXvn6ynbxcMaY3myKm5LFmgHry2FJPJ3MWfiGFxTORAkhCrOzFaqfdYG07fi KwcR3t5zz0i6MsxmNCNxTv89Jg78w+4= Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2164b1f05caso59770785ad.3 for ; Wed, 18 Dec 2024 05:06:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1734527209; x=1735132009; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KC7Ql8GT7M6xqj/drFleO18sYzKRSHwzPDd2hD5Jtik=; b=MsDXbFrMoom7THgyuKytj7yBn+4Pj+K9oqW3e8ZC/6uHzYNZFf6iZkChhjla46PPp4 Vt4dxxAi8sWUQUgAUOWf4bgGkPL+6Sb9QC1bMA9+WDxzsFGOVXaifs5SYY0CzRvHelkJ Rub/NfXYX2n3n9OkHOPya2MtPVrlIxzaSHIJcXJYrju/dRbsg84Hs1dRgNCMp9T3bBGj mYmMZLHE7onViJG7g3kT9odwuQPODHhM+USyh7lKq9JmriBy1Z0Q1mcg8nLlrtYs4wma 3h4cmwxk8LG7/sRCwCO4zkSkKYW5tvmvDSl+XpCeEN9XrjHc34Yol3UGfLKsXx2wEm3x lLFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734527209; x=1735132009; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KC7Ql8GT7M6xqj/drFleO18sYzKRSHwzPDd2hD5Jtik=; b=RjOcM1r4XW4pGFiy6lH+wdxfbi9NNhQhQtKwN62iQV8NXE+vpfgtb6V0vv1HbyYzV1 EiHk3cLN6zx5gTIFQyjDcBkmVh8FcnS6NyYLj2dY6ESsZFbVmnHMO1H8bbSmccLawsDu ekYNX9ePhX922A2xZPSILVrrDZpMnJVRacxTRK6h7brA6OjTL33JmPG/h0y028t155J3 BbfosZZ0bqLZldmWP27Ixi0aLWHDwOh1RRNZVmLjgKOaByM8ZP5yCoMmnNq/1ISYw610 Zjv/3TiHYdVsvAIkfn4vx0FDScGsoRq1sMgQNwHZmtzP8JIRa0ZRQ+LXFXdzMFLh/7av aTtQ== X-Gm-Message-State: AOJu0YzoQyhk+F/zo0wRHVRMmWLBWNzFR1Z8QYbEWdxpazyUdXad6Y1C 3tbbPluPWX+UZLCySPKnGvyCKF5gmfiGul6dhqfV65sNOm5XPyq64NYk4L6JcaI= X-Gm-Gg: ASbGnctyIw55GQngIV2ZS9K86hq3n5NXywAVr8RwBHA1eBUFOn8sEduH7+oLgHah1D8 juzIZTcFoQmgPWhJjaug5K3zapk2HxVDQ41hsAbDxsrE8ZY4y9Dqwf1RJ9Ds1h8r2KgLteij1jd AmBcfkZ9huVLGJCfULwEVJ7OFQlGsOHX+ZtDoMgUPbeZBpZC6yjKd4zWChOJL2oH2Hal4j10mO3 O8vaLxYZbwxW2nGuvDxXvxrp4JtmzGN1o+a6GGHGVbqcaLyENs8dIueDptjwY5Zp6yjB+wtyAa2 BPlyaH4v5raUr03qlTJXEA== X-Google-Smtp-Source: AGHT+IFeQHKjf5x1j6HplQpPLqOMHr9gUGeYMwElc8Se13maebUbMGrfsZ8FVIlBe6kXPLktzNwjjA== X-Received: by 2002:a17:902:cccd:b0:215:6cb2:7877 with SMTP id d9443c01a7336-218d6fcc257mr40842835ad.4.1734527209409; Wed, 18 Dec 2024 05:06:49 -0800 (PST) Received: from C02DW0BEMD6R.bytedance.net ([139.177.225.238]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-218a1db755dsm75751825ad.42.2024.12.18.05.06.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Dec 2024 05:06:49 -0800 (PST) From: Qi Zheng To: peterz@infradead.org, tglx@linutronix.de, david@redhat.com, jannh@google.com, hughd@google.com, yuzhao@google.com, willy@infradead.org, muchun.song@linux.dev, vbabka@kernel.org, lorenzo.stoakes@oracle.com, akpm@linux-foundation.org, rientjes@google.com, vishal.moola@gmail.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH v2 15/15] mm: pgtable: introduce generic pagetable_dtor_free() Date: Wed, 18 Dec 2024 21:04:51 +0800 Message-Id: X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 8D9B7180010 X-Rspam-User: X-Stat-Signature: k4hijcdr9da5ajpbsw5r8wmrr17namyp X-HE-Tag: 1734527206-845339 X-HE-Meta: U2FsdGVkX1/Zwe2VyMnxmHDxp6FGGyauPfqg9G659C+ShkMTttThtPxl3iaDy3YVZ80wWnPKPlRNjx33ufIAfBjvI3NbKVx5TJfckgYjXvquKo1LGg/5TXJJfE40r4i51APh13qtZEp41qO6bOhDTsp0q5Yj7apXkyqvJ02pq8syHsPcUG7USjEIMZBU5/vr7w23cdlSbhU6Svv9U4ijybnMGiXSafF4FojAkrv5egaVZ/Vhbylhs2vdRJNI0c5AiBfW/VHQq62XgFQ93MyXf7Grw3XQTe832mkMil8PHC8pVnjBezWnnj03Z1OSU8zrUbBe+2GwaJG9pXuN9U90t3hlfj+6eK83AIAQ+ZH7HW9p4YXAZT09f0h2fDjSxcktjQ5rtAWmwslQA/3kc2GW6oDNRr6/tqP4HhmS32Mt2HVFnMmrSfMma/umCHIgJpMLtm9BcM/cXLupkCMQLOhgoH3/LrjJIL2XXfwKMZOMSXLBI4MrC9V4oO2own8nkooTGLzWJgf3cVp6ZcZXNjV2jCBOiMCHtScnUWMcFfaD1doU+oYdik38ynPg2jPvh8KHElVFX+IopnPkQttHjZMSHwyCeC1G+qVJIJ3qkprH/HPrhJMxmDJrlAG2l+1HeY/gZip8nhyj7tgag3ObnyxEEimIPgfcq/vlSanmJ2awT7rfAMAHpPkH1zyz1vGAoYE7nsFMGHwGHPr0qsbcleKGfp8NA/ZPjOqYmPB+ppNn0rp0ENSdTP6gqFf6fqqPjWUzk8MtuNnYI9v+Z29qwpijrDTWaIn3PxzBWOhlSWbstvpIjNaz7CJrsQ46lNowHYEsof20PgVPZRg+UfgtNk+16uIEtDzzLC9nYsBsHWc0mDVlR3xbtetBqB3/4w777CFgR5/DetgXJ80O9mMzSXdsgtExyo7gpLi8kcEgv1OQIKXuXVVIEqUXk+vAi2S7dPPex5mnzkTyZzw145cY1yC H6X7tgDo Q5fipGNWQQ9+am6mBLqC90341OINURfZnJkzGAvqtgfFPcFMGKw7saeB/W0X/6ATUJIz4NLjiAS4H9orUcvpDCL/1T7r/Rw4FGuZNePUMG3rchdCjoo6HAVMcD2rb7QPXC5RmL7zGXjRvViSmZfpQJ92Jo1T+o04u1JmrjtpThfbD1AGy29IGrCF/j8DxUFEBTM1vphkn7+MApe//btXQK7DgamY55amcOa4Q8LGoke2ieHX7r8b6VJNjJQ0sPrpgEY2CzMM4VPzlJ3qvilqcvY7Q+u1WDuiibb2rTS3VKU2VgeIZ1mfbic2wk3QF07Zzqn4j+VQGFmgHd1OKe+rnSClSH8UKDDdcN0KsdssZS3ciTGcWngSQ4MDnbJfkPO105h7tgH1m4dHWMImyd7lFZZ0+0xh5XBqKA/m34g5yEg0TZPqxFuLXVJj1W5TDp53cVNWd2kgpWFcVuj2i1m2g5DDbvR8LD9b1oXbqcKOO9lPnoB4= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000770, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: The pte_free(), pmd_free(), __pud_free() and __p4d_free() in asm-generic/pgalloc.h and the generic __tlb_remove_table() are actually the same, so let's introduce pagetable_dtor_free() to deduplicate them. In addition, the pagetable_dtor_free() in s390 actually does the same thing, so let's s390 also calls generic pagetable_dtor_free(). Signed-off-by: Qi Zheng Suggested-by: Peter Zijlstra (Intel) --- arch/s390/mm/pgalloc.c | 18 ++++++------------ include/asm-generic/pgalloc.h | 23 ++++------------------- include/asm-generic/tlb.h | 5 +---- include/linux/mm.h | 8 ++++++++ 4 files changed, 19 insertions(+), 35 deletions(-) diff --git a/arch/s390/mm/pgalloc.c b/arch/s390/mm/pgalloc.c index 3e002dea6278f..1e0727be48eaf 100644 --- a/arch/s390/mm/pgalloc.c +++ b/arch/s390/mm/pgalloc.c @@ -180,32 +180,26 @@ unsigned long *page_table_alloc(struct mm_struct *mm) return table; } -static void pagetable_dtor_free(struct ptdesc *ptdesc) -{ - pagetable_dtor(ptdesc); - pagetable_free(ptdesc); -} - void page_table_free(struct mm_struct *mm, unsigned long *table) { - struct ptdesc *ptdesc = virt_to_ptdesc(table); + struct page *page = virt_to_page(table); - pagetable_dtor_free(ptdesc); + pagetable_dtor_free(page); } #ifdef CONFIG_TRANSPARENT_HUGEPAGE static void pte_free_now(struct rcu_head *head) { - struct ptdesc *ptdesc = container_of(head, struct ptdesc, pt_rcu_head); + struct page *page = container_of(head, struct page, rcu_head); - pagetable_dtor_free(ptdesc); + pagetable_dtor_free(page); } void pte_free_defer(struct mm_struct *mm, pgtable_t pgtable) { - struct ptdesc *ptdesc = virt_to_ptdesc(pgtable); + struct page *page = virt_to_page(pgtable); - call_rcu(&ptdesc->pt_rcu_head, pte_free_now); + call_rcu(&page->rcu_head, pte_free_now); /* * THPs are not allowed for KVM guests. Warn if pgste ever reaches here. * Turn to the generic pte_free_defer() version once gmap is removed. diff --git a/include/asm-generic/pgalloc.h b/include/asm-generic/pgalloc.h index 3673e9c29504e..370f5b579ff88 100644 --- a/include/asm-generic/pgalloc.h +++ b/include/asm-generic/pgalloc.h @@ -107,10 +107,7 @@ static inline pgtable_t pte_alloc_one_noprof(struct mm_struct *mm) */ static inline void pte_free(struct mm_struct *mm, struct page *pte_page) { - struct ptdesc *ptdesc = page_ptdesc(pte_page); - - pagetable_dtor(ptdesc); - pagetable_free(ptdesc); + pagetable_dtor_free(pte_page); } @@ -150,11 +147,7 @@ static inline pmd_t *pmd_alloc_one_noprof(struct mm_struct *mm, unsigned long ad #ifndef __HAVE_ARCH_PMD_FREE static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) { - struct ptdesc *ptdesc = virt_to_ptdesc(pmd); - - BUG_ON((unsigned long)pmd & (PAGE_SIZE-1)); - pagetable_dtor(ptdesc); - pagetable_free(ptdesc); + pagetable_dtor_free(virt_to_page(pmd)); } #endif @@ -199,11 +192,7 @@ static inline pud_t *pud_alloc_one_noprof(struct mm_struct *mm, unsigned long ad static inline void __pud_free(struct mm_struct *mm, pud_t *pud) { - struct ptdesc *ptdesc = virt_to_ptdesc(pud); - - BUG_ON((unsigned long)pud & (PAGE_SIZE-1)); - pagetable_dtor(ptdesc); - pagetable_free(ptdesc); + pagetable_dtor_free(virt_to_page(pud)); } #ifndef __HAVE_ARCH_PUD_FREE @@ -254,11 +243,7 @@ static inline p4d_t *p4d_alloc_one_noprof(struct mm_struct *mm, unsigned long ad static inline void __p4d_free(struct mm_struct *mm, p4d_t *p4d) { - struct ptdesc *ptdesc = virt_to_ptdesc(p4d); - - BUG_ON((unsigned long)p4d & (PAGE_SIZE-1)); - pagetable_dtor(ptdesc); - pagetable_free(ptdesc); + pagetable_dtor_free(virt_to_page(p4d)); } #ifndef __HAVE_ARCH_P4D_FREE diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h index 583e95568f52b..ef25169523602 100644 --- a/include/asm-generic/tlb.h +++ b/include/asm-generic/tlb.h @@ -211,10 +211,7 @@ struct mmu_table_batch { #ifndef __HAVE_ARCH_TLB_REMOVE_TABLE static inline void __tlb_remove_table(void *table) { - struct ptdesc *ptdesc = page_ptdesc((struct page *)table); - - pagetable_dtor(ptdesc); - pagetable_free(ptdesc); + pagetable_dtor_free(table); } #endif diff --git a/include/linux/mm.h b/include/linux/mm.h index 736215c428293..f2d04eec66076 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3095,6 +3095,14 @@ static inline void pagetable_dtor(struct ptdesc *ptdesc) lruvec_stat_sub_folio(folio, NR_PAGETABLE); } +static inline void pagetable_dtor_free(void *table) +{ + struct ptdesc *ptdesc = page_ptdesc((struct page *)table); + + pagetable_dtor(ptdesc); + pagetable_free(ptdesc); +} + static inline bool pagetable_pte_ctor(struct ptdesc *ptdesc) { struct folio *folio = ptdesc_folio(ptdesc); -- 2.20.1