diff options
Diffstat (limited to 'mm/nommu.c')
-rw-r--r-- | mm/nommu.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/mm/nommu.c b/mm/nommu.c index 541bed64e348..1a19fb3b0463 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
@@ -214,6 +214,39 @@ long get_user_pages(struct task_struct *tsk, struct mm_struct *mm, | |||
214 | } | 214 | } |
215 | EXPORT_SYMBOL(get_user_pages); | 215 | EXPORT_SYMBOL(get_user_pages); |
216 | 216 | ||
217 | long get_user_pages_locked(struct task_struct *tsk, struct mm_struct *mm, | ||
218 | unsigned long start, unsigned long nr_pages, | ||
219 | int write, int force, struct page **pages, | ||
220 | int *locked) | ||
221 | { | ||
222 | return get_user_pages(tsk, mm, start, nr_pages, write, force, | ||
223 | pages, NULL); | ||
224 | } | ||
225 | EXPORT_SYMBOL(get_user_pages_locked); | ||
226 | |||
227 | long __get_user_pages_unlocked(struct task_struct *tsk, struct mm_struct *mm, | ||
228 | unsigned long start, unsigned long nr_pages, | ||
229 | int write, int force, struct page **pages, | ||
230 | unsigned int gup_flags) | ||
231 | { | ||
232 | long ret; | ||
233 | down_read(&mm->mmap_sem); | ||
234 | ret = get_user_pages(tsk, mm, start, nr_pages, write, force, | ||
235 | pages, NULL); | ||
236 | up_read(&mm->mmap_sem); | ||
237 | return ret; | ||
238 | } | ||
239 | EXPORT_SYMBOL(__get_user_pages_unlocked); | ||
240 | |||
241 | long get_user_pages_unlocked(struct task_struct *tsk, struct mm_struct *mm, | ||
242 | unsigned long start, unsigned long nr_pages, | ||
243 | int write, int force, struct page **pages) | ||
244 | { | ||
245 | return __get_user_pages_unlocked(tsk, mm, start, nr_pages, write, | ||
246 | force, pages, 0); | ||
247 | } | ||
248 | EXPORT_SYMBOL(get_user_pages_unlocked); | ||
249 | |||
217 | /** | 250 | /** |
218 | * follow_pfn - look up PFN at a user virtual address | 251 | * follow_pfn - look up PFN at a user virtual address |
219 | * @vma: memory mapping | 252 | * @vma: memory mapping |
@@ -1895,7 +1928,7 @@ EXPORT_SYMBOL(unmap_mapping_range); | |||
1895 | */ | 1928 | */ |
1896 | int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin) | 1929 | int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin) |
1897 | { | 1930 | { |
1898 | unsigned long free, allowed, reserve; | 1931 | long free, allowed, reserve; |
1899 | 1932 | ||
1900 | vm_acct_memory(pages); | 1933 | vm_acct_memory(pages); |
1901 | 1934 | ||
@@ -1959,7 +1992,7 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin) | |||
1959 | */ | 1992 | */ |
1960 | if (mm) { | 1993 | if (mm) { |
1961 | reserve = sysctl_user_reserve_kbytes >> (PAGE_SHIFT - 10); | 1994 | reserve = sysctl_user_reserve_kbytes >> (PAGE_SHIFT - 10); |
1962 | allowed -= min(mm->total_vm / 32, reserve); | 1995 | allowed -= min_t(long, mm->total_vm / 32, reserve); |
1963 | } | 1996 | } |
1964 | 1997 | ||
1965 | if (percpu_counter_read_positive(&vm_committed_as) < allowed) | 1998 | if (percpu_counter_read_positive(&vm_committed_as) < allowed) |