Re: [PATCH 1/2] mm/mmu_notifier: init notifier if necessary
From: Gavin Shan <hidden>
Date: 2012-08-25 09:48:02
On Fri, Aug 24, 2012 at 02:51:51PM -0700, Andrew Morton wrote:
On Fri, 24 Aug 2012 22:37:55 +0800 Wanpeng Li [off-list ref] wrote:quoted
From: Gavin Shan <redacted> While registering MMU notifier, new instance of MMU notifier_mm will be allocated and later free'd if currrent mm_struct's MMU notifier_mm has been initialized. That cause some overhead. The patch tries to eleminate that. Signed-off-by: Gavin Shan <redacted> Signed-off-by: Wanpeng Li <redacted> --- mm/mmu_notifier.c | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-)diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c index 862b608..fb4067f 100644 --- a/mm/mmu_notifier.c +++ b/mm/mmu_notifier.c@@ -192,22 +192,23 @@ static int do_mmu_notifier_register(struct mmu_notifier *mn, BUG_ON(atomic_read(&mm->mm_users) <= 0); - ret = -ENOMEM; - mmu_notifier_mm = kmalloc(sizeof(struct mmu_notifier_mm), GFP_KERNEL); - if (unlikely(!mmu_notifier_mm)) - goto out; - if (take_mmap_sem) down_write(&mm->mmap_sem); ret = mm_take_all_locks(mm); if (unlikely(ret)) - goto out_cleanup; + goto out; if (!mm_has_notifiers(mm)) { + mmu_notifier_mm = kmalloc(sizeof(struct mmu_notifier_mm), + GFP_ATOMIC);Why was the code switched to the far weaker GFP_ATOMIC? We can still perform sleeping allocations inside mmap_sem.
Yes, we can perform sleeping while allocating memory, but we're holding the "mmap_sem". GFP_KERNEL possiblly block somebody else who also waits on mmap_sem for long time even though the case should be rare :-) Thanks, Gavin
quoted
+ if (unlikely(!mmu_notifier_mm)) { + ret = -ENOMEM; + goto out_of_mem; + } INIT_HLIST_HEAD(&mmu_notifier_mm->list); spin_lock_init(&mmu_notifier_mm->lock); + mm->mmu_notifier_mm = mmu_notifier_mm; - mmu_notifier_mm = NULL; } atomic_inc(&mm->mm_count);
-- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>