aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/sched.h
diff options
context:
space:
mode:
authorVegard Nossum <vegard.nossum@oracle.com>2017-02-27 17:30:07 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-02-27 21:43:48 -0500
commitf1f1007644ffc8051a4c11427d58b1967ae7b75a (patch)
treee7e590cb1baa494b963d81b967a3f98d3c56f33e /include/linux/sched.h
parent522b837c672eba9e9fb69f9f52bced0256dc6697 (diff)
mm: add new mmgrab() helper
Apart from adding the helper function itself, the rest of the kernel is converted mechanically using: git grep -l 'atomic_inc.*mm_count' | xargs sed -i 's/atomic_inc(&\(.*\)->mm_count);/mmgrab\(\1\);/' git grep -l 'atomic_inc.*mm_count' | xargs sed -i 's/atomic_inc(&\(.*\)\.mm_count);/mmgrab\(\&\1\);/' This is needed for a later patch that hooks into the helper, but might be a worthwhile cleanup on its own. (Michal Hocko provided most of the kerneldoc comment.) Link: http://lkml.kernel.org/r/20161218123229.22952-1-vegard.nossum@oracle.com Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com> Acked-by: Michal Hocko <mhocko@suse.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/sched.h')
-rw-r--r--include/linux/sched.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 451e241f32c5..7cfa5546c840 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -2904,6 +2904,28 @@ static inline unsigned long sigsp(unsigned long sp, struct ksignal *ksig)
2904 */ 2904 */
2905extern struct mm_struct * mm_alloc(void); 2905extern struct mm_struct * mm_alloc(void);
2906 2906
2907/**
2908 * mmgrab() - Pin a &struct mm_struct.
2909 * @mm: The &struct mm_struct to pin.
2910 *
2911 * Make sure that @mm will not get freed even after the owning task
2912 * exits. This doesn't guarantee that the associated address space
2913 * will still exist later on and mmget_not_zero() has to be used before
2914 * accessing it.
2915 *
2916 * This is a preferred way to to pin @mm for a longer/unbounded amount
2917 * of time.
2918 *
2919 * Use mmdrop() to release the reference acquired by mmgrab().
2920 *
2921 * See also <Documentation/vm/active_mm.txt> for an in-depth explanation
2922 * of &mm_struct.mm_count vs &mm_struct.mm_users.
2923 */
2924static inline void mmgrab(struct mm_struct *mm)
2925{
2926 atomic_inc(&mm->mm_count);
2927}
2928
2907/* mmdrop drops the mm and the page tables */ 2929/* mmdrop drops the mm and the page tables */
2908extern void __mmdrop(struct mm_struct *); 2930extern void __mmdrop(struct mm_struct *);
2909static inline void mmdrop(struct mm_struct *mm) 2931static inline void mmdrop(struct mm_struct *mm)