diff options
Diffstat (limited to 'arch/arm/mm/pgd.c')
-rw-r--r-- | arch/arm/mm/pgd.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm/mm/pgd.c b/arch/arm/mm/pgd.c index 249379535be2..a3681f11dd9f 100644 --- a/arch/arm/mm/pgd.c +++ b/arch/arm/mm/pgd.c | |||
@@ -97,6 +97,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm) | |||
97 | 97 | ||
98 | no_pte: | 98 | no_pte: |
99 | pmd_free(mm, new_pmd); | 99 | pmd_free(mm, new_pmd); |
100 | mm_dec_nr_pmds(mm); | ||
100 | no_pmd: | 101 | no_pmd: |
101 | pud_free(mm, new_pud); | 102 | pud_free(mm, new_pud); |
102 | no_pud: | 103 | no_pud: |
@@ -130,9 +131,11 @@ void pgd_free(struct mm_struct *mm, pgd_t *pgd_base) | |||
130 | pte = pmd_pgtable(*pmd); | 131 | pte = pmd_pgtable(*pmd); |
131 | pmd_clear(pmd); | 132 | pmd_clear(pmd); |
132 | pte_free(mm, pte); | 133 | pte_free(mm, pte); |
134 | atomic_long_dec(&mm->nr_ptes); | ||
133 | no_pmd: | 135 | no_pmd: |
134 | pud_clear(pud); | 136 | pud_clear(pud); |
135 | pmd_free(mm, pmd); | 137 | pmd_free(mm, pmd); |
138 | mm_dec_nr_pmds(mm); | ||
136 | no_pud: | 139 | no_pud: |
137 | pgd_clear(pgd); | 140 | pgd_clear(pgd); |
138 | pud_free(mm, pud); | 141 | pud_free(mm, pud); |
@@ -152,6 +155,7 @@ no_pgd: | |||
152 | pmd = pmd_offset(pud, 0); | 155 | pmd = pmd_offset(pud, 0); |
153 | pud_clear(pud); | 156 | pud_clear(pud); |
154 | pmd_free(mm, pmd); | 157 | pmd_free(mm, pmd); |
158 | mm_dec_nr_pmds(mm); | ||
155 | pgd_clear(pgd); | 159 | pgd_clear(pgd); |
156 | pud_free(mm, pud); | 160 | pud_free(mm, pud); |
157 | } | 161 | } |