From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from psmtp.com (na3sys010amx175.postini.com [74.125.245.175]) by kanga.kvack.org (Postfix) with SMTP id 98B646B00F9 for ; Thu, 22 Mar 2012 18:24:35 -0400 (EDT) Received: by bkwq16 with SMTP id q16so2967619bkw.14 for ; Thu, 22 Mar 2012 15:24:33 -0700 (PDT) Message-ID: <4F6BA69F.1040707@openvz.org> Date: Fri, 23 Mar 2012 02:24:31 +0400 From: Konstantin Khlebnikov MIME-Version: 1.0 Subject: Re: [PATCH 00/16] mm: prepare for converting vm->vm_flags to 64-bit References: <20120321065140.13852.52315.stgit@zurg> <20120321100602.GA5522@barrios> <4F69D496.2040509@openvz.org> <20120322142647.42395398.akpm@linux-foundation.org> <20120322212810.GE6589@ZenIV.linux.org.uk> <20120322144122.59d12051.akpm@linux-foundation.org> <4F6BA221.8020602@openvz.org> In-Reply-To: <4F6BA221.8020602@openvz.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Andrew Morton Cc: Al Viro , Minchan Kim , "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" , Linus Torvalds , Hugh Dickins , KOSAKI Motohiro , Ben Herrenschmidt , "linux@arm.linux.org.uk" Konstantin Khlebnikov wrote: > Andrew Morton wrote: >> On Thu, 22 Mar 2012 21:28:11 +0000 >> Al Viro wrote: >> >>> On Thu, Mar 22, 2012 at 02:26:47PM -0700, Andrew Morton wrote: >>>> It would be nice to find some way of triggering compiler warnings or >>>> sparse warnings if someone mixes a 32-bit type with a vm_flags_t. Any >>>> thoughts on this? >>>> >>>> (Maybe that's what __nocast does, but Documentation/sparse.txt doesn't >>>> describe it) >>> >>> Use __bitwise for that - check how gfp_t is handled. >> >> So what does __nocast do? > > Actually it forbid any non-forced casts, but its implementation in sparse seems buggy: > __nocast generates some strange false positives. For example it sometimes forgot about > type attributes in function arguments, I saw this for vm_flags argument in ksm_madvise(). > I can reproduce this bug, if somebody interested. > 1.c: # define __nocast __attribute__((nocast)) typedef long __nocast long_t; static void f(long_t *x) { } static void g(void) { long_t x; f(&x); } $ sparse 1.c 1.c:13:12: warning: incorrect type in argument 1 (different modifiers) 1.c:13:12: expected int [nocast] [usertype] *x 1.c:13:12: got int * 1.c:13:12: warning: implicit cast to nocast type Is this ok? -- 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/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: email@kvack.org