mm: remove pgtable_{pmd, pte}_page_{ctor, dtor}() wrappers

These functions are no longer necessary.  Remove them and cleanup
Documentation referencing them.

Link: https://lkml.kernel.org/r/20230807230513.102486-32-vishal.moola@gmail.com
Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Claudio Imbrenda <imbrenda@linux.ibm.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Dinh Nguyen <dinguyen@kernel.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Guo Ren <guoren@kernel.org>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Hugh Dickins <hughd@google.com>
Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Cc: Jonas Bonn <jonas@southpole.se>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Palmer Dabbelt <palmer@rivosinc.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Vishal Moola (Oracle) 2023-08-07 16:05:13 -07:00 committed by Andrew Morton
parent da9aefca78
commit 9a4bbd8d97
3 changed files with 13 additions and 33 deletions

View File

@ -58,7 +58,7 @@ Support of split page table lock by an architecture
=================================================== ===================================================
There's no need in special enabling of PTE split page table lock: everything There's no need in special enabling of PTE split page table lock: everything
required is done by pgtable_pte_page_ctor() and pgtable_pte_page_dtor(), which required is done by pagetable_pte_ctor() and pagetable_pte_dtor(), which
must be called on PTE table allocation / freeing. must be called on PTE table allocation / freeing.
Make sure the architecture doesn't use slab allocator for page table Make sure the architecture doesn't use slab allocator for page table
@ -68,8 +68,8 @@ This field shares storage with page->ptl.
PMD split lock only makes sense if you have more than two page table PMD split lock only makes sense if you have more than two page table
levels. levels.
PMD split lock enabling requires pgtable_pmd_page_ctor() call on PMD table PMD split lock enabling requires pagetable_pmd_ctor() call on PMD table
allocation and pgtable_pmd_page_dtor() on freeing. allocation and pagetable_pmd_dtor() on freeing.
Allocation usually happens in pmd_alloc_one(), freeing in pmd_free() and Allocation usually happens in pmd_alloc_one(), freeing in pmd_free() and
pmd_free_tlb(), but make sure you cover all PMD table allocation / freeing pmd_free_tlb(), but make sure you cover all PMD table allocation / freeing
@ -77,7 +77,7 @@ paths: i.e X86_PAE preallocate few PMDs on pgd_alloc().
With everything in place you can set CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK. With everything in place you can set CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK.
NOTE: pgtable_pte_page_ctor() and pgtable_pmd_page_ctor() can fail -- it must NOTE: pagetable_pte_ctor() and pagetable_pmd_ctor() can fail -- it must
be handled properly. be handled properly.
page->ptl page->ptl
@ -97,7 +97,7 @@ trick:
split lock with enabled DEBUG_SPINLOCK or DEBUG_LOCK_ALLOC, but costs split lock with enabled DEBUG_SPINLOCK or DEBUG_LOCK_ALLOC, but costs
one more cache line for indirect access; one more cache line for indirect access;
The spinlock_t allocated in pgtable_pte_page_ctor() for PTE table and in The spinlock_t allocated in pagetable_pte_ctor() for PTE table and in
pgtable_pmd_page_ctor() for PMD table. pagetable_pmd_ctor() for PMD table.
Please, never access page->ptl directly -- use appropriate helper. Please, never access page->ptl directly -- use appropriate helper.

View File

@ -56,16 +56,16 @@ Hugetlb特定的辅助函数:
架构对分页表锁的支持 架构对分页表锁的支持
==================== ====================
没有必要特别启用PTE分页表锁所有需要的东西都由pgtable_pte_page_ctor() 没有必要特别启用PTE分页表锁所有需要的东西都由pagetable_pte_ctor()
和pgtable_pte_page_dtor()完成它们必须在PTE表分配/释放时被调用。 和pagetable_pte_dtor()完成它们必须在PTE表分配/释放时被调用。
确保架构不使用slab分配器来分配页表slab使用page->slab_cache来分配其页 确保架构不使用slab分配器来分配页表slab使用page->slab_cache来分配其页
面。这个区域与page->ptl共享存储。 面。这个区域与page->ptl共享存储。
PMD分页锁只有在你有两个以上的页表级别时才有意义。 PMD分页锁只有在你有两个以上的页表级别时才有意义。
启用PMD分页锁需要在PMD表分配时调用pgtable_pmd_page_ctor(),在释放时调 启用PMD分页锁需要在PMD表分配时调用pagetable_pmd_ctor(),在释放时调
用pgtable_pmd_page_dtor()。 用pagetable_pmd_dtor()。
分配通常发生在pmd_alloc_one()中释放发生在pmd_free()和pmd_free_tlb() 分配通常发生在pmd_alloc_one()中释放发生在pmd_free()和pmd_free_tlb()
但要确保覆盖所有的PMD表分配/释放路径即X86_PAE在pgd_alloc()中预先 但要确保覆盖所有的PMD表分配/释放路径即X86_PAE在pgd_alloc()中预先
@ -73,7 +73,7 @@ PMD分页锁只有在你有两个以上的页表级别时才有意义。
一切就绪后你可以设置CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK。 一切就绪后你可以设置CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK。
注意pgtable_pte_page_ctor()和pgtable_pmd_page_ctor()可能失败--必 注意pagetable_pte_ctor()和pagetable_pmd_ctor()可能失败--必
须正确处理。 须正确处理。
page->ptl page->ptl
@ -90,7 +90,7 @@ page->ptl用于访问分割页表锁其中'page'是包含该表的页面struc
的指针并动态分配它。这允许在启用DEBUG_SPINLOCK或DEBUG_LOCK_ALLOC的 的指针并动态分配它。这允许在启用DEBUG_SPINLOCK或DEBUG_LOCK_ALLOC的
情况下使用分页锁,但由于间接访问而多花了一个缓存行。 情况下使用分页锁,但由于间接访问而多花了一个缓存行。
PTE表的spinlock_t分配在pgtable_pte_page_ctor()中PMD表的spinlock_t PTE表的spinlock_t分配在pagetable_pte_ctor()中PMD表的spinlock_t
分配在pgtable_pmd_page_ctor()中。 分配在pagetable_pmd_ctor()中。
请不要直接访问page->ptl - -使用适当的辅助函数。 请不要直接访问page->ptl - -使用适当的辅助函数。

View File

@ -2898,11 +2898,6 @@ static inline bool pagetable_pte_ctor(struct ptdesc *ptdesc)
return true; return true;
} }
static inline bool pgtable_pte_page_ctor(struct page *page)
{
return pagetable_pte_ctor(page_ptdesc(page));
}
static inline void pagetable_pte_dtor(struct ptdesc *ptdesc) static inline void pagetable_pte_dtor(struct ptdesc *ptdesc)
{ {
struct folio *folio = ptdesc_folio(ptdesc); struct folio *folio = ptdesc_folio(ptdesc);
@ -2912,11 +2907,6 @@ static inline void pagetable_pte_dtor(struct ptdesc *ptdesc)
lruvec_stat_sub_folio(folio, NR_PAGETABLE); lruvec_stat_sub_folio(folio, NR_PAGETABLE);
} }
static inline void pgtable_pte_page_dtor(struct page *page)
{
pagetable_pte_dtor(page_ptdesc(page));
}
pte_t *__pte_offset_map(pmd_t *pmd, unsigned long addr, pmd_t *pmdvalp); 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) static inline pte_t *pte_offset_map(pmd_t *pmd, unsigned long addr)
{ {
@ -3023,11 +3013,6 @@ static inline bool pagetable_pmd_ctor(struct ptdesc *ptdesc)
return true; return true;
} }
static inline bool pgtable_pmd_page_ctor(struct page *page)
{
return pagetable_pmd_ctor(page_ptdesc(page));
}
static inline void pagetable_pmd_dtor(struct ptdesc *ptdesc) static inline void pagetable_pmd_dtor(struct ptdesc *ptdesc)
{ {
struct folio *folio = ptdesc_folio(ptdesc); struct folio *folio = ptdesc_folio(ptdesc);
@ -3037,11 +3022,6 @@ static inline void pagetable_pmd_dtor(struct ptdesc *ptdesc)
lruvec_stat_sub_folio(folio, NR_PAGETABLE); lruvec_stat_sub_folio(folio, NR_PAGETABLE);
} }
static inline void pgtable_pmd_page_dtor(struct page *page)
{
pagetable_pmd_dtor(page_ptdesc(page));
}
/* /*
* No scalability reason to split PUD locks yet, but follow the same pattern * No scalability reason to split PUD locks yet, but follow the same pattern
* as the PMD locks to make it easier if we decide to. The VM should not be * as the PMD locks to make it easier if we decide to. The VM should not be