Check that before defining it from bitops.h wrapper.
Fixes:
In file included from util/include/../../../../include/linux/bitops.h:17,
from util/include/linux/bitops.h:8,
from ../../lib/hweight.c:2:
util/include/asm/bitops.h:9:1: error: "BITS_PER_LONG" redefined
In file included from util/include/../../../../include/linux/bitops.h:3,
from util/include/linux/bitops.h:8,
from ../../lib/hweight.c:2:
/usr/include/asm/types.h:32:1: error: this is the location of the previous definition
make: *** [util/hweight.o] Erreur 1
Signed-off-by: Frederic Weisbecker <fwei...@gmail.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Arnaldo Carvalho de Melo <ac...@redhat.com>
Cc: Paul Mackerras <pau...@samba.org>
---
tools/perf/util/include/asm/bitops.h | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/tools/perf/util/include/asm/bitops.h b/tools/perf/util/include/asm/bitops.h
index 58e9817..d945334 100644
--- a/tools/perf/util/include/asm/bitops.h
+++ b/tools/perf/util/include/asm/bitops.h
@@ -5,8 +5,10 @@
#include "../../types.h"
#include <linux/compiler.h>
+#ifndef BITS_PER_LONG
/* CHECKME: Not sure both always match */
#define BITS_PER_LONG __WORDSIZE
+#endif
#include "../../../../include/asm-generic/bitops/__fls.h"
#include "../../../../include/asm-generic/bitops/fls.h"
--
1.6.2.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Why use __WORDSIZE if you're not sure?
(8*sizeof(long)) is simple and unambiguous.
Yeah but we need it from the CPP level.
We include such code located in kernel headers:
static __always_inline unsigned long __fls(unsigned long word)
{
int num = BITS_PER_LONG - 1;
#if BITS_PER_LONG == 64
if (!(word & (~0ul << 32))) {
num -= 32;
word <<= 32;
}
#endif
if (!(word & (~0ul << (BITS_PER_LONG-16)))) {
num -= 16;
word <<= 16;
}
And sizeof() is not defined :)
You can use if() with a constant expression instead of #if.
J
I did not write this code. But yes you're right, although I
think CPP is more suitable here because fls() can be called
from fastpath and this conditional build makes one check less
and lesser i-cache footprint.
Constant if()s are removed at compile time, so there should be no
runtime overhead. Constant if()s are generally preferable to #if
because the compile will statically check the other code branch, even if
it never gets executed, which helps prevent it from rotting.
J
Good point! I did not think about compile time optimizations.
I'll try that then. Thanks!