@@ -2887,20 +2887,34 @@ static inline bool ptlock_init(struct ptdesc *ptdesc) { return true; }
28872887static inline void ptlock_free (struct ptdesc * ptdesc ) {}
28882888#endif /* USE_SPLIT_PTE_PTLOCKS */
28892889
2890- static inline bool pgtable_pte_page_ctor (struct page * page )
2890+ static inline bool pagetable_pte_ctor (struct ptdesc * ptdesc )
28912891{
2892- if (!ptlock_init (page_ptdesc (page )))
2892+ struct folio * folio = ptdesc_folio (ptdesc );
2893+
2894+ if (!ptlock_init (ptdesc ))
28932895 return false;
2894- __SetPageTable ( page );
2895- inc_lruvec_page_state ( page , NR_PAGETABLE );
2896+ __folio_set_pgtable ( folio );
2897+ lruvec_stat_add_folio ( folio , NR_PAGETABLE );
28962898 return true;
28972899}
28982900
2901+ static inline bool pgtable_pte_page_ctor (struct page * page )
2902+ {
2903+ return pagetable_pte_ctor (page_ptdesc (page ));
2904+ }
2905+
2906+ static inline void pagetable_pte_dtor (struct ptdesc * ptdesc )
2907+ {
2908+ struct folio * folio = ptdesc_folio (ptdesc );
2909+
2910+ ptlock_free (ptdesc );
2911+ __folio_clear_pgtable (folio );
2912+ lruvec_stat_sub_folio (folio , NR_PAGETABLE );
2913+ }
2914+
28992915static inline void pgtable_pte_page_dtor (struct page * page )
29002916{
2901- ptlock_free (page_ptdesc (page ));
2902- __ClearPageTable (page );
2903- dec_lruvec_page_state (page , NR_PAGETABLE );
2917+ pagetable_pte_dtor (page_ptdesc (page ));
29042918}
29052919
29062920pte_t * __pte_offset_map (pmd_t * pmd , unsigned long addr , pmd_t * pmdvalp );
@@ -2998,20 +3012,34 @@ static inline spinlock_t *pmd_lock(struct mm_struct *mm, pmd_t *pmd)
29983012 return ptl ;
29993013}
30003014
3001- static inline bool pgtable_pmd_page_ctor (struct page * page )
3015+ static inline bool pagetable_pmd_ctor (struct ptdesc * ptdesc )
30023016{
3003- if (!pmd_ptlock_init (page_ptdesc (page )))
3017+ struct folio * folio = ptdesc_folio (ptdesc );
3018+
3019+ if (!pmd_ptlock_init (ptdesc ))
30043020 return false;
3005- __SetPageTable ( page );
3006- inc_lruvec_page_state ( page , NR_PAGETABLE );
3021+ __folio_set_pgtable ( folio );
3022+ lruvec_stat_add_folio ( folio , NR_PAGETABLE );
30073023 return true;
30083024}
30093025
3026+ static inline bool pgtable_pmd_page_ctor (struct page * page )
3027+ {
3028+ return pagetable_pmd_ctor (page_ptdesc (page ));
3029+ }
3030+
3031+ static inline void pagetable_pmd_dtor (struct ptdesc * ptdesc )
3032+ {
3033+ struct folio * folio = ptdesc_folio (ptdesc );
3034+
3035+ pmd_ptlock_free (ptdesc );
3036+ __folio_clear_pgtable (folio );
3037+ lruvec_stat_sub_folio (folio , NR_PAGETABLE );
3038+ }
3039+
30103040static inline void pgtable_pmd_page_dtor (struct page * page )
30113041{
3012- pmd_ptlock_free (page_ptdesc (page ));
3013- __ClearPageTable (page );
3014- dec_lruvec_page_state (page , NR_PAGETABLE );
3042+ pagetable_pmd_dtor (page_ptdesc (page ));
30153043}
30163044
30173045/*
0 commit comments