summaryrefslogtreecommitdiff
path: root/kernel/fork.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-10-11 15:39:38 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-10-11 15:39:38 +0200
commit8af4b3d7044d83c5426da6e45a9c7948bc7fa231 (patch)
tree76e15a6cea6b526fe30c679f6e9bf60b08acf983 /kernel/fork.c
parenta5950f2617f71a3dce16520c4907bcdb31e654ba (diff)
parentc2ebf788f927dcca72beead19fab5f5aba79a098 (diff)
Merge branch 'acpi-pm' into pm-sleep
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index 10646182440f..e702cb9ffbd8 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -946,6 +946,24 @@ void mmput(struct mm_struct *mm)
}
EXPORT_SYMBOL_GPL(mmput);
+#ifdef CONFIG_MMU
+static void mmput_async_fn(struct work_struct *work)
+{
+ struct mm_struct *mm = container_of(work, struct mm_struct,
+ async_put_work);
+
+ __mmput(mm);
+}
+
+void mmput_async(struct mm_struct *mm)
+{
+ if (atomic_dec_and_test(&mm->mm_users)) {
+ INIT_WORK(&mm->async_put_work, mmput_async_fn);
+ schedule_work(&mm->async_put_work);
+ }
+}
+#endif
+
/**
* set_mm_exe_file - change a reference to the mm's executable file
*