Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755855Ab2BFVds (ORCPT ); Mon, 6 Feb 2012 16:33:48 -0500 Received: from mail-yx0-f174.google.com ([209.85.213.174]:64498 "EHLO mail-yx0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754692Ab2BFVdr convert rfc822-to-8bit (ORCPT ); Mon, 6 Feb 2012 16:33:47 -0500 MIME-Version: 1.0 In-Reply-To: <20120206162935.GB5117@oksana.dev.rtsoft.ru> References: <20120203163056.GA4190@redhat.com> <20120206162935.GB5117@oksana.dev.rtsoft.ru> From: KOSAKI Motohiro Date: Mon, 6 Feb 2012 16:33:26 -0500 Message-ID: Subject: Re: [PATCH 2/6] oom: Get rid of sparse warnings To: Anton Vorontsov Cc: Oleg Nesterov , Greg KH , =?ISO-8859-1?Q?Arve_Hj=F8nnev=E5g?= , San Mehat , Colin Cross , "Eric W. Biederman" , "Paul E. McKenney" , linux-kernel@vger.kernel.org, kernel-team@android.com, linaro-kernel@lists.linaro.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2192 Lines: 63 2012/2/6 Anton Vorontsov : > Sparse flood makes it hard to catch newly-introduced warnings. So let's > fix the the sparse warnings in the oom killer: > > ?CHECK ? mm/oom_kill.c > ?mm/oom_kill.c:139:20: warning: context imbalance in > ? ? ? ? ?'__find_lock_task_mm' - wrong count at exit > ?mm/oom_kill.c:771:9: warning: context imbalance in 'out_of_memory' - > ? ? ? ? ?different lock contexts for basic block > > The first one is fixed by assuring sparse that we know that we exit > with the lock held. > > The second one is caused by the fact that sparse isn't smart enough > to handle noreturn attribute. > > Signed-off-by: Anton Vorontsov > --- > ?mm/oom_kill.c | ? ?9 ++++++++- > ?1 files changed, 8 insertions(+), 1 deletions(-) > > diff --git a/mm/oom_kill.c b/mm/oom_kill.c > index 0ebb383..49569b6 100644 > --- a/mm/oom_kill.c > +++ b/mm/oom_kill.c > @@ -142,8 +142,14 @@ struct task_struct *__find_lock_task_mm(struct task_struct *p) > > ? ? ? ?do { > ? ? ? ? ? ? ? ?task_lock(t); > - ? ? ? ? ? ? ? if (likely(t->mm)) > + ? ? ? ? ? ? ? if (likely(t->mm)) { > + ? ? ? ? ? ? ? ? ? ? ? /* > + ? ? ? ? ? ? ? ? ? ? ? ?* Shut up sparse: we do know that we exit w/ the > + ? ? ? ? ? ? ? ? ? ? ? ?* task locked. > + ? ? ? ? ? ? ? ? ? ? ? ?*/ > + ? ? ? ? ? ? ? ? ? ? ? __release(&t->alloc_loc); task struct only have allock_lock, not alloc_loc. Moreover we don't release the lock in this code path. Seems odd. > ? ? ? ? ? ? ? ? ? ? ? ?return t; > + ? ? ? ? ? ? ? } > ? ? ? ? ? ? ? ?task_unlock(t); > ? ? ? ?} while_each_thread(p, t); > > @@ -766,6 +772,7 @@ retry: > ? ? ? ? ? ? ? ?dump_header(NULL, gfp_mask, order, NULL, mpol_mask); > ? ? ? ? ? ? ? ?read_unlock(&tasklist_lock); > ? ? ? ? ? ? ? ?panic("Out of memory and no killable processes...\n"); > + ? ? ? ? ? ? ? return; > ? ? ? ?} > > ? ? ? ?if (oom_kill_process(p, gfp_mask, order, points, totalpages, NULL, > -- > 1.7.7.6 > -- 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/