diff options
Diffstat (limited to 'mm/nommu.c')
-rw-r--r-- | mm/nommu.c | 41 |
1 files changed, 16 insertions, 25 deletions
diff --git a/mm/nommu.c b/mm/nommu.c index 9edc897a3970..b982290fd962 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -13,7 +13,7 @@ | |||
13 | * Copyright (c) 2007-2010 Paul Mundt <lethal@linux-sh.org> | 13 | * Copyright (c) 2007-2010 Paul Mundt <lethal@linux-sh.org> |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <linux/module.h> | 16 | #include <linux/export.h> |
17 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
18 | #include <linux/mman.h> | 18 | #include <linux/mman.h> |
19 | #include <linux/swap.h> | 19 | #include <linux/swap.h> |
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/pagemap.h> | 22 | #include <linux/pagemap.h> |
23 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
24 | #include <linux/vmalloc.h> | 24 | #include <linux/vmalloc.h> |
25 | #include <linux/tracehook.h> | ||
26 | #include <linux/blkdev.h> | 25 | #include <linux/blkdev.h> |
27 | #include <linux/backing-dev.h> | 26 | #include <linux/backing-dev.h> |
28 | #include <linux/mount.h> | 27 | #include <linux/mount.h> |
@@ -455,7 +454,7 @@ void __attribute__((weak)) vmalloc_sync_all(void) | |||
455 | * between processes, it syncs the pagetable across all | 454 | * between processes, it syncs the pagetable across all |
456 | * processes. | 455 | * processes. |
457 | */ | 456 | */ |
458 | struct vm_struct *alloc_vm_area(size_t size) | 457 | struct vm_struct *alloc_vm_area(size_t size, pte_t **ptes) |
459 | { | 458 | { |
460 | BUG(); | 459 | BUG(); |
461 | return NULL; | 460 | return NULL; |
@@ -1087,7 +1086,7 @@ static unsigned long determine_vm_flags(struct file *file, | |||
1087 | * it's being traced - otherwise breakpoints set in it may interfere | 1086 | * it's being traced - otherwise breakpoints set in it may interfere |
1088 | * with another untraced process | 1087 | * with another untraced process |
1089 | */ | 1088 | */ |
1090 | if ((flags & MAP_PRIVATE) && tracehook_expect_breakpoints(current)) | 1089 | if ((flags & MAP_PRIVATE) && current->ptrace) |
1091 | vm_flags &= ~VM_MAYSHARE; | 1090 | vm_flags &= ~VM_MAYSHARE; |
1092 | 1091 | ||
1093 | return vm_flags; | 1092 | return vm_flags; |
@@ -1885,9 +1884,17 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin) | |||
1885 | return 0; | 1884 | return 0; |
1886 | 1885 | ||
1887 | if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) { | 1886 | if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) { |
1888 | unsigned long n; | 1887 | free = global_page_state(NR_FREE_PAGES); |
1888 | free += global_page_state(NR_FILE_PAGES); | ||
1889 | |||
1890 | /* | ||
1891 | * shmem pages shouldn't be counted as free in this | ||
1892 | * case, they can't be purged, only swapped out, and | ||
1893 | * that won't affect the overall amount of available | ||
1894 | * memory in the system. | ||
1895 | */ | ||
1896 | free -= global_page_state(NR_SHMEM); | ||
1889 | 1897 | ||
1890 | free = global_page_state(NR_FILE_PAGES); | ||
1891 | free += nr_swap_pages; | 1898 | free += nr_swap_pages; |
1892 | 1899 | ||
1893 | /* | 1900 | /* |
@@ -1899,34 +1906,18 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin) | |||
1899 | free += global_page_state(NR_SLAB_RECLAIMABLE); | 1906 | free += global_page_state(NR_SLAB_RECLAIMABLE); |
1900 | 1907 | ||
1901 | /* | 1908 | /* |
1902 | * Leave the last 3% for root | ||
1903 | */ | ||
1904 | if (!cap_sys_admin) | ||
1905 | free -= free / 32; | ||
1906 | |||
1907 | if (free > pages) | ||
1908 | return 0; | ||
1909 | |||
1910 | /* | ||
1911 | * nr_free_pages() is very expensive on large systems, | ||
1912 | * only call if we're about to fail. | ||
1913 | */ | ||
1914 | n = nr_free_pages(); | ||
1915 | |||
1916 | /* | ||
1917 | * Leave reserved pages. The pages are not for anonymous pages. | 1909 | * Leave reserved pages. The pages are not for anonymous pages. |
1918 | */ | 1910 | */ |
1919 | if (n <= totalreserve_pages) | 1911 | if (free <= totalreserve_pages) |
1920 | goto error; | 1912 | goto error; |
1921 | else | 1913 | else |
1922 | n -= totalreserve_pages; | 1914 | free -= totalreserve_pages; |
1923 | 1915 | ||
1924 | /* | 1916 | /* |
1925 | * Leave the last 3% for root | 1917 | * Leave the last 3% for root |
1926 | */ | 1918 | */ |
1927 | if (!cap_sys_admin) | 1919 | if (!cap_sys_admin) |
1928 | n -= n / 32; | 1920 | free -= free / 32; |
1929 | free += n; | ||
1930 | 1921 | ||
1931 | if (free > pages) | 1922 | if (free > pages) |
1932 | return 0; | 1923 | return 0; |