]> Pileus Git - ~andy/linux/blobdiff - mm/mprotect.c
mm: numa: return the number of base pages altered by protection changes
[~andy/linux] / mm / mprotect.c
index a597f2ffcd6fc873a5f5b9779e4e79ac022bb2fe..26667971c824b08ca3dae7188a965e1e4efe0b79 100644 (file)
@@ -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;
 }