Merge tag 'backport/v3.14.24-ltsi-rc1/sata-rcar-to-v3.18-rc5' into backport/v3.14...
[platform/adaptation/renesas_rcar/renesas_kernel.git] / mm / util.c
index 808f375..c1010cb 100644 (file)
--- a/mm/util.c
+++ b/mm/util.c
@@ -275,17 +275,14 @@ pid_t vm_is_stack(struct task_struct *task,
 
        if (in_group) {
                struct task_struct *t;
-               rcu_read_lock();
-               if (!pid_alive(task))
-                       goto done;
 
-               t = task;
-               do {
+               rcu_read_lock();
+               for_each_thread(task, t) {
                        if (vm_is_stack_for_task(t, vma)) {
                                ret = t->pid;
                                goto done;
                        }
-               } while_each_thread(task, t);
+               }
 done:
                rcu_read_unlock();
        }
@@ -404,13 +401,45 @@ struct address_space *page_mapping(struct page *page)
        return mapping;
 }
 
+int overcommit_ratio_handler(struct ctl_table *table, int write,
+                            void __user *buffer, size_t *lenp,
+                            loff_t *ppos)
+{
+       int ret;
+
+       ret = proc_dointvec(table, write, buffer, lenp, ppos);
+       if (ret == 0 && write)
+               sysctl_overcommit_kbytes = 0;
+       return ret;
+}
+
+int overcommit_kbytes_handler(struct ctl_table *table, int write,
+                            void __user *buffer, size_t *lenp,
+                            loff_t *ppos)
+{
+       int ret;
+
+       ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
+       if (ret == 0 && write)
+               sysctl_overcommit_ratio = 0;
+       return ret;
+}
+
 /*
  * Committed memory limit enforced when OVERCOMMIT_NEVER policy is used
  */
 unsigned long vm_commit_limit(void)
 {
-       return ((totalram_pages - hugetlb_total_pages())
-               * sysctl_overcommit_ratio / 100) + total_swap_pages;
+       unsigned long allowed;
+
+       if (sysctl_overcommit_kbytes)
+               allowed = sysctl_overcommit_kbytes >> (PAGE_SHIFT - 10);
+       else
+               allowed = ((totalram_pages - hugetlb_total_pages())
+                          * sysctl_overcommit_ratio / 100);
+       allowed += total_swap_pages;
+
+       return allowed;
 }