Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756221Ab2BGGX7 (ORCPT ); Tue, 7 Feb 2012 01:23:59 -0500 Received: from mail-bk0-f46.google.com ([209.85.214.46]:37469 "EHLO mail-bk0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755079Ab2BGGX5 (ORCPT ); Tue, 7 Feb 2012 01:23:57 -0500 Date: Tue, 7 Feb 2012 10:23:53 +0400 From: Anton Vorontsov To: KOSAKI Motohiro Cc: Oleg Nesterov , Greg KH , Arve =?utf-8?B?SGrDuG5uZXbDpWc=?= , San Mehat , Colin Cross , "Eric W. Biederman" , "Paul E. McKenney" , linux-kernel@vger.kernel.org, kernel-team@android.com, linaro-kernel@lists.linaro.org Subject: Re: [PATCH v2 2/6] oom: Get rid of sparse warnings Message-ID: <20120207062353.GA24687@oksana.dev.rtsoft.ru> References: <20120203163056.GA4190@redhat.com> <20120206162935.GB5117@oksana.dev.rtsoft.ru> <20120207042026.GA25524@oksana.dev.rtsoft.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2131 Lines: 58 On Tue, Feb 07, 2012 at 12:38:58AM -0500, KOSAKI Motohiro wrote: > >> task struct only have allock_lock, not alloc_loc. > > > > Funnily, but sparse does not care. :-) __release(foo) will work as > > well. Seems like sparse counts locking balance globally. > > > > This is now fixed in the patch down below, thanks for catching. > > > >> Moreover we don't release > >> the lock in this code path. Seems odd. > > > > Indeed. That's exactly what sparse seeing is as well. We exit > > without releasing the lock, which is bad (in sparse' eyes). So > > we lie to sparse, telling it that we do release, so it shut ups. > > Hmmm.... > > To be honest, I really dislike any lie annotation. Why? It is very > fragile and easily > become broken from unrelated but near line changes. Please consider to > enhance sparse at first. I somewhat doubt that it is possible to "enhance it". We keep the lock held conditionaly, so we need too place the hint in the code itself. I believe the best we can do would be something like this: diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 4a24354..61d91f2 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -14,6 +14,7 @@ # define __releases(x) __attribute__((context(x,1,0))) # define __acquire(x) __context__(x,1) # define __release(x) __context__(x,-1) +# define __ret_with_lock(x) __context__(x,-1) # define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) # define __percpu __attribute__((noderef, address_space(3))) #ifdef CONFIG_SPARSE_RCU_POINTER @@ -37,6 +38,7 @@ extern void __chk_io_ptr(const volatile void __iomem *); # define __releases(x) # define __acquire(x) (void)0 # define __release(x) (void)0 +# define __ret_with_lock(x) # define __cond_lock(x,c) (c) # define __percpu # define __rcu And then use it instead of __release(). -- Anton Vorontsov Email: cbouatmailru@gmail.com -- 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/