diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/mmap.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/mempolicy.h> | 28 | #include <linux/mempolicy.h> |
29 | #include <linux/rmap.h> | 29 | #include <linux/rmap.h> |
30 | #include <linux/mmu_notifier.h> | 30 | #include <linux/mmu_notifier.h> |
31 | #include <linux/perf_counter.h> | ||
31 | 32 | ||
32 | #include <asm/uaccess.h> | 33 | #include <asm/uaccess.h> |
33 | #include <asm/cacheflush.h> | 34 | #include <asm/cacheflush.h> |
@@ -1223,6 +1224,9 @@ munmap_back: | |||
1223 | if (correct_wcount) | 1224 | if (correct_wcount) |
1224 | atomic_inc(&inode->i_writecount); | 1225 | atomic_inc(&inode->i_writecount); |
1225 | out: | 1226 | out: |
1227 | if (vm_flags & VM_EXEC) | ||
1228 | perf_counter_mmap(addr, len, pgoff, file); | ||
1229 | |||
1226 | mm->total_vm += len >> PAGE_SHIFT; | 1230 | mm->total_vm += len >> PAGE_SHIFT; |
1227 | vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT); | 1231 | vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT); |
1228 | if (vm_flags & VM_LOCKED) { | 1232 | if (vm_flags & VM_LOCKED) { |
@@ -1756,6 +1760,12 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma) | |||
1756 | do { | 1760 | do { |
1757 | long nrpages = vma_pages(vma); | 1761 | long nrpages = vma_pages(vma); |
1758 | 1762 | ||
1763 | if (vma->vm_flags & VM_EXEC) { | ||
1764 | perf_counter_munmap(vma->vm_start, | ||
1765 | nrpages << PAGE_SHIFT, | ||
1766 | vma->vm_pgoff, vma->vm_file); | ||
1767 | } | ||
1768 | |||
1759 | mm->total_vm -= nrpages; | 1769 | mm->total_vm -= nrpages; |
1760 | vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages); | 1770 | vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages); |
1761 | vma = remove_vma(vma); | 1771 | vma = remove_vma(vma); |