From: "Vishal Moola (Oracle)" <vishal.moola@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>,
Matthew Wilcox <willy@infradead.org>
Cc: 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, Hugh Dickins <hughd@google.com>,
"Vishal Moola (Oracle)" <vishal.moola@gmail.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Mike Rapoport <rppt@kernel.org>
Subject: [PATCH mm-unstable v7 12/31] powerpc: Convert various functions to use ptdescs
Date: Mon, 24 Jul 2023 21:20:32 -0700 [thread overview]
Message-ID: <20230725042051.36691-13-vishal.moola@gmail.com> (raw)
In-Reply-To: <20230725042051.36691-1-vishal.moola@gmail.com>
In order to split struct ptdesc from struct page, convert various
functions to use ptdescs.
Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
---
arch/powerpc/mm/book3s64/mmu_context.c | 10 ++---
arch/powerpc/mm/book3s64/pgtable.c | 32 +++++++--------
arch/powerpc/mm/pgtable-frag.c | 56 +++++++++++++-------------
3 files changed, 49 insertions(+), 49 deletions(-)
diff --git a/arch/powerpc/mm/book3s64/mmu_context.c b/arch/powerpc/mm/book3s64/mmu_context.c
index c766e4c26e42..1715b07c630c 100644
--- a/arch/powerpc/mm/book3s64/mmu_context.c
+++ b/arch/powerpc/mm/book3s64/mmu_context.c
@@ -246,15 +246,15 @@ static void destroy_contexts(mm_context_t *ctx)
static void pmd_frag_destroy(void *pmd_frag)
{
int count;
- struct page *page;
+ struct ptdesc *ptdesc;
- page = virt_to_page(pmd_frag);
+ ptdesc = virt_to_ptdesc(pmd_frag);
/* drop all the pending references */
count = ((unsigned long)pmd_frag & ~PAGE_MASK) >> PMD_FRAG_SIZE_SHIFT;
/* We allow PTE_FRAG_NR fragments from a PTE page */
- if (atomic_sub_and_test(PMD_FRAG_NR - count, &page->pt_frag_refcount)) {
- pgtable_pmd_page_dtor(page);
- __free_page(page);
+ if (atomic_sub_and_test(PMD_FRAG_NR - count, &ptdesc->pt_frag_refcount)) {
+ pagetable_pmd_dtor(ptdesc);
+ pagetable_free(ptdesc);
}
}
diff --git a/arch/powerpc/mm/book3s64/pgtable.c b/arch/powerpc/mm/book3s64/pgtable.c
index 85c84e89e3ea..1212deeabe15 100644
--- a/arch/powerpc/mm/book3s64/pgtable.c
+++ b/arch/powerpc/mm/book3s64/pgtable.c
@@ -306,22 +306,22 @@ static pmd_t *get_pmd_from_cache(struct mm_struct *mm)
static pmd_t *__alloc_for_pmdcache(struct mm_struct *mm)
{
void *ret = NULL;
- struct page *page;
+ struct ptdesc *ptdesc;
gfp_t gfp = GFP_KERNEL_ACCOUNT | __GFP_ZERO;
if (mm == &init_mm)
gfp &= ~__GFP_ACCOUNT;
- page = alloc_page(gfp);
- if (!page)
+ ptdesc = pagetable_alloc(gfp, 0);
+ if (!ptdesc)
return NULL;
- if (!pgtable_pmd_page_ctor(page)) {
- __free_pages(page, 0);
+ if (!pagetable_pmd_ctor(ptdesc)) {
+ pagetable_free(ptdesc);
return NULL;
}
- atomic_set(&page->pt_frag_refcount, 1);
+ atomic_set(&ptdesc->pt_frag_refcount, 1);
- ret = page_address(page);
+ ret = ptdesc_address(ptdesc);
/*
* if we support only one fragment just return the
* allocated page.
@@ -331,12 +331,12 @@ static pmd_t *__alloc_for_pmdcache(struct mm_struct *mm)
spin_lock(&mm->page_table_lock);
/*
- * If we find pgtable_page set, we return
+ * If we find ptdesc_page set, we return
* the allocated page with single fragment
* count.
*/
if (likely(!mm->context.pmd_frag)) {
- atomic_set(&page->pt_frag_refcount, PMD_FRAG_NR);
+ atomic_set(&ptdesc->pt_frag_refcount, PMD_FRAG_NR);
mm->context.pmd_frag = ret + PMD_FRAG_SIZE;
}
spin_unlock(&mm->page_table_lock);
@@ -357,15 +357,15 @@ pmd_t *pmd_fragment_alloc(struct mm_struct *mm, unsigned long vmaddr)
void pmd_fragment_free(unsigned long *pmd)
{
- struct page *page = virt_to_page(pmd);
+ struct ptdesc *ptdesc = virt_to_ptdesc(pmd);
- if (PageReserved(page))
- return free_reserved_page(page);
+ if (pagetable_is_reserved(ptdesc))
+ return free_reserved_ptdesc(ptdesc);
- BUG_ON(atomic_read(&page->pt_frag_refcount) <= 0);
- if (atomic_dec_and_test(&page->pt_frag_refcount)) {
- pgtable_pmd_page_dtor(page);
- __free_page(page);
+ BUG_ON(atomic_read(&ptdesc->pt_frag_refcount) <= 0);
+ if (atomic_dec_and_test(&ptdesc->pt_frag_refcount)) {
+ pagetable_pmd_dtor(ptdesc);
+ pagetable_free(ptdesc);
}
}
diff --git a/arch/powerpc/mm/pgtable-frag.c b/arch/powerpc/mm/pgtable-frag.c
index 0c6b68130025..4c899c9c0694 100644
--- a/arch/powerpc/mm/pgtable-frag.c
+++ b/arch/powerpc/mm/pgtable-frag.c
@@ -18,15 +18,15 @@
void pte_frag_destroy(void *pte_frag)
{
int count;
- struct page *page;
+ struct ptdesc *ptdesc;
- page = virt_to_page(pte_frag);
+ ptdesc = virt_to_ptdesc(pte_frag);
/* drop all the pending references */
count = ((unsigned long)pte_frag & ~PAGE_MASK) >> PTE_FRAG_SIZE_SHIFT;
/* We allow PTE_FRAG_NR fragments from a PTE page */
- if (atomic_sub_and_test(PTE_FRAG_NR - count, &page->pt_frag_refcount)) {
- pgtable_pte_page_dtor(page);
- __free_page(page);
+ if (atomic_sub_and_test(PTE_FRAG_NR - count, &ptdesc->pt_frag_refcount)) {
+ pagetable_pte_dtor(ptdesc);
+ pagetable_free(ptdesc);
}
}
@@ -55,25 +55,25 @@ static pte_t *get_pte_from_cache(struct mm_struct *mm)
static pte_t *__alloc_for_ptecache(struct mm_struct *mm, int kernel)
{
void *ret = NULL;
- struct page *page;
+ struct ptdesc *ptdesc;
if (!kernel) {
- page = alloc_page(PGALLOC_GFP | __GFP_ACCOUNT);
- if (!page)
+ ptdesc = pagetable_alloc(PGALLOC_GFP | __GFP_ACCOUNT, 0);
+ if (!ptdesc)
return NULL;
- if (!pgtable_pte_page_ctor(page)) {
- __free_page(page);
+ if (!pagetable_pte_ctor(ptdesc)) {
+ pagetable_free(ptdesc);
return NULL;
}
} else {
- page = alloc_page(PGALLOC_GFP);
- if (!page)
+ ptdesc = pagetable_alloc(PGALLOC_GFP, 0);
+ if (!ptdesc)
return NULL;
}
- atomic_set(&page->pt_frag_refcount, 1);
+ atomic_set(&ptdesc->pt_frag_refcount, 1);
- ret = page_address(page);
+ ret = ptdesc_address(ptdesc);
/*
* if we support only one fragment just return the
* allocated page.
@@ -82,12 +82,12 @@ static pte_t *__alloc_for_ptecache(struct mm_struct *mm, int kernel)
return ret;
spin_lock(&mm->page_table_lock);
/*
- * If we find pgtable_page set, we return
+ * If we find ptdesc_page set, we return
* the allocated page with single fragment
* count.
*/
if (likely(!pte_frag_get(&mm->context))) {
- atomic_set(&page->pt_frag_refcount, PTE_FRAG_NR);
+ atomic_set(&ptdesc->pt_frag_refcount, PTE_FRAG_NR);
pte_frag_set(&mm->context, ret + PTE_FRAG_SIZE);
}
spin_unlock(&mm->page_table_lock);
@@ -108,28 +108,28 @@ pte_t *pte_fragment_alloc(struct mm_struct *mm, int kernel)
static void pte_free_now(struct rcu_head *head)
{
- struct page *page;
+ struct ptdesc *ptdesc;
- page = container_of(head, struct page, rcu_head);
- pgtable_pte_page_dtor(page);
- __free_page(page);
+ ptdesc = container_of(head, struct ptdesc, pt_rcu_head);
+ pagetable_pte_dtor(ptdesc);
+ pagetable_free(ptdesc);
}
void pte_fragment_free(unsigned long *table, int kernel)
{
- struct page *page = virt_to_page(table);
+ struct ptdesc *ptdesc = virt_to_ptdesc(table);
- if (PageReserved(page))
- return free_reserved_page(page);
+ if (pagetable_is_reserved(ptdesc))
+ return free_reserved_ptdesc(ptdesc);
BUG_ON(atomic_read(&page->pt_frag_refcount) <= 0);
- if (atomic_dec_and_test(&page->pt_frag_refcount)) {
+ if (atomic_dec_and_test(&ptdesc->pt_frag_refcount)) {
if (kernel)
- __free_page(page);
- else if (TestClearPageActive(page))
- call_rcu(&page->rcu_head, pte_free_now);
+ pagetable_free(ptdesc);
+ else if (folio_test_clear_active(ptdesc_folio(ptdesc)))
+ call_rcu(&ptdesc->pt_rcu_head, pte_free_now);
else
- pte_free_now(&page->rcu_head);
+ pte_free_now(&ptdesc->pt_rcu_head);
}
}
--
2.40.1
next prev parent reply other threads:[~2023-07-25 4:23 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-25 4:20 [PATCH mm-unstable v7 00/31] Split ptdesc from struct page Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 01/31] mm: Add PAGE_TYPE_OP folio functions Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 02/31] pgtable: Create struct ptdesc Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 03/31] mm: add utility functions for ptdesc Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 04/31] mm: Convert pmd_pgtable_page() callers to use pmd_ptdesc() Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 05/31] mm: Convert ptlock_alloc() to use ptdescs Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 06/31] mm: Convert ptlock_ptr() " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 07/31] mm: Convert pmd_ptlock_init() " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 08/31] mm: Convert ptlock_init() " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 09/31] mm: Convert pmd_ptlock_free() " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 10/31] mm: Convert ptlock_free() " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 11/31] mm: Create ptdesc equivalents for pgtable_{pte,pmd}_page_{ctor,dtor} Vishal Moola (Oracle)
2023-07-25 4:20 ` Vishal Moola (Oracle) [this message]
2023-07-25 23:33 ` [PATCH mm-unstable v7 12/31] powerpc: Convert various functions to use ptdescs kernel test robot
2023-07-25 4:20 ` [PATCH mm-unstable v7 13/31] x86: " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 14/31] s390: Convert various pgalloc " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 15/31] mm: Remove page table members from struct page Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 16/31] pgalloc: Convert various functions to use ptdescs Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 17/31] arm: " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 18/31] arm64: " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 19/31] csky: Convert __pte_free_tlb() " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 20/31] hexagon: " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 21/31] loongarch: Convert various functions " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 22/31] m68k: " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 23/31] mips: " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 24/31] nios2: Convert __pte_free_tlb() " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 25/31] openrisc: " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 26/31] riscv: Convert alloc_{pmd, pte}_late() " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 27/31] sh: Convert pte_free_tlb() " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 28/31] sparc64: Convert various functions " Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 29/31] sparc: Convert pgtable_pte_page_{ctor, dtor}() to ptdesc equivalents Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 30/31] um: Convert {pmd, pte}_free_tlb() to use ptdescs Vishal Moola (Oracle)
2023-07-25 4:20 ` [PATCH mm-unstable v7 31/31] mm: Remove pgtable_{pmd, pte}_page_{ctor, dtor}() wrappers Vishal Moola (Oracle)
2023-07-25 4:41 ` [PATCH mm-unstable v7 00/31] Split ptdesc from struct page Hugh Dickins
2023-07-26 14:34 ` Matthew Wilcox
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=20230725042051.36691-13-vishal.moola@gmail.com \
--to=vishal.moola@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=christophe.leroy@csgroup.eu \
--cc=hughd@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-csky@vger.kernel.org \
--cc=linux-hexagon@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-openrisc@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=loongarch@lists.linux.dev \
--cc=rppt@kernel.org \
--cc=sparclinux@vger.kernel.org \
--cc=willy@infradead.org \
--cc=xen-devel@lists.xenproject.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).