[Devel] [PATCH rh7] Revert "mm: account all page tables for mm"
Vladimir Davydov
vdavydov at parallels.com
Mon Sep 7 02:36:24 PDT 2015
This reverts commit 86c4127b5cbdcf9a3d182c53d48159153af40c40.
This commit added mm_struct->nr_ptds, which counts the number of page
table directories used by a process. It was ported from PCS6.
In PCS6 it is used for precharging page tables to UB_KMEMSIZE on fork.
Plus, the counter is reported in /proc/pid/status as VmPTD.
I'm not going to use this counter in the upcoming implementation of page
tables accounting, so I'm reverting the patch that brought it. Regarding
VmPTD, there is a mainstream commit dc6c9a35b66b5 ("mm: account pmd page
tables to the process"), which adds a similar statistic - VmPMD. If we
need it, we can always backport the commit.
Signed-off-by: Vladimir Davydov <vdavydov at parallels.com>
---
arch/x86/mm/pgtable.c | 5 -----
fs/proc/task_mmu.c | 2 --
include/linux/mm_types.h | 1 -
kernel/fork.c | 1 -
mm/memory.c | 18 +++---------------
5 files changed, 3 insertions(+), 24 deletions(-)
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
index 99b13683c06a..d5aa594e6332 100644
--- a/arch/x86/mm/pgtable.c
+++ b/arch/x86/mm/pgtable.c
@@ -246,7 +246,6 @@ static void pgd_mop_up_pmds(struct mm_struct *mm, pgd_t *pgdp)
paravirt_release_pmd(pgd_val(pgd) >> PAGE_SHIFT);
pmd_free(mm, pmd);
- mm->nr_ptds--;
}
}
}
@@ -271,7 +270,6 @@ static void pgd_prepopulate_pmd(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmds[])
sizeof(pmd_t) * PTRS_PER_PMD);
pud_populate(mm, pud, pmd);
- mm->nr_ptds++;
}
}
@@ -305,8 +303,6 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
spin_unlock(&pgd_lock);
- mm->nr_ptds++;
-
return pgd;
out_free_pmds:
@@ -323,7 +319,6 @@ void pgd_free(struct mm_struct *mm, pgd_t *pgd)
pgd_dtor(pgd);
paravirt_pgd_free(mm, pgd);
free_page((unsigned long)pgd);
- mm->nr_ptds--;
}
/*
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index e3d72d35dfef..45179ba7a441 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -53,7 +53,6 @@ void task_mem(struct seq_file *m, struct mm_struct *mm)
"VmExe:\t%8lu kB\n"
"VmLib:\t%8lu kB\n"
"VmPTE:\t%8lu kB\n"
- "VmPTD:\t%8lu kB\n"
"VmSwap:\t%8lu kB\n",
hiwater_vm << (PAGE_SHIFT-10),
total_vm << (PAGE_SHIFT-10),
@@ -65,7 +64,6 @@ void task_mem(struct seq_file *m, struct mm_struct *mm)
mm->stack_vm << (PAGE_SHIFT-10), text, lib,
(PTRS_PER_PTE * sizeof(pte_t) *
atomic_long_read(&mm->nr_ptes)) >> 10,
- mm->nr_ptds << (PAGE_SHIFT-10),
swap << (PAGE_SHIFT-10));
}
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index b7bd8aac1d39..96adb9428864 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -360,7 +360,6 @@ struct mm_struct {
atomic_t mm_users; /* How many users with user space? */
atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */
atomic_long_t nr_ptes; /* Page table pages */
- unsigned long nr_ptds;
int map_count; /* number of VMAs */
spinlock_t page_table_lock; /* Protects page tables and some counters */
diff --git a/kernel/fork.c b/kernel/fork.c
index e2ea938603fd..505fa21d70aa 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -577,7 +577,6 @@ static struct mm_struct *mm_init(struct mm_struct *mm, struct task_struct *p)
INIT_LIST_HEAD(&mm->mmlist);
mm->core_state = NULL;
atomic_long_set(&mm->nr_ptes, 0);
- mm->nr_ptds = 0;
memset(&mm->rss_stat, 0, sizeof(mm->rss_stat));
spin_lock_init(&mm->page_table_lock);
mm->free_area_cache = TASK_UNMAPPED_BASE;
diff --git a/mm/memory.c b/mm/memory.c
index a1c1000bdcef..3fba5739780a 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -448,9 +448,6 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
pmd = pmd_offset(pud, start);
pud_clear(pud);
pmd_free_tlb(tlb, pmd, start);
-#ifndef __PAGETABLE_PMD_FOLDED
- tlb->mm->nr_ptds--;
-#endif
}
static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
@@ -484,9 +481,6 @@ static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
pud = pud_offset(pgd, start);
pgd_clear(pgd);
pud_free_tlb(tlb, pud, start);
-#ifndef __PAGETABLE_PUD_FOLDED
- tlb->mm->nr_ptds--;
-#endif
}
/*
@@ -3832,10 +3826,8 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
spin_lock(&mm->page_table_lock);
if (pgd_present(*pgd)) /* Another has populated it */
pud_free(mm, new);
- else {
+ else
pgd_populate(mm, pgd, new);
- mm->nr_ptds++;
- }
spin_unlock(&mm->page_table_lock);
return 0;
}
@@ -3858,17 +3850,13 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
#ifndef __ARCH_HAS_4LEVEL_HACK
if (pud_present(*pud)) /* Another has populated it */
pmd_free(mm, new);
- else {
+ else
pud_populate(mm, pud, new);
- mm->nr_ptds++;
- }
#else
if (pgd_present(*pud)) /* Another has populated it */
pmd_free(mm, new);
- else {
+ else
pgd_populate(mm, pud, new);
- mm->nr_ptds++;
- }
#endif /* __ARCH_HAS_4LEVEL_HACK */
spin_unlock(&mm->page_table_lock);
return 0;
--
2.1.4
More information about the Devel
mailing list