Skip to content

Commit 11e2400

Browse files
kevin-brodsky-armakpm00
authored andcommitted
mm: move common part of pagetable_*_ctor to helper
Patch series "Account page tables at all levels". This series should be considered in conjunction with Qi's series [1]. Together, they ensure that page table ctor/dtor are called at all levels (PTE to PGD) and all architectures, where page tables are regular pages. Besides the improvement in accounting and general cleanup, this also create a single place where construction/destruction hooks can be called for all page tables, namely the now-generic pagetable_dtor() introduced by Qi, and __pagetable_ctor() introduced in this series. [1] https://lore.kernel.org/linux-mm/[email protected]/ This patch (of 6): pagetable_*_ctor all have the same basic implementation. Move the common part to a helper to reduce duplication. Link: https://lkml.kernel.org/r/[email protected] Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Kevin Brodsky <[email protected]> Acked-by: Dave Hansen <[email protected]> Acked-by: Qi Zheng <[email protected]> Cc: Andy Lutomirski <[email protected]> Cc: Catalin Marinas <[email protected]> Cc: Linus Walleij <[email protected]> Cc: Matthew Wilcox (Oracle) <[email protected]> Cc: Mike Rapoport (Microsoft) <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Ryan Roberts <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Will Deacon <[email protected]> Cc: Ingo Molnar <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent fe1679e commit 11e2400

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

include/linux/mm.h

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2992,6 +2992,14 @@ static inline bool ptlock_init(struct ptdesc *ptdesc) { return true; }
29922992
static inline void ptlock_free(struct ptdesc *ptdesc) {}
29932993
#endif /* defined(CONFIG_SPLIT_PTE_PTLOCKS) */
29942994

2995+
static inline void __pagetable_ctor(struct ptdesc *ptdesc)
2996+
{
2997+
struct folio *folio = ptdesc_folio(ptdesc);
2998+
2999+
__folio_set_pgtable(folio);
3000+
lruvec_stat_add_folio(folio, NR_PAGETABLE);
3001+
}
3002+
29953003
static inline void pagetable_dtor(struct ptdesc *ptdesc)
29963004
{
29973005
struct folio *folio = ptdesc_folio(ptdesc);
@@ -3009,12 +3017,9 @@ static inline void pagetable_dtor_free(struct ptdesc *ptdesc)
30093017

30103018
static inline bool pagetable_pte_ctor(struct ptdesc *ptdesc)
30113019
{
3012-
struct folio *folio = ptdesc_folio(ptdesc);
3013-
30143020
if (!ptlock_init(ptdesc))
30153021
return false;
3016-
__folio_set_pgtable(folio);
3017-
lruvec_stat_add_folio(folio, NR_PAGETABLE);
3022+
__pagetable_ctor(ptdesc);
30183023
return true;
30193024
}
30203025

@@ -3118,13 +3123,10 @@ static inline spinlock_t *pmd_lock(struct mm_struct *mm, pmd_t *pmd)
31183123

31193124
static inline bool pagetable_pmd_ctor(struct ptdesc *ptdesc)
31203125
{
3121-
struct folio *folio = ptdesc_folio(ptdesc);
3122-
31233126
if (!pmd_ptlock_init(ptdesc))
31243127
return false;
3125-
__folio_set_pgtable(folio);
31263128
ptdesc_pmd_pts_init(ptdesc);
3127-
lruvec_stat_add_folio(folio, NR_PAGETABLE);
3129+
__pagetable_ctor(ptdesc);
31283130
return true;
31293131
}
31303132

@@ -3149,18 +3151,12 @@ static inline spinlock_t *pud_lock(struct mm_struct *mm, pud_t *pud)
31493151

31503152
static inline void pagetable_pud_ctor(struct ptdesc *ptdesc)
31513153
{
3152-
struct folio *folio = ptdesc_folio(ptdesc);
3153-
3154-
__folio_set_pgtable(folio);
3155-
lruvec_stat_add_folio(folio, NR_PAGETABLE);
3154+
__pagetable_ctor(ptdesc);
31563155
}
31573156

31583157
static inline void pagetable_p4d_ctor(struct ptdesc *ptdesc)
31593158
{
3160-
struct folio *folio = ptdesc_folio(ptdesc);
3161-
3162-
__folio_set_pgtable(folio);
3163-
lruvec_stat_add_folio(folio, NR_PAGETABLE);
3159+
__pagetable_ctor(ptdesc);
31643160
}
31653161

31663162
extern void __init pagecache_init(void);

0 commit comments

Comments
 (0)