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>
This commit is contained in:

committed by
Linus Torvalds

parent
522b837c67
commit
f1f1007644
@@ -2904,6 +2904,28 @@ static inline unsigned long sigsp(unsigned long sp, struct ksignal *ksig)
|
||||
*/
|
||||
extern struct mm_struct * mm_alloc(void);
|
||||
|
||||
/**
|
||||
* mmgrab() - Pin a &struct mm_struct.
|
||||
* @mm: The &struct mm_struct to pin.
|
||||
*
|
||||
* Make sure that @mm will not get freed even after the owning task
|
||||
* exits. This doesn't guarantee that the associated address space
|
||||
* will still exist later on and mmget_not_zero() has to be used before
|
||||
* accessing it.
|
||||
*
|
||||
* This is a preferred way to to pin @mm for a longer/unbounded amount
|
||||
* of time.
|
||||
*
|
||||
* Use mmdrop() to release the reference acquired by mmgrab().
|
||||
*
|
||||
* See also <Documentation/vm/active_mm.txt> for an in-depth explanation
|
||||
* of &mm_struct.mm_count vs &mm_struct.mm_users.
|
||||
*/
|
||||
static inline void mmgrab(struct mm_struct *mm)
|
||||
{
|
||||
atomic_inc(&mm->mm_count);
|
||||
}
|
||||
|
||||
/* mmdrop drops the mm and the page tables */
|
||||
extern void __mmdrop(struct mm_struct *);
|
||||
static inline void mmdrop(struct mm_struct *mm)
|
||||
|
Reference in New Issue
Block a user