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 35855C77B7C for ; Wed, 19 Apr 2023 13:34:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9B98A8E0002; Wed, 19 Apr 2023 09:34:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 96A148E0001; Wed, 19 Apr 2023 09:34:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 831688E0002; Wed, 19 Apr 2023 09:34:07 -0400 (EDT) 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 6FB548E0001 for ; Wed, 19 Apr 2023 09:34:07 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 14AD21A0177 for ; Wed, 19 Apr 2023 13:34:07 +0000 (UTC) X-FDA: 80698234134.01.5E95EE2 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) by imf15.hostedemail.com (Postfix) with ESMTP id 042CBA0011 for ; Wed, 19 Apr 2023 13:34:03 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=mzt7zUu9; spf=pass (imf15.hostedemail.com: domain of vernon2gm@gmail.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=vernon2gm@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681911244; a=rsa-sha256; cv=none; b=1y8ul3ReE/Zgh4DFDK6kNuCJ5ck6no8oQyfu+QbphflbM3klPFALscOQVkNIj3bQMdEyZV Uu0aYRr0tT0Ll0jIeaWa3Sj4HDpwnZGhW3OrEbeSZ86qroV/yo8fJe9pgehiFEIaqbj46z o8HC7JGtmbGkfO4Ax4l5Vz1KpiZhXKs= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=mzt7zUu9; spf=pass (imf15.hostedemail.com: domain of vernon2gm@gmail.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=vernon2gm@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=1681911244; 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=PxKBdJz6P62xw3o1oOHy6gvL/UmSXqmJ0vRsGDHfXz4=; b=jv60Z77qfDy6hOpZL5Cc+3M49kNpM47vPINzMqX5SitQy5P3MB2qgrT9nURVK7x20blwln xxchmOyRknzQNLFuACKTLsaODIrHuKfGktiwRRazYiVorNdDtoOJ5+6LlRgPkNTJXqis7R XIwmDlJqgJmLxBjt5m77Xi+cWuAG6JY= Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-63b73203e0aso16098004b3a.1 for ; Wed, 19 Apr 2023 06:34:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681911243; x=1684503243; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=PxKBdJz6P62xw3o1oOHy6gvL/UmSXqmJ0vRsGDHfXz4=; b=mzt7zUu9/LUJvSIPaNj+nC+ArFvk3Wmz36d7P4hExfQnu/+5EJ/luadmhJCFNiq8eA 5mamh3uH/3u0VIJzJy4W31TNXYt1DvfBn6ZHGOaQZO/LaodxyaE7yMJE8BXQrMBetDD1 or6ct0PxWqhNSzFTI7QUR0GNkBsKZpZ79DqaN9iIdwxdDsEv8FenNeci7+RSvuikuLAT 68J4r2aw28njQbzjpScT2QNoBA3X+SSSqlRvn9uiCaccB9t2Uwb/G4C4D/IZDIaojb9q azW1GR2HjveVXh0qkoLiSeS/y+b+MPHfKKr5FHg+1Fk7e61fzU4VCdWEM74x3aiYuZwi ZxNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681911243; x=1684503243; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=PxKBdJz6P62xw3o1oOHy6gvL/UmSXqmJ0vRsGDHfXz4=; b=dzTP/MyvBP0I/LO/mE3wsmDifxjDjBBr2mSaL8P+jMqzg7jJdKFKChRt17P7xp59lt b0G63z9na9+mXmPM1yCukPjxpLjFzlwXPTLcm8hURVYRHAx6Zz4fEjbLxLq6nT77GljW Q6rwXivPtYHHniXihhFtqGpdFfpbMA1C3b6d6/+siE5MXKjCA/EZrBByQyBwGZ6frGEc n2FlUV7LAf5gH0yCPiQV6KXgMZ6YDVQ6TQL+Xt1Kg3VSnR7Mrsvi7/0Lk8q3fBxC69dI QCWw/MkHlaPOGVV0fOsbIhNkTbjCb6F8bhYOwHyV8EsPdvyAEr+nybZ95kQ76EkxqD2o SCgg== X-Gm-Message-State: AAQBX9fqzUiCaIbVFKk3lQ6tPbDvIUjPBBxJCWTZKYwaA8MexRVYDbGT khTSxaPrDXH5w9zRX8Du6Lw= X-Google-Smtp-Source: AKy350YIBnQaE7WQxRLYlOkzgJwtc2fN5JwvE5Bu5492IB3LxeDfFswMVcmvTtBOzAP11iX9vi1kMA== X-Received: by 2002:a17:90a:c095:b0:247:4e73:cbdd with SMTP id o21-20020a17090ac09500b002474e73cbddmr2798673pjs.9.1681911242426; Wed, 19 Apr 2023 06:34:02 -0700 (PDT) Received: from vernon-pc ([114.231.52.113]) by smtp.gmail.com with ESMTPSA id fv5-20020a17090b0e8500b0023b4d4ca3a9sm1392755pjb.50.2023.04.19.06.33.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Apr 2023 06:34:02 -0700 (PDT) Date: Wed, 19 Apr 2023 21:33:54 +0800 From: Vernon Yang To: Vishal Moola Cc: Andrew Morton , Matthew Wilcox , linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, loongarch@lists.linux.dev, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-openrisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, xen-devel@lists.xenproject.org, kvm@vger.kernel.org Subject: Re: [PATCH 4/33] mm: add utility functions for ptdesc Message-ID: References: <20230417205048.15870-1-vishal.moola@gmail.com> <20230417205048.15870-5-vishal.moola@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230417205048.15870-5-vishal.moola@gmail.com> X-Rspam-User: X-Rspamd-Queue-Id: 042CBA0011 X-Rspamd-Server: rspam01 X-Stat-Signature: 1sfwtxhpx66u9jprgpuywinib7phsmnh X-HE-Tag: 1681911243-146155 X-HE-Meta: U2FsdGVkX1/K8fGT8hOj31qEZYimd4Qn5kc0RxVrU7px+O/oVMH+xjOF1sonv4UdKiQycyw97lQmfWHfpl7mJ3RDgnN4h6rG6sd9RP9uH4IH8QYaKgjR0+78tomYznk3oTM8OazHjdZaGecfTXNYeujk0xG/iwwcbywTFG8IO6froeR7yIU8A8I0k89JK1jyoIjRCnRKLQiDkCMz9OEHtrGI/rYA31CByK4O9+OLE3KQlQ+iMADhUF9eijopC/XgixAdX5E9wXWVct3+wedFzMLNKcozi3K74IOfpPcHfEm2eNfA42jG636lDkmsRRIYMMEvq4YQgjhOjIw2p+ylq6URy0iH1VTf7zepocPht6QB9rp2PBXtlP338HhrMfnanT6PEzAxw2iy+lluFXNtbiAbsE3PfgvIGR+hvbjAhx2t8G/RgXkQRLd2qUF1kDiXLnHugi7mfgWyNnj5a/QiWfhmpDubD/xVNREo6e6JZwZWz4S9CNeOxU/x730ANPH0oh9RaXZRv32ob168g2mIcI/dCedgh6J2iQ3V0zbNt7rnaWYlb9CVyIjMbsnM7P9/eL+cG1X0PUnVO/H9W12TnKzehI/fGuzv/ccv9XJbUv4VuZKd8FSswMDNvrDe2a6iEPofStr9nDTLg34WYZmySpq7pgPXuWqNzVYkv/1u6bhPo8ZObFBCkRmeaKa0T/hCELXF+F9eUUBYkxinpJj8JNOLAuTMqlhkdsXfdExgJJR7TU+/dC8RK559LqMW//K1HkP2aD6vmKVHwbP9eaCzFQLb+ZhykekiZJs4zRlBPeE7aY+fqVZvgriz2EZ927klArchs7mVtEjdDOx8kBc0/STE3YkaUDoATz3AiNn3i9Zd3ffnlftJXNqmpl9GkqUtURRS8ybsjzoVL+iKUkDkQJSgC77fZf4V33RwiVIkQ7NbECCAM5lEUKOARMXwL7VNRZlaNFhGwAJ0ejbym3T EZE0lmXq QNZ2rrYmM4n50eyFd9xBdp3sFLNTMx4vOqlTkPUx2TIbl6RLPcDY3/60bJcI79d3lcc6VCHLVwPhWnrvE6rDI/Mz5oJgqzkH77IeISpH3nvOF6cZ5li9URAK/sSHf5aOFFhR3ohTszTQhO6vMkSl8HMBTrcEt95yNg11HaV0oxFWuAGOM+IOsloZ/MEzcPqAj7nWglSuASq5Aky5R93p0zGAXeRTYdqhj477tQZoRVAo32F6qL4bnVhtZ3nc096W4+uKEZQsS48i4BsXdViZFv3j3ibj670n8/N3fFOohvAMPskxTAx4eBu5xUStDuNZMzKjNFrdGMgLVsRgYqAp0njpDe8PiIRUN2py5AcjOTac0KYqlyU6eyJP75rFKubn5YgadnXd0Zlq4Q1450B5iAh33ln8ev/qRCndWx/rh8T6Dz1Dk/5i5JnqzAdLs09P/1t+G7Y8IMj2GgHdYNGssdJmOmRxtbsFPrB1iIlwxyGglOsl9R/Y0LKZsb2BaY+M0mg24BarvCjws6gHCgwQJ16Oc57a+QayHYt7lylgTUTsqGdE= 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 Mon, Apr 17, 2023 at 01:50:19PM -0700, Vishal Moola wrote: > Introduce utility functions setting the foundation for ptdescs. These > will also assist in the splitting out of ptdesc from struct page. > > ptdesc_alloc() is defined to allocate new ptdesc pages as compound > pages. This is to standardize ptdescs by allowing for one allocation > and one free function, in contrast to 2 allocation and 2 free functions. > > Signed-off-by: Vishal Moola (Oracle) > --- > include/asm-generic/tlb.h | 11 ++++++++++ > include/linux/mm.h | 44 +++++++++++++++++++++++++++++++++++++++ > include/linux/pgtable.h | 13 ++++++++++++ > 3 files changed, 68 insertions(+) > > diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h > index b46617207c93..6bade9e0e799 100644 > --- a/include/asm-generic/tlb.h > +++ b/include/asm-generic/tlb.h > @@ -481,6 +481,17 @@ static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) > return tlb_remove_page_size(tlb, page, PAGE_SIZE); > } > > +static inline void tlb_remove_ptdesc(struct mmu_gather *tlb, void *pt) > +{ > + tlb_remove_table(tlb, pt); > +} > + > +/* Like tlb_remove_ptdesc, but for page-like page directories. */ > +static inline void tlb_remove_page_ptdesc(struct mmu_gather *tlb, struct ptdesc *pt) > +{ > + tlb_remove_page(tlb, ptdesc_page(pt)); > +} > + > static inline void tlb_change_page_size(struct mmu_gather *tlb, > unsigned int page_size) > { > diff --git a/include/linux/mm.h b/include/linux/mm.h > index b18848ae7e22..ec3cbe2fa665 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -2744,6 +2744,45 @@ static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long a > } > #endif /* CONFIG_MMU */ > > +static inline struct ptdesc *virt_to_ptdesc(const void *x) > +{ > + return page_ptdesc(virt_to_head_page(x)); > +} > + > +static inline void *ptdesc_to_virt(struct ptdesc *pt) > +{ > + return page_to_virt(ptdesc_page(pt)); > +} > + > +static inline void *ptdesc_address(struct ptdesc *pt) > +{ > + return folio_address(ptdesc_folio(pt)); > +} > + > +static inline bool ptdesc_is_reserved(struct ptdesc *pt) > +{ > + return folio_test_reserved(ptdesc_folio(pt)); > +} > + > +static inline struct ptdesc *ptdesc_alloc(gfp_t gfp, unsigned int order) > +{ > + struct page *page = alloc_pages(gfp | __GFP_COMP, order); > + > + return page_ptdesc(page); > +} > + > +static inline void ptdesc_free(struct ptdesc *pt) > +{ > + struct page *page = ptdesc_page(pt); > + > + __free_pages(page, compound_order(page)); > +} > + > +static inline void ptdesc_clear(void *x) > +{ > + clear_page(x); > +} > + > #if USE_SPLIT_PTE_PTLOCKS > #if ALLOC_SPLIT_PTLOCKS > void __init ptlock_cache_init(void); > @@ -2970,6 +3009,11 @@ static inline void mark_page_reserved(struct page *page) > adjust_managed_page_count(page, -1); > } > > +static inline void free_reserved_ptdesc(struct ptdesc *pt) > +{ > + free_reserved_page(ptdesc_page(pt)); > +} > + > /* > * Default method to free all the __init memory into the buddy system. > * The freed pages will be poisoned with pattern "poison" if it's within > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index 7cc6ea057ee9..7cd803aa38eb 100644 > --- a/include/linux/pgtable.h > +++ b/include/linux/pgtable.h > @@ -97,6 +97,19 @@ TABLE_MATCH(ptl, ptl); > #undef TABLE_MATCH > static_assert(sizeof(struct ptdesc) <= sizeof(struct page)); > > +#define ptdesc_page(pt) (_Generic((pt), \ > + const struct ptdesc *: (const struct page *)(pt), \ > + struct ptdesc *: (struct page *)(pt))) > + > +#define ptdesc_folio(pt) (_Generic((pt), \ > + const struct ptdesc *: (const struct folio *)(pt), \ > + struct ptdesc *: (struct folio *)(pt))) > + > +static inline struct ptdesc *page_ptdesc(struct page *page) > +{ > + return (struct ptdesc *)page; > +} Hi Vishal, I'm a little curious, why is the page_ptdesc() using inline functions instead of macro? If this is any magic, please tell me, thank you very much. > + > /* > * A page table page can be thought of an array like this: pXd_t[PTRS_PER_PxD] > * > > -- > 2.39.2 >