diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-07-26 11:48:49 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-26 11:48:49 -0400 |
commit | c3cc99ff5d24e2eeaf7ec2032e720681916990e3 (patch) | |
tree | c3e74171bbbd2adde9d60b9db1c440415c8d2831 /mm/mmap.c | |
parent | 38ffbe66d59051fd9cfcfc8545f164700e2fa3bc (diff) | |
parent | 024e8ac04453b3525448c31ef39848cf675ba6db (diff) |
Merge branch 'linus' into x86/xen
Diffstat (limited to 'mm/mmap.c')
-rw-r--r-- | mm/mmap.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -32,6 +32,8 @@ | |||
32 | #include <asm/tlb.h> | 32 | #include <asm/tlb.h> |
33 | #include <asm/mmu_context.h> | 33 | #include <asm/mmu_context.h> |
34 | 34 | ||
35 | #include "internal.h" | ||
36 | |||
35 | #ifndef arch_mmap_check | 37 | #ifndef arch_mmap_check |
36 | #define arch_mmap_check(addr, len, flags) (0) | 38 | #define arch_mmap_check(addr, len, flags) (0) |
37 | #endif | 39 | #endif |
@@ -1108,6 +1110,9 @@ munmap_back: | |||
1108 | if (!may_expand_vm(mm, len >> PAGE_SHIFT)) | 1110 | if (!may_expand_vm(mm, len >> PAGE_SHIFT)) |
1109 | return -ENOMEM; | 1111 | return -ENOMEM; |
1110 | 1112 | ||
1113 | if (flags & MAP_NORESERVE) | ||
1114 | vm_flags |= VM_NORESERVE; | ||
1115 | |||
1111 | if (accountable && (!(flags & MAP_NORESERVE) || | 1116 | if (accountable && (!(flags & MAP_NORESERVE) || |
1112 | sysctl_overcommit_memory == OVERCOMMIT_NEVER)) { | 1117 | sysctl_overcommit_memory == OVERCOMMIT_NEVER)) { |
1113 | if (vm_flags & VM_SHARED) { | 1118 | if (vm_flags & VM_SHARED) { |
@@ -1763,7 +1768,7 @@ static void unmap_region(struct mm_struct *mm, | |||
1763 | update_hiwater_rss(mm); | 1768 | update_hiwater_rss(mm); |
1764 | unmap_vmas(&tlb, vma, start, end, &nr_accounted, NULL); | 1769 | unmap_vmas(&tlb, vma, start, end, &nr_accounted, NULL); |
1765 | vm_unacct_memory(nr_accounted); | 1770 | vm_unacct_memory(nr_accounted); |
1766 | free_pgtables(&tlb, vma, prev? prev->vm_end: FIRST_USER_ADDRESS, | 1771 | free_pgtables(tlb, vma, prev? prev->vm_end: FIRST_USER_ADDRESS, |
1767 | next? next->vm_start: 0); | 1772 | next? next->vm_start: 0); |
1768 | tlb_finish_mmu(tlb, start, end); | 1773 | tlb_finish_mmu(tlb, start, end); |
1769 | } | 1774 | } |
@@ -1807,7 +1812,8 @@ int split_vma(struct mm_struct * mm, struct vm_area_struct * vma, | |||
1807 | struct mempolicy *pol; | 1812 | struct mempolicy *pol; |
1808 | struct vm_area_struct *new; | 1813 | struct vm_area_struct *new; |
1809 | 1814 | ||
1810 | if (is_vm_hugetlb_page(vma) && (addr & ~HPAGE_MASK)) | 1815 | if (is_vm_hugetlb_page(vma) && (addr & |
1816 | ~(huge_page_mask(hstate_vma(vma))))) | ||
1811 | return -EINVAL; | 1817 | return -EINVAL; |
1812 | 1818 | ||
1813 | if (mm->map_count >= sysctl_max_map_count) | 1819 | if (mm->map_count >= sysctl_max_map_count) |
@@ -2063,7 +2069,7 @@ void exit_mmap(struct mm_struct *mm) | |||
2063 | /* Use -1 here to ensure all VMAs in the mm are unmapped */ | 2069 | /* Use -1 here to ensure all VMAs in the mm are unmapped */ |
2064 | end = unmap_vmas(&tlb, vma, 0, -1, &nr_accounted, NULL); | 2070 | end = unmap_vmas(&tlb, vma, 0, -1, &nr_accounted, NULL); |
2065 | vm_unacct_memory(nr_accounted); | 2071 | vm_unacct_memory(nr_accounted); |
2066 | free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0); | 2072 | free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0); |
2067 | tlb_finish_mmu(tlb, 0, end); | 2073 | tlb_finish_mmu(tlb, 0, end); |
2068 | 2074 | ||
2069 | /* | 2075 | /* |