Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> writes: > This simple patch adds a hook for the mmput in exit_mm. This allows > archs to perform the mmput in custom ways if desired (e.g. > asynchronously) > > No functional change intended. Ouch! No. You changes don't include an architecture taking advantage of this so there is not way to see how this is used in practice and maintain the code. Further you are making the generic code much harder to read and follow replacing generic code with something random that some buggy architecture implements that no one understands. Saying "some buggy architecture implements and no one understands" is a bit hyperbole but that is how these hooks feel when digging in to changing the code. It takes weeks to months to read through ask questions etc to clean hooks like this up and change the code in an appropriate way. As things are ill specified like this really do need change eventually. So please use much more targeted routines for architecture code to call. Especially when dealing with something as fundamental as the lifetime of a core kernel object. If you want an example of how silly some of these kinds of things can get just look at arch_ptrace_stop and sigkill_pending. Linus has just merged my fixes for these things. There are worse examples, I just remember them off the top of my head. If this is merged as is, this feels like code that will be subtly wrong for a decade before someone figures it out and fixes it. Eric > Signed-off-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > --- > include/asm-generic/mmu_context.h | 4 ++++ > kernel/exit.c | 2 +- > 2 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/include/asm-generic/mmu_context.h b/include/asm-generic/mmu_context.h > index 91727065bacb..900931a6a105 100644 > --- a/include/asm-generic/mmu_context.h > +++ b/include/asm-generic/mmu_context.h > @@ -73,4 +73,8 @@ static inline void deactivate_mm(struct task_struct *tsk, > } > #endif > > +#ifndef arch_exit_mm_mmput > +#define arch_exit_mm_mmput mmput > +#endif > + > #endif /* __ASM_GENERIC_MMU_CONTEXT_H */ > diff --git a/kernel/exit.c b/kernel/exit.c > index f702a6a63686..6eb1fdcc434e 100644 > --- a/kernel/exit.c > +++ b/kernel/exit.c > @@ -504,7 +504,7 @@ static void exit_mm(void) > task_unlock(current); > mmap_read_unlock(mm); > mm_update_next_owner(mm); > - mmput(mm); > + arch_exit_mm_mmput(mm); > if (test_thread_flag(TIF_MEMDIE)) > exit_oom_victim(); > }