mm: introduce wrappers to access mm->nr_ptes

Let's add wrappers for ->nr_ptes with the same interface as for nr_pmd
and nr_pud.

The patch also makes nr_ptes accounting dependent onto CONFIG_MMU.  Page
table accounting doesn't make sense if you don't have page tables.

It's preparation for consolidation of page-table counters in mm_struct.

Link: http://lkml.kernel.org/r/20171006100651.44742-1-kirill.shutemov@linux.intel.com
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Kirill A. Shutemov
2017-11-15 17:35:37 -08:00
committed by Linus Torvalds
parent b4e98d9ac7
commit c4812909f5
12 changed files with 54 additions and 21 deletions

View File

@@ -1680,6 +1680,38 @@ static inline void mm_dec_nr_pmds(struct mm_struct *mm)
}
#endif
#ifdef CONFIG_MMU
static inline void mm_nr_ptes_init(struct mm_struct *mm)
{
atomic_long_set(&mm->nr_ptes, 0);
}
static inline unsigned long mm_nr_ptes(const struct mm_struct *mm)
{
return atomic_long_read(&mm->nr_ptes);
}
static inline void mm_inc_nr_ptes(struct mm_struct *mm)
{
atomic_long_inc(&mm->nr_ptes);
}
static inline void mm_dec_nr_ptes(struct mm_struct *mm)
{
atomic_long_dec(&mm->nr_ptes);
}
#else
static inline void mm_nr_ptes_init(struct mm_struct *mm) {}
static inline unsigned long mm_nr_ptes(const struct mm_struct *mm)
{
return 0;
}
static inline void mm_inc_nr_ptes(struct mm_struct *mm) {}
static inline void mm_dec_nr_ptes(struct mm_struct *mm) {}
#endif
int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address);
int __pte_alloc_kernel(pmd_t *pmd, unsigned long address);