From: Mike Rapoport <rppt@kernel.org>
To: Qi Zheng <zhengqi.arch@bytedance.com>
Cc: akpm@linux-foundation.org, arnd@arndb.de, muchun.song@linux.dev,
david@redhat.com, willy@infradead.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org
Subject: Re: [PATCH 1/2] mm: pgtable: add missing flag and statistics for kernel PTE page
Date: Sun, 4 Feb 2024 11:58:53 +0100 [thread overview]
Message-ID: <Zb9t7WtFbZofN5WZ@kernel.org> (raw)
In-Reply-To: <f023a6687b9f2109401e7522b727aa4708dc05f1.1706774109.git.zhengqi.arch@bytedance.com>
On Thu, Feb 01, 2024 at 04:05:40PM +0800, Qi Zheng wrote:
> For kernel PTE page, we do not need to allocate and initialize its split
> ptlock, but as a page table page, it's still necessary to add PG_table
> flag and NR_PAGETABLE statistics for it.
>
> Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
> ---
> include/asm-generic/pgalloc.h | 7 ++++++-
> include/linux/mm.h | 21 ++++++++++++++++-----
> 2 files changed, 22 insertions(+), 6 deletions(-)
This should also update the architectures that define
__HAVE_ARCH_PTE_ALLOC_ONE_KERNEL, otherwise NR_PAGETABLE counts will get
wrong.
Another related thing is that many architectures have custom allocations
for early page tables and these would also benefit form NR_PAGETABLE
accounting.
> diff --git a/include/asm-generic/pgalloc.h b/include/asm-generic/pgalloc.h
> index 879e5f8aa5e9..908bd9140ac2 100644
> --- a/include/asm-generic/pgalloc.h
> +++ b/include/asm-generic/pgalloc.h
> @@ -23,6 +23,8 @@ static inline pte_t *__pte_alloc_one_kernel(struct mm_struct *mm)
>
> if (!ptdesc)
> return NULL;
> +
> + __pagetable_pte_ctor(ptdesc);
> return ptdesc_address(ptdesc);
> }
>
> @@ -46,7 +48,10 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
> */
> static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
> {
> - pagetable_free(virt_to_ptdesc(pte));
> + struct ptdesc *ptdesc = virt_to_ptdesc(pte);
> +
> + __pagetable_pte_dtor(ptdesc);
> + pagetable_free(ptdesc);
> }
>
> /**
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index e442fd0efdd9..e37db032764e 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -2922,26 +2922,37 @@ static inline bool ptlock_init(struct ptdesc *ptdesc) { return true; }
> static inline void ptlock_free(struct ptdesc *ptdesc) {}
> #endif /* USE_SPLIT_PTE_PTLOCKS */
>
> -static inline bool pagetable_pte_ctor(struct ptdesc *ptdesc)
> +static inline void __pagetable_pte_ctor(struct ptdesc *ptdesc)
> {
> struct folio *folio = ptdesc_folio(ptdesc);
>
> - if (!ptlock_init(ptdesc))
> - return false;
> __folio_set_pgtable(folio);
> lruvec_stat_add_folio(folio, NR_PAGETABLE);
> +}
> +
> +static inline bool pagetable_pte_ctor(struct ptdesc *ptdesc)
> +{
> + if (!ptlock_init(ptdesc))
> + return false;
> +
> + __pagetable_pte_ctor(ptdesc);
> return true;
> }
>
> -static inline void pagetable_pte_dtor(struct ptdesc *ptdesc)
> +static inline void __pagetable_pte_dtor(struct ptdesc *ptdesc)
> {
> struct folio *folio = ptdesc_folio(ptdesc);
>
> - ptlock_free(ptdesc);
> __folio_clear_pgtable(folio);
> lruvec_stat_sub_folio(folio, NR_PAGETABLE);
> }
>
> +static inline void pagetable_pte_dtor(struct ptdesc *ptdesc)
> +{
> + ptlock_free(ptdesc);
> + __pagetable_pte_dtor(ptdesc);
> +}
> +
> pte_t *__pte_offset_map(pmd_t *pmd, unsigned long addr, pmd_t *pmdvalp);
> static inline pte_t *pte_offset_map(pmd_t *pmd, unsigned long addr)
> {
> --
> 2.30.2
>
>
--
Sincerely yours,
Mike.
next prev parent reply other threads:[~2024-02-04 10:59 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-01 8:05 [PATCH 1/2] mm: pgtable: add missing flag and statistics for kernel PTE page Qi Zheng
2024-02-01 8:05 ` [PATCH 2/2] mm: pgtable: remove unnecessary split ptlock for kernel PMD page Qi Zheng
2024-02-02 3:16 ` Muchun Song
2024-02-04 18:54 ` Matthew Wilcox
2024-02-05 2:14 ` Qi Zheng
2024-02-02 2:47 ` [PATCH 1/2] mm: pgtable: add missing flag and statistics for kernel PTE page Muchun Song
2024-02-04 10:58 ` Mike Rapoport [this message]
2024-02-04 11:39 ` Qi Zheng
2024-02-04 12:15 ` Mike Rapoport
2024-02-04 16:26 ` Qi Zheng
2024-02-04 18:51 ` Matthew Wilcox
2024-02-05 2:05 ` Qi Zheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zb9t7WtFbZofN5WZ@kernel.org \
--to=rppt@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=david@redhat.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=muchun.song@linux.dev \
--cc=willy@infradead.org \
--cc=zhengqi.arch@bytedance.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.