From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Zijlstra Subject: Re: [PATCH] x86: Add optimized popcnt variants Date: Tue, 09 Mar 2010 17:32:49 +0100 Message-ID: <1268152369.5037.10.camel@laptop> References: <20100223175457.GA2401@aftab> <4B841BC3.1000908@zytor.com> <20100223190614.GB2401@aftab> <4B875BBD.4060104@zytor.com> <20100226074714.GA15310@aftab> <4B88097E.7010608@zytor.com> <20100227082807.GA21706@aftab> <4B8979DA.9000201@zytor.com> <20100309153628.GA2371@aftab> <1268149840.5037.3.camel@laptop> <20100309162352.GB2371@aftab> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: "H. Peter Anvin" , Michal Marek , linux-kbuild , Andrew Morton , Wu Fengguang , LKML , Jamie Lokier , Roland Dreier , Al Viro , "linux-fsdevel@vger.kernel.org" , Ingo Molnar , Brian Gerst To: Borislav Petkov Return-path: In-Reply-To: <20100309162352.GB2371@aftab> Sender: linux-kbuild-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Tue, 2010-03-09 at 17:23 +0100, Borislav Petkov wrote: > From: Peter Zijlstra > Date: Tue, Mar 09, 2010 at 04:50:40PM +0100 > > > Should all be fine as it is, that patch > > ( http://lkml.org/lkml/2010/2/4/119 ) is against a kernel with fce877e3 > > in, I've just checked and it still applies to tip/master as of this > > writing (although it grew a single 2 line offset for 1 hunk). > > Well, this way, I'm getting > > ... > In file included from include/linux/kernel.h:15, > from /home/linux-2.6/arch/x86/include/asm/percpu.h:45, > from /home/linux-2.6/arch/x86/include/asm/current.h:5, > from /home/linux-2.6/arch/x86/include/asm/processor.h:15, > from /home/linux-2.6/arch/x86/include/asm/atomic.h:6, > from include/linux/crypto.h:20, > from arch/x86/kernel/asm-offsets_64.c:8, > from arch/x86/kernel/asm-offsets.c:4: > include/linux/bitops.h:52:1: warning: "HWEIGHT8" redefined > ... > > due to the fact that we have multiple definitions of HWEIGHT*: > > The one batch is in introduced by fce877e3. > > The other is in which > is pulled in into through "#include > ", which, in turn, and > . > > The obvious resolution is to remove the HWEIGHT* batch from > since they're functionally > identical with the ones in , no? I thought the patch did that, see this hunk (straight from http://lkml.org/lkml/2010/2/4/119 ): --- Index: linux-2.6/include/linux/bitops.h =================================================================== --- linux-2.6.orig/include/linux/bitops.h +++ linux-2.6/include/linux/bitops.h @@ -45,31 +45,6 @@ static inline unsigned long hweight_long return sizeof(w) == 4 ? hweight32(w) : hweight64(w); } -/* - * Clearly slow versions of the hweightN() functions, their benefit is - * of course compile time evaluation of constant arguments. - */ -#define HWEIGHT8(w) \ - ( BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + \ - (!!((w) & (1ULL << 0))) + \ - (!!((w) & (1ULL << 1))) + \ - (!!((w) & (1ULL << 2))) + \ - (!!((w) & (1ULL << 3))) + \ - (!!((w) & (1ULL << 4))) + \ - (!!((w) & (1ULL << 5))) + \ - (!!((w) & (1ULL << 6))) + \ - (!!((w) & (1ULL << 7))) ) - -#define HWEIGHT16(w) (HWEIGHT8(w) + HWEIGHT8((w) >> 8)) -#define HWEIGHT32(w) (HWEIGHT16(w) + HWEIGHT16((w) >> 16)) -#define HWEIGHT64(w) (HWEIGHT32(w) + HWEIGHT32((w) >> 32)) - -/* - * Type invariant version that simply casts things to the - * largest type. - */ -#define HWEIGHT(w) HWEIGHT64((u64)(w)) - /** * rol32 - rotate a 32-bit value left * @word: value to rotate