Skip to contentSkip to conversation

Two extra perf/urgent fixes

GIT PULL New Arnaldo Carvalho de Melo 1 participant 3 messages Jul 9, 2015 perf events

lore
Share & tools
lore

Arnaldo Carvalho de Melo

author maintainer
#0 lore raw

Hi Ingo,

Please consider pulling, a fallout from removing linux/export.h
when copying rbtree.c and removing kernel specific stuff (EXPORT_SYMBOL), this is on top of my previous perf-urgent-for-mingo pull req.

- Arnaldo

The following changes since commit 08ae217b8d44986062fe3648c5bb83816d5bc00f:

perf thread_map: Fix the sizeof() calculation for map entries (2015-07-09 12:28:53 -0300)

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-urgent-for-mingo-2

for you to fetch changes up to 0aefc3590afcc9ecbe173fc01fccbda0869d2f0a:

tools: Copy lib/hweight.c from the kernel sources (2015-07-09 16:29:56 -0300)

----------------------------------------------------------------
perf/urgent fixes:

These are only noticed when doing a detached tarball, i.e. when one does:

make perf-perf-tar-src-pkg

to create a perf-4.2.0-rc1.tar file and then try to build the contents of this tarball:

- The python binding also has a MANIFEST like file where we list the files that need to be built and linked to form the resulting python shared object module file. And it has an entry for rbtree.c that still pointed to the one in the kernel sources, fix it by also removing one level of indirection so that it uses the tools/lib/rbtree.c copy. (Arnaldo Carvalho de Melo)

- For the same reasons as for rbtree.c, copy the kernel lib/hweight.c file to tools/lib/, sanitizing it in the process to remove kernel specific stuff like EXPORT_SYMBOL() lines and the linux/export.h include reference, as that file doesn't exist anymore in tools/include/linux. (Arnaldo Carvalho de Melo)

----------------------------------------------------------------
Arnaldo Carvalho de Melo (2):
perf tools: Fix the detached tarball wrt rbtree copy
tools: Copy lib/hweight.c from the kernel sources

 tools/lib/hweight.c                | 62 ++++++++++++++++++++++++++++++++++++++
 tools/perf/MANIFEST                |  2 +-
 tools/perf/util/Build              |  2 +-
 tools/perf/util/python-ext-sources |  4 +--
 4 files changed, 66 insertions(+), 4 deletions(-)
 create mode 100644 tools/lib/hweight.c
author maintainer
#1 lore raw

PATCH 1/2 perf tools: Fix the detached tarball wrt rbtree copy

From: Arnaldo Carvalho de Melo <[email protected]>

The python binding build process was still looking at the kernel rbtree.c file, so, when doing a in-tree build it would work, but when creating a tarball using tools/perf/MANIFEST as the contents list and then trying to build the resulting detached sources, it failed.

Fix it by removing one level of indirection from rbtree.c in the tools/perf/util/python-ext-sources file.

Cc Adrian Hunter <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Stephane Eranian <[email protected]>
---
 tools/perf/util/python-ext-sources | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/python-ext-sources +1 -1
index e23ded40c79e..de05e04b79c8 100644
@@ -19,5 +19,5 @@ util/rblist.c
 util/stat.c
 util/strlist.c
 util/trace-event.c
-../../lib/rbtree.c
+../lib/rbtree.c
 util/string.c
Signature · 1 line
2.1.0
author maintainer
#2 lore raw

PATCH 2/2 tools: Copy lib/hweight.c from the kernel sources

In reply to Arnaldo Carvalho de Melo

From: Arnaldo Carvalho de Melo <[email protected]>

Instead of accessing it directly, as it uses EXPORT_SYMBOL, that has no meaning in tools/perf and because we removed the stubs for it, i.e. we removed the tools/include/linux/export.h file.

This fixes the build for the detached tarball sources cases and removes one more source of entanglement with the kernel sources.

Cc Adrian Hunter <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Stephane Eranian <[email protected]>
---
 tools/lib/hweight.c                | 62 ++++++++++++++++++++++++++++++++++++++
 tools/perf/MANIFEST                |  2 +-
 tools/perf/util/Build              |  2 +-
 tools/perf/util/python-ext-sources |  2 +-
 4 files changed, 65 insertions(+), 3 deletions(-)
 create mode 100644 tools/lib/hweight.c
tools/lib/hweight.c new file +62 -0
new file mode 100644
index 000000000000..0b859b884339
@@ -0,0 +1,62 @@
+#include <linux/bitops.h>
+#include <asm/types.h>
+
+/**
+ * hweightN - returns the hamming weight of a N-bit word
+ * @x: the word to weigh
+ *
+ * The Hamming Weight of a number is the total number of bits set in it.
+ */
+
+unsigned int __sw_hweight32(unsigned int w)
+{
+#ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER
+	w -= (w >> 1) & 0x55555555;
+	w =  (w & 0x33333333) + ((w >> 2) & 0x33333333);
+	w =  (w + (w >> 4)) & 0x0f0f0f0f;
+	return (w * 0x01010101) >> 24;
+#else
+	unsigned int res = w - ((w >> 1) & 0x55555555);
+	res = (res & 0x33333333) + ((res >> 2) & 0x33333333);
+	res = (res + (res >> 4)) & 0x0F0F0F0F;
+	res = res + (res >> 8);
+	return (res + (res >> 16)) & 0x000000FF;
+#endif
+}
+
+unsigned int __sw_hweight16(unsigned int w)
+{
+	unsigned int res = w - ((w >> 1) & 0x5555);
+	res = (res & 0x3333) + ((res >> 2) & 0x3333);
+	res = (res + (res >> 4)) & 0x0F0F;
+	return (res + (res >> 8)) & 0x00FF;
+}
+
+unsigned int __sw_hweight8(unsigned int w)
+{
+	unsigned int res = w - ((w >> 1) & 0x55);
+	res = (res & 0x33) + ((res >> 2) & 0x33);
+	return (res + (res >> 4)) & 0x0F;
+}
+
+unsigned long __sw_hweight64(__u64 w)
+{
+#if BITS_PER_LONG == 32
+	return __sw_hweight32((unsigned int)(w >> 32)) +
+	       __sw_hweight32((unsigned int)w);
+#elif BITS_PER_LONG == 64
+#ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER
+	w -= (w >> 1) & 0x5555555555555555ul;
+	w =  (w & 0x3333333333333333ul) + ((w >> 2) & 0x3333333333333333ul);
+	w =  (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0ful;
+	return (w * 0x0101010101010101ul) >> 56;
+#else
+	__u64 res = w - ((w >> 1) & 0x5555555555555555ul);
+	res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul);
+	res = (res + (res >> 4)) & 0x0F0F0F0F0F0F0F0Ful;
+	res = res + (res >> 8);
+	res = res + (res >> 16);
+	return (res + (res >> 32)) & 0x00000000000000FFul;
+#endif
+#endif
+}
tools/perf/MANIFEST +1 -1
index 09dc0aabb515..d01a0aad5a01 100644
@@ -18,6 +18,7 @@ tools/arch/x86/include/asm/atomic.h
 tools/arch/x86/include/asm/rmwcc.h
 tools/lib/traceevent
 tools/lib/api
+tools/lib/hweight.c
 tools/lib/rbtree.c
 tools/lib/symbol/kallsyms.c
 tools/lib/symbol/kallsyms.h
@@ -57,7 +58,6 @@ include/linux/perf_event.h
 include/linux/list.h
 include/linux/hash.h
 include/linux/stringify.h
-lib/hweight.c
 include/linux/swab.h
 arch/*/include/asm/unistd*.h
 arch/*/include/uapi/asm/unistd*.h
tools/perf/util/Build +1 -1
index 601d11440596..d2d318c59b37 100644
@@ -143,6 +143,6 @@ $(OUTPUT)util/rbtree.o: ../lib/rbtree.c FORCE
 	$(call rule_mkdir)
 	$(call if_changed_dep,cc_o_c)
 
-$(OUTPUT)util/hweight.o: ../../lib/hweight.c FORCE
+$(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE
 	$(call rule_mkdir)
 	$(call if_changed_dep,cc_o_c)
tools/perf/util/python-ext-sources +1 -1
index de05e04b79c8..0766d98c5da5 100644
@@ -10,7 +10,7 @@ util/ctype.c
 util/evlist.c
 util/evsel.c
 util/cpumap.c
-../../lib/hweight.c
+../lib/hweight.c
 util/thread_map.c
 util/util.c
 util/xyarray.c
Signature · 1 line
2.1.0