|
@@ -112,6 +112,7 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
|
|
|
pmd_t *pmd;
|
|
|
unsigned long next;
|
|
|
unsigned long pages = 0;
|
|
|
+ unsigned long nr_huge_updates = 0;
|
|
|
|
|
|
pmd = pmd_offset(pud, addr);
|
|
|
do {
|
|
@@ -126,9 +127,10 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
|
|
|
newprot, prot_numa);
|
|
|
|
|
|
if (nr_ptes) {
|
|
|
- if (nr_ptes == HPAGE_PMD_NR)
|
|
|
- pages++;
|
|
|
-
|
|
|
+ if (nr_ptes == HPAGE_PMD_NR) {
|
|
|
+ pages += HPAGE_PMD_NR;
|
|
|
+ nr_huge_updates++;
|
|
|
+ }
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
@@ -141,6 +143,8 @@ static inline unsigned long change_pmd_range(struct vm_area_struct *vma,
|
|
|
pages += this_pages;
|
|
|
} while (pmd++, addr = next, addr != end);
|
|
|
|
|
|
+ if (nr_huge_updates)
|
|
|
+ count_vm_numa_events(NUMA_HUGE_PTE_UPDATES, nr_huge_updates);
|
|
|
return pages;
|
|
|
}
|
|
|
|