From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail137.messagelabs.com (mail137.messagelabs.com [216.82.249.19]) by kanga.kvack.org (Postfix) with ESMTP id 9E0336B004D for ; Thu, 10 Sep 2009 19:06:49 -0400 (EDT) Date: Thu, 10 Sep 2009 16:05:41 -0700 From: Andrew Morton Subject: Re: [PATCH 3/6] hugetlb: introduce alloc_nodemask_of_node Message-Id: <20090910160541.9f902126.akpm@linux-foundation.org> In-Reply-To: <20090909163146.12963.79545.sendpatchset@localhost.localdomain> References: <20090909163127.12963.612.sendpatchset@localhost.localdomain> <20090909163146.12963.79545.sendpatchset@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org To: Lee Schermerhorn Cc: linux-mm@kvack.org, linux-numa@vger.kernel.org, mel@csn.ul.ie, randy.dunlap@oracle.com, nacc@us.ibm.com, rientjes@google.com, agl@us.ibm.com, apw@canonical.com, eric.whitney@hp.com List-ID: On Wed, 09 Sep 2009 12:31:46 -0400 Lee Schermerhorn wrote: > [PATCH 3/6] - hugetlb: introduce alloc_nodemask_of_node() > > Against: 2.6.31-rc7-mmotm-090827-1651 > > New in V5 of series > > V6: + rename 'init_nodemask_of_nodes()' to 'init_nodemask_of_node()' > + redefine init_nodemask_of_node() as static inline fcn > + move this patch back 1 in series > > Introduce nodemask macro to allocate a nodemask and > initialize it to contain a single node, using the macro > init_nodemask_of_node() factored out of the nodemask_of_node() > macro. > > alloc_nodemask_of_node() coded as a macro to avoid header > dependency hell. > > This will be used to construct the huge pages "nodes_allowed" > nodemask for a single node when basing nodes_allowed on a > preferred/local mempolicy or when a persistent huge page > pool page count is modified via a per node sysfs attribute. > > ... > > +/* > + * returns pointer to kmalloc()'d nodemask initialized to contain the > + * specified node. Caller must free with kfree(). > + */ > +#define alloc_nodemask_of_node(node) \ > +({ \ > + typeof(_unused_nodemask_arg_) *nmp; \ > + nmp = kmalloc(sizeof(*nmp), GFP_KERNEL); \ > + if (nmp) \ > + init_nodemask_of_node(nmp, (node)); \ > + nmp; \ > +}) All right, I give up. What's with this `typeof(_unused_nodemask_arg_)' stuff? Was there a reason why this had to be implemented as a macro? One which evaluates its arg either one or zero times, btw? hm. "to avoid header dependency hell". What hell? Self-inflicted? alloc_nodemask_of_node() has no callers, so I can think of a good fix for these problems. If it _did_ have a caller then I might ask "can't we fix this by moving alloc_nodemask_of_node() into the .c file". But it doesn't so I can't. It's a bit rude to assume that the caller wanted to use GFP_KERNEL. -- 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: email@kvack.org