Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932371Ab2HXVv4 (ORCPT ); Fri, 24 Aug 2012 17:51:56 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:54724 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758819Ab2HXVvw (ORCPT ); Fri, 24 Aug 2012 17:51:52 -0400 Date: Fri, 24 Aug 2012 14:51:51 -0700 From: Andrew Morton To: Wanpeng Li Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Michal Hocko , KAMEZAWA Hiroyuki , Minchan Kim , Gavin Shan Subject: Re: [PATCH 1/2] mm/mmu_notifier: init notifier if necessary Message-Id: <20120824145151.b92557cc.akpm@linux-foundation.org> In-Reply-To: <1345819076-12545-1-git-send-email-liwanp@linux.vnet.ibm.com> References: <1345819076-12545-1-git-send-email-liwanp@linux.vnet.ibm.com> X-Mailer: Sylpheed 3.0.2 (GTK+ 2.20.1; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1948 Lines: 61 On Fri, 24 Aug 2012 22:37:55 +0800 Wanpeng Li wrote: > From: Gavin Shan > > 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 > Signed-off-by: Wanpeng Li > --- > 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. > + 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 from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/