All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wu Fengguang <fengguang.wu@intel.com>
To: Jamie Lokier <jamie@shareable.org>
Cc: Roland Dreier <rdreier@cisco.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	David Miller <davem@davemloft.net>,
	Stephen Rothwell <sfr@canb.auug.org.au>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Christoph Hellwig <hch@infradead.org>,
	Eric Paris <eparis@redhat.com>,
	LKML <linux-kernel@vger.kernel.org>,
	"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH] fs: O_* bit numbers uniqueness check
Date: Sat, 9 Jan 2010 21:44:56 +0800	[thread overview]
Message-ID: <20100109134456.GC20015@localhost> (raw)
In-Reply-To: <20100106162004.GA11773@shareable.org>

On Thu, Jan 07, 2010 at 12:20:04AM +0800, Jamie Lokier wrote:
> Roland Dreier wrote:
> > 
> >  > +	/* please add new bits here to ensure allocation uniqueness */
> >  > +	BUG_ON(20 != hweight32(
> >  > +		O_RDONLY	| O_WRONLY	| O_RDWR	|
> > 
> > I wonder if there's a way to make this BUILD_BUG_ON(), so the problem is
> > caught at compile time (a change like adding an O_ flag is often compile
> > tested only for obscure archs).  One could create a compile-time
> > macro-ized version of hweight32() and use that, I guess, although I'm
> > not sure it's worth the ugliness.
> 
> Not ugly at all:
> 
> #define hweight32(x) __builtin_popcount(x)
> 
> Checked GCC 3.4.3 / 4.1 / 4.4: It expands as a compile-time constant
> if the argument is a compile-time constant, so can be used in
> BUILD_BUG_ON() and even for array sizes etc.
> 
> If GCC's __builtin_popcount() isn't good enough for non-constant
> values, the macro would be more involved:
> 
> #define hweight32(x) (__builtin_constant_p(x) ? __builtin_popcount(x) \
>                       : hweight32_nonconstant(x))

Jamie, Thanks for the hint!  Would you sign this patch?

---
bitops: compile time optimization for hweight_long(CONSTANT)

This allows use of hweight_long() in BUILD_BUG_ON().
Suggested by Jamie.

CC: Jamie Lokier <jamie@shareable.org>
CC: Roland Dreier <rdreier@cisco.com>
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
---
 include/linux/bitops.h |   12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

--- linux.orig/include/linux/bitops.h	2010-01-09 12:13:00.000000000 +0800
+++ linux/include/linux/bitops.h	2010-01-09 12:21:50.000000000 +0800
@@ -40,10 +40,14 @@ static __inline__ int get_count_order(un
 	return order;
 }
 
-static inline unsigned long hweight_long(unsigned long w)
-{
-	return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
-}
+#define hweight_long(x)				\
+(						\
+	__builtin_constant_p(x) ?		\
+		__builtin_popcountl(x) :	\
+		(sizeof(x) <= 4 ?		\
+			 hweight32(x) :		\
+			 hweight64(x))		\
+)
 
 /**
  * rol32 - rotate a 32-bit value left

  reply	other threads:[~2010-01-09 13:45 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-06  6:55 [PATCH] fs: O_* bit numbers uniqueness check Wu Fengguang
2010-01-06  7:07 ` Eric Dumazet
2010-01-06  7:07   ` Eric Dumazet
2010-01-06  7:20   ` Wu Fengguang
2010-01-06  9:13     ` Andreas Schwab
2010-01-09 13:33       ` Wu Fengguang
2010-01-09 13:33         ` Wu Fengguang
2010-01-06  7:08 ` Roland Dreier
2010-01-06  7:18   ` [PATCH v2] " Wu Fengguang
2010-01-06  7:30     ` Roland Dreier
2010-01-06  7:42       ` Wu Fengguang
2010-01-06 16:20   ` [PATCH] " Jamie Lokier
2010-01-09 13:44     ` Wu Fengguang [this message]
2010-01-06 15:48 ` Christoph Hellwig
2010-01-09 13:52   ` Wu Fengguang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100109134456.GC20015@localhost \
    --to=fengguang.wu@intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=eparis@redhat.com \
    --cc=hch@infradead.org \
    --cc=jamie@shareable.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rdreier@cisco.com \
    --cc=sfr@canb.auug.org.au \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.