perf/core improvements and fixes
Arnaldo Carvalho de Melo
maintainerHi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit 41e950c033b7df997d4b38653efe6554be9b96a7:
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2014-12-12 09:09:52 +0100)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
for you to fetch changes up to 67195c75a87232f055ff415fc4624ef01f24fc3d:
perf symbols: Fix use after free in filename__read_build_id (2014-12-16 13:38:28 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:
User visible:
- The mmap address range for the ring buffer now is calculated using the contents of /proc/sys/kernel/perf_event_mlock_kb.
This fixes an -EPERM case where 'trace' was trying to use more than what configured on perf_event_mlock_kb. (Arnaldo Carvalho de Melo)
Infrastructure:
- Move bitops definitions so that they match the header file hierarchy in the kernel sources where that code came from. (Arnaldo Carvalho de Melo)
- Adopt round{down,up}_pow_of_two from the kernel and use it instead of equivalent code, so that we reuse more kernel code and make tools/ look more like kernel source code, to encourage further contributions from kernel hackers (Arnaldo Carvalho de Melo)
- Fix use after free in filename__read_build_id (Mitchell Krome)
----------------------------------------------------------------
Arnaldo Carvalho de Melo (17):
perf evlist: Fixup brown paper bag on "hint" for --mmap-pages cmdline arg perf evlist: Clarify sterror_mmap variable names
perf evlist: Improve the strerror_mmap method
perf trace: Let the perf_evlist__mmap autosize the number of pages to use perf evlist: Do not use hard coded value for a mmap_pages default
tools: Move __ffs implementation to tools/include/asm-generic/bitops/__ffs.h
tools: Move code originally from linux/log2.h to tools/include/linux/
tools: Move code originally from asm-generic/atomic.h into tools/include/asm-generic/
tools: Whitespace prep patches for moving bitops.h
tools lib: Move asm-generic/bitops/find.h code to tools/include and tools/lib
tools: Introduce asm-generic/bitops.h
tools: Move bitops.h from tools/perf/util to tools/
tools: Adopt fls_long and deps
tools: Adopt rounddown_pow_of_two and deps
perf tools: Make the mmap length autotuning more robust
tools: Adopt roundup_pow_of_two
perf evlist: Use roundup_pow_of_two
Mitchell Krome (1):
perf symbols: Fix use after free in filename__read_build_id
tools/include/asm-generic/bitops.h | 27 +++++ tools/include/asm-generic/bitops/__ffs.h | 43 +++++++ tools/include/asm-generic/bitops/__fls.h | 1 + tools/include/asm-generic/bitops/atomic.h | 22 ++++ tools/include/asm-generic/bitops/find.h | 33 ++++++ tools/include/asm-generic/bitops/fls.h | 1 + tools/include/asm-generic/bitops/fls64.h | 1 + tools/include/linux/bitops.h | 53 +++++++++ tools/include/linux/log2.h | 185 ++++++++++++++++++++++++++++++ tools/lib/util/find_next_bit.c | 89 ++++++++++++++ tools/perf/MANIFEST | 13 ++- tools/perf/Makefile.perf | 14 ++- tools/perf/builtin-trace.c | 2 +- tools/perf/util/evlist.c | 46 ++++++-- tools/perf/util/include/linux/bitops.h | 162 -------------------------- tools/perf/util/symbol-minimal.c | 8 +- tools/perf/util/util.h | 29 ----- 17 files changed, 522 insertions(+), 207 deletions(-) create mode 100644 tools/include/asm-generic/bitops.h create mode 100644 tools/include/asm-generic/bitops/__ffs.h create mode 100644 tools/include/asm-generic/bitops/__fls.h create mode 100644 tools/include/asm-generic/bitops/atomic.h create mode 100644 tools/include/asm-generic/bitops/find.h create mode 100644 tools/include/asm-generic/bitops/fls.h create mode 100644 tools/include/asm-generic/bitops/fls64.h create mode 100644 tools/include/linux/bitops.h create mode 100644 tools/include/linux/log2.h create mode 100644 tools/lib/util/find_next_bit.c delete mode 100644 tools/perf/util/include/linux/bitops.h
Arnaldo Carvalho de Melo
maintainerPATCH 1/18 perf evlist: Fixup brown paper bag on "hint" for --mmap-pages cmdline arg
From: Arnaldo Carvalho de Melo <[email protected]>
When failing due to asking for a number of mmap pages that is more than the max, it was suggesting that an even bigger number of mmap pages should be specified, doh, au contraire!
Before:
[acme@ssdandy linux]$ trace -m 128 usleep 1
Error: Operation not permitted.
Hint: Check /proc/sys/kernel/perf_event_mlock_kb (516 kB) setting.
Hint: Tried using 516 kB.
Hint: Try using a bigger -m/--mmap-pages value.
[acme@ssdandy linux]$
After:
[acme@ssdandy linux]$ trace -m 128 usleep 1
Error: Operation not permitted.
Hint: Check /proc/sys/kernel/perf_event_mlock_kb (516 kB) setting.
Hint: Tried using 516 kB.
Hint: Try using a smaller -m/--mmap-pages value.
[acme@ssdandy linux]$
And to (really) clarify what happens above, when what the user requests is <= max and even then it fails, a changeset is being made to tell that this is a per user limit, not per process (in the above example there was another 'perf trace' running for this user, which was using all the pages it could use).
--- tools/perf/util/evlist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/evlist.c +1 -1
@@ -1495,7 +1495,7 @@ int perf_evlist__strerror_mmap(struct perf_evlist *evlist, int err, char *buf, sscnprintf (buf, size,"Error:\t%s.\n" "Hint:\tCheck /proc/sys/kernel/perf_event_mlock_kb (%d kB) setting.\n" "Hint:\tTried using %zd kB.\n" -"Hint:\tTry using a bigger -m/--mmap-pages value." , +"Hint:\tTry using a smaller -m/--mmap-pages value." , emsg, value, evlist->mmap_len /1024 );break ;default :
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 2/18 perf evlist: Clarify sterror_mmap variable names
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Prep patch for doing further checks like when the number of pages that is being attempted is actually below /proc/sys/kernel/perf_event_mlock_kb but the operation fails because the user doesn't have CAP_IPC_LOCK.
--- tools/perf/util/evlist.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
tools/perf/util/evlist.c +3 -3
@@ -1487,16 +1487,16 @@ int perf_evlist__strerror_open(struct perf_evlist *evlist __maybe_unused,int perf_evlist__strerror_mmap (struct perf_evlist *evlist,int err,char *buf,size_t size) {char sbuf[STRERR_BUFSIZE ], *emsg =strerror_r (err, sbuf,sizeof (sbuf)); -int value; +int pages_attempted = evlist->mmap_len /1024 , pages_max_per_user;switch (err) {case EPERM : -sysctl__read_int ("kernel/perf_event_mlock_kb" , &value); +sysctl__read_int ("kernel/perf_event_mlock_kb" , &pages_max_per_user);scnprintf (buf, size,"Error:\t%s.\n" "Hint:\tCheck /proc/sys/kernel/perf_event_mlock_kb (%d kB) setting.\n" "Hint:\tTried using %zd kB.\n" "Hint:\tTry using a smaller -m/--mmap-pages value." , - emsg, value, evlist->mmap_len /1024 ); + emsg, pages_max_per_user, pages_attempted);break ;default :scnprintf (buf, size,"%s" , emsg);
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 3/18 perf evlist: Improve the strerror_mmap method
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Considering the per user locked pages limit, improve the message when a user uses multiple simultaneous perf mmap calls:
When the request is more than the current maximum:
[acme@ssdandy linux]$ trace -m 128 usleep 1
Error: Operation not permitted.
Hint: Check /proc/sys/kernel/perf_event_mlock_kb (516 kB) setting. Hint: Tried using 516 kB. Hint: Try 'sudo sh -c "echo 1032 > /proc/sys/kernel/perf_event_mlock_kb"', or Hint: Try using a smaller -m/--mmap-pages value.
[acme@ssdandy linux]$
And when the limit is less than that:
[acme@ssdandy linux]$ trace -m 512 usleep 1
Error: Operation not permitted.
Hint: Check /proc/sys/kernel/perf_event_mlock_kb (2056 kB) setting. Hint: Tried using 2052 kB. Hint: Try using a smaller -m/--mmap-pages value.
[acme@ssdandy linux]$
--- tools/perf/util/evlist.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
tools/perf/util/evlist.c +13 -4
@@ -1487,16 +1487,25 @@ int perf_evlist__strerror_open(struct perf_evlist *evlist __maybe_unused,int perf_evlist__strerror_mmap (struct perf_evlist *evlist,int err,char *buf,size_t size) {char sbuf[STRERR_BUFSIZE ], *emsg =strerror_r (err, sbuf,sizeof (sbuf)); -int pages_attempted = evlist->mmap_len /1024 , pages_max_per_user; +int pages_attempted = evlist->mmap_len /1024 , pages_max_per_user, printed =0 ;switch (err) {case EPERM :sysctl__read_int ("kernel/perf_event_mlock_kb" , &pages_max_per_user); -scnprintf (buf, size,"Error:\t%s.\n" + printed +=scnprintf (buf + printed, size - printed, +"Error:\t%s.\n" "Hint:\tCheck /proc/sys/kernel/perf_event_mlock_kb (%d kB) setting.\n" -"Hint:\tTried using %zd kB.\n" -"Hint:\tTry using a smaller -m/--mmap-pages value." , +"Hint:\tTried using %zd kB.\n" , emsg, pages_max_per_user, pages_attempted); + +if (pages_attempted >= pages_max_per_user) { + printed +=scnprintf (buf + printed, size - printed, +"Hint:\tTry 'sudo sh -c \"echo %d > /proc/sys/kernel/perf_event_mlock_kb\"', or\n" , + pages_max_per_user + pages_attempted); + } + + printed +=scnprintf (buf + printed, size - printed, +"Hint:\tTry using a smaller -m/--mmap-pages value." );break ;default :scnprintf (buf, size,"%s" , emsg);
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 4/18 perf trace: Let the perf_evlist__mmap autosize the number of pages to use
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
So that normal users can run 'trace', we were using a hardcoded 1024 pages value that was more than the default /proc/sys/kernel/perf_event_mlock_kb setting.
--- tools/perf/builtin-trace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/builtin-trace.c +1 -1
@@ -2485,7 +2485,7 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused) .user_freq = UINT_MAX, .user_interval = ULLONG_MAX, .no_buffering = true, - .mmap_pages = 1024, + .mmap_pages = UINT_MAX, }, .output = stdout, .show_comm = true,
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 5/18 perf evlist: Do not use hard coded value for a mmap_pages default
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
So far what is in there by default is what we were using: 512KB + the control page, but the admin may change that, and if it does to a smaller value, all calls to tooling for non root users start failing, requiring that the user manually set --mmap_pages/-m.
Use instead what is in /proc/sys/kernel/perf_event_mlock_kb.
--- tools/perf/util/evlist.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)
tools/perf/util/evlist.c +16 -4
@@ -893,10 +893,22 @@ out_unmap:static size_t perf_evlist__mmap_size (unsigned long pages) { -/* 512 kiB: default amount of unprivileged mlocked memory */ -if (pages ==UINT_MAX ) - pages = (512 *1024 ) / page_size; -else if (!is_power_of_2 (pages)) +if (pages ==UINT_MAX ) { +int max; + +if (sysctl__read_int ("kernel/perf_event_mlock_kb" , &max) <0 ) { +/* +* Pick a once upon a time good value, i.e. things look +* strange since we can't read a sysctl value, but lets not +* die yet... +*/ + max =512 ; + }else { + max -= (page_size /1024 ); + } + + pages = (max *1024 ) / page_size; + }else if (!is_power_of_2 (pages))return 0 ;return (pages +1 ) * page_size;
Signature · 1 line
1.9.3
Re: [PATCH 05/18] perf evlist: Do not use hard coded value for a mmap_pages default
Quoted 41 lines · Arnaldo Carvalho de Melo
From: Arnaldo Carvalho de Melo <[email protected]>
So far what is in there by default is what we were using: 512KB + the control page, but the admin may change that, and if it does to a smaller value, all calls to tooling for non root users start failing, requiring that the user manually set --mmap_pages/-m.
Use instead what is in
/proc/sys/kernel/perf_event_mlock_kb.Cc Adrian Hunter <[email protected]>Cc Borislav Petkov <[email protected]>Cc David Ahern <[email protected]>Cc Don Zickus <[email protected]>Cc Frederic Weisbecker <[email protected]>Cc Jiri Olsa <[email protected]>Cc Mike Galbraith <[email protected]>Cc Namhyung Kim <[email protected]>Cc Paul Mackerras <[email protected]>Cc Peter Zijlstra <[email protected]>Cc Stephane Eranian <[email protected]>Signed-off-by Arnaldo Carvalho de Melo <[email protected]>--- tools/perf/util/evlist.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)tools/perf/util/evlist.c +3
-4@@ -893,10 +893,22 @@ out_unmap:static size_t perf_evlist__mmap_size (unsigned long pages) { -/* 512 kiB: default amount of unprivileged mlocked memory */ -if (pages ==UINT_MAX ) - pages = (512 *1024 ) / page_size; -else if (!is_power_of_2 (pages)) +if (pages ==UINT_MAX ) { +int max; +
tools/perf/util/evlist.c out_unmap: · line 908
Quoted 10 lines
tools/perf/util/evlist.c +10
-0+if (sysctl__read_int ("kernel/perf_event_mlock_kb" , &max) <0 ) { +/* +* Pick a once upon a time good value, i.e. things look +* strange since we can't read a sysctl value, but lets not +* die yet... +*/ + max =512 ; + }else { + max -= (page_size /1024 ); + }
so this way you depend on value in perf_event_mlock_kb being power 2, otherwise:
# echo 1000 > /proc/sys/kernel/perf_event_mlock_kb $ perf record ls failed to mmap with 22 (Invalid argument)
maybe you could use the logic/code from parse_pages_arg function
jirka
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 05/18] perf evlist: Do not use hard coded value for a mmap_pages default
Em Wed, Dec 17, 2014 at 02:23:30PM +0100, Jiri Olsa escreveu:
Quoted 18 lines · Arnaldo Carvalho de Melo
tools/perf/util/evlist.c out_unmap: · line 908
Quoted 13 lines
tools/perf/util/evlist.c +13
-0+if (pages ==UINT_MAX ) { +int max; + +if (sysctl__read_int ("kernel/perf_event_mlock_kb" , &max) <0 ) { +/* +* Pick a once upon a time good value, i.e. things look +* strange since we can't read a sysctl value, but lets not +* die yet... +*/ + max =512 ; + }else { + max -= (page_size /1024 ); + }so this way you depend on value in
perf_event_mlock_kbbeing power 2, otherwise:
Quoted 3 lines
# echo 1000 > /proc/sys/kernel/perf_event_mlock_kb $ perf record ls failed to mmap with 22 (Invalid argument)
Right, I thought that perf_event_mlock_kb input was validated, realized that it is not, see the following patchkit that makes it validate that after reading, using rounddown_pow_of_two if not.
- Arnaldo
Quoted 3 lines
maybe you could use the logic/code from
parse_pages_argfunctionjirka
Arnaldo Carvalho de Melo
maintainerPATCH 6/18 tools: Move __ffs implementation to tools/include/asm-generic/bitops/__ffs.h
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To match the Linux kernel source code structure from where this code came from.
--- tools/include/asm-generic/bitops/__ffs.h | 43 ++++++++++++++++++++++++++++++++ tools/perf/MANIFEST | 1 + tools/perf/Makefile.perf | 1 + tools/perf/util/include/linux/bitops.h | 37 +-------------------------- 4 files changed, 46 insertions(+), 36 deletions(-) create mode 100644 tools/include/asm-generic/bitops/__ffs.h
tools/include/asm-generic/bitops/__ffs.h new file +43 -0
@@ -0,0 +1,43 @@ +#ifndef _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_ +#define _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_ + +#include <asm/types.h> + +/** +* __ffs - find first bit in word. +* @word: The word to search +* +* Undefined if no bit exists, so code should check against 0 first. +*/ +static __always_inline unsigned long __ffs (unsigned long word) +{ +int num =0 ; + +#if __BITS_PER_LONG ==64 +if ((word &0xffffffff ) ==0 ) { + num +=32 ; + word >>=32 ; + } +#endif +if ((word &0xffff ) ==0 ) { + num +=16 ; + word >>=16 ; + } +if ((word &0xff ) ==0 ) { + num +=8 ; + word >>=8 ; + } +if ((word &0xf ) ==0 ) { + num +=4 ; + word >>=4 ; + } +if ((word &0x3 ) ==0 ) { + num +=2 ; + word >>=2 ; + } +if ((word &0x1 ) ==0 ) + num +=1 ; +return num; +} + +#endif /* _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_ */
tools/perf/MANIFEST +1 -0
@@ -5,6 +5,7 @@ tools/lib/api tools/lib/symbol/kallsyms.c tools/lib/symbol/kallsyms.h tools/include/asm/bug.h +tools/include/asm-generic/bitops/__ffs.h tools/include/linux/compiler.h tools/include/linux/hash.h tools/include/linux/export.h
tools/perf/Makefile.perf +1 -0
@@ -232,6 +232,7 @@ LIB_H += ../include/linux/hash.h LIB_H += ../../include/linux/stringify.h LIB_H += util/include/linux/bitmap.h LIB_H += util/include/linux/bitops.h +LIB_H += ../include/asm-generic/bitops/__ffs.h LIB_H += ../include/linux/compiler.h LIB_H += util/include/linux/const.h LIB_H += util/include/linux/ctype.h
tools/perf/util/include/linux/bitops.h +1 -36
@@ -52,42 +52,7 @@ static inline unsigned long hweight_long(unsigned long w)#define BITOP_WORD (nr) ((nr) / BITS_PER_LONG) -/** -* __ffs - find first bit in word. -* @word: The word to search -* -* Undefined if no bit exists, so code should check against 0 first. -*/ -static __always_inline unsigned long __ffs (unsigned long word) -{ -int num =0 ; - -#if BITS_PER_LONG ==64 -if ((word &0xffffffff ) ==0 ) { - num +=32 ; - word >>=32 ; - } -#endif -if ((word &0xffff ) ==0 ) { - num +=16 ; - word >>=16 ; - } -if ((word &0xff ) ==0 ) { - num +=8 ; - word >>=8 ; - } -if ((word &0xf ) ==0 ) { - num +=4 ; - word >>=4 ; - } -if ((word &0x3 ) ==0 ) { - num +=2 ; - word >>=2 ; - } -if ((word &0x1 ) ==0 ) - num +=1 ; -return num; -} +#include <asm-generic/bitops/__ffs.h> typedef const unsigned long __attribute__((__may_alias__)) long_alias_t;
Signature · 1 line
1.9.3
Re: [PATCH 06/18] tools: Move __ffs implementation to tools/include/asm-generic/bitops/__ffs.h
On Tue, Dec 16, 2014 at 01:57:08PM -0300, Arnaldo Carvalho de Melo wrote:
SNIP
Quoted 24 lines
tools/include/asm-generic/bitops/__ffs.h new file +7
-0+ } +if ((word &0x1 ) ==0 ) + num +=1 ; +return num; +} + +#endif /* _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_ */ tools/perf/MANIFEST +1
-0@@ -5,6 +5,7 @@ tools/lib/api tools/lib/symbol/kallsyms.c tools/lib/symbol/kallsyms.h tools/include/asm/bug.h +tools/include/asm-generic/bitops/__ffs.h tools/include/linux/compiler.h tools/include/linux/hash.h tools/include/linux/export.htools/perf/Makefile.perf +0
-0
tools/perf/Makefile.perf LIB_H += ../include/linux/hash.h · line 235
Quoted 4 lines
tools/perf/Makefile.perf +1
-0@@ -232,6 +232,7 @@ LIB_H += ../include/linux/hash.h LIB_H += ../../include/linux/stringify.h LIB_H += util/include/linux/bitmap.h LIB_H += util/include/linux/bitops.h +LIB_H += ../include/asm-generic/bitops/__ffs.h
whitespace at the EOLN ;-)
jirka
Arnaldo Carvalho de Melo
maintainerPATCH 7/18 tools: Move code originally from linux/log2.h to tools/include/linux/
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Quoted 1 line
From
tools/perf/util/include/linux, so that it becomes accessible to
other tools/.
--- tools/include/linux/log2.h | 26 ++++++++++++++++++++++++++ tools/perf/MANIFEST | 3 ++- tools/perf/Makefile.perf | 1 + tools/perf/util/evlist.c | 1 + tools/perf/util/util.h | 11 ----------- 5 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 tools/include/linux/log2.h
tools/include/linux/log2.h new file +26 -0
@@ -0,0 +1,26 @@ +/* Integer base 2 logarithm calculation +* +* Copyright (C) 2006 Red Hat, Inc. All Rights Reserved. +* Written by David Howells ([email protected]) +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version +* 2 of the License, or (at your option) any later version. +*/ + +#ifndef _TOOLS_LINUX_LOG2_H +#define _TOOLS_LINUX_LOG2_H + +/* +* Determine whether some value is a power of two, where zero is +* *not* considered a power of two. +*/ + +static inline __attribute__((const)) +bool is_power_of_2 (unsigned long n) +{ +return (n !=0 && ((n & (n -1 )) ==0 )); +} + +#endif /* _TOOLS_LINUX_LOG2_H */
tools/perf/MANIFEST +2 -1
@@ -7,8 +7,9 @@ tools/lib/symbol/kallsyms.h tools/include/asm/bug.h tools/include/asm-generic/bitops/__ffs.h tools/include/linux/compiler.h -tools/include/linux/hash.h tools/include/linux/export.h +tools/include/linux/hash.h +tools/include/linux/log2.h tools/include/linux/types.h include/linux/const.h include/linux/perf_event.h
tools/perf/Makefile.perf +1 -0
@@ -234,6 +234,7 @@ LIB_H += util/include/linux/bitmap.h LIB_H += util/include/linux/bitops.h LIB_H += ../include/asm-generic/bitops/__ffs.h LIB_H += ../include/linux/compiler.h +LIB_H += ../include/linux/log2.h LIB_H += util/include/linux/const.h LIB_H += util/include/linux/ctype.h LIB_H += util/include/linux/kernel.h
tools/perf/util/evlist.c +1 -0
@@ -25,6 +25,7 @@#include <linux/bitops.h> #include <linux/hash.h> +#include <linux/log2.h> static void perf_evlist__mmap_put (struct perf_evlist *evlist,int idx);static void __perf_evlist__munmap (struct perf_evlist *evlist,int idx);
tools/perf/util/util.h +0 -11
@@ -269,17 +269,6 @@ void event_attr_init(struct perf_event_attr *attr);#define _STR (x) #x#define STR (x) _STR(x) -/* -* Determine whether some value is a power of two, where zero is -* *not* considered a power of two. -*/ - -static inline __attribute__((const)) -bool is_power_of_2 (unsigned long n) -{ -return (n !=0 && ((n & (n -1 )) ==0 )); -} -static inline unsigned next_pow2 (unsigned x) {if (!x)
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 8/18 tools: Move code originally from asm-generic/atomic.h into tools/include/asm-generic/
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To match the Linux kernel source code structure from where this code came from.
--- tools/include/asm-generic/bitops/atomic.h | 22 ++++++++++++++++++++++ tools/perf/MANIFEST | 1 + tools/perf/Makefile.perf | 1 + tools/perf/util/include/linux/bitops.h | 16 +--------------- 4 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 tools/include/asm-generic/bitops/atomic.h
tools/include/asm-generic/bitops/atomic.h new file +22 -0
@@ -0,0 +1,22 @@ +#ifndef _TOOLS_LINUX_ASM_GENERIC_BITOPS_ATOMIC_H_ +#define _TOOLS_LINUX_ASM_GENERIC_BITOPS_ATOMIC_H_ + +#include <asm/types.h> + +static inline void set_bit (int nr,unsigned long *addr) +{ + addr[nr / __BITS_PER_LONG] |=1UL << (nr % __BITS_PER_LONG); +} + +static inline void clear_bit (int nr,unsigned long *addr) +{ + addr[nr / __BITS_PER_LONG] &= ~(1UL << (nr % __BITS_PER_LONG)); +} + +static __always_inline int test_bit(unsigned int nr, const unsigned long *addr) +{ +return ((1UL << (nr % __BITS_PER_LONG)) & + (((unsigned long *)addr)[nr / __BITS_PER_LONG])) !=0 ; +} + +#endif /* _TOOLS_LINUX_ASM_GENERIC_BITOPS_ATOMIC_H_ */
tools/perf/MANIFEST +1 -0
@@ -5,6 +5,7 @@ tools/lib/api tools/lib/symbol/kallsyms.c tools/lib/symbol/kallsyms.h tools/include/asm/bug.h +tools/include/asm-generic/bitops/atomic.h tools/include/asm-generic/bitops/__ffs.h tools/include/linux/compiler.h tools/include/linux/export.h
tools/perf/Makefile.perf +1 -0
@@ -232,6 +232,7 @@ LIB_H += ../include/linux/hash.h LIB_H += ../../include/linux/stringify.h LIB_H += util/include/linux/bitmap.h LIB_H += util/include/linux/bitops.h +LIB_H += ../include/asm-generic/bitops/atomic.h LIB_H += ../include/asm-generic/bitops/__ffs.h LIB_H += ../include/linux/compiler.h LIB_H += ../include/linux/log2.h
tools/perf/util/include/linux/bitops.h +1 -15
@@ -29,21 +29,7 @@ (bit) < (size); \ (bit) = find_next_bit((addr), (size), (bit) + 1)) -static inline void set_bit (int nr,unsigned long *addr) -{ - addr[nr /BITS_PER_LONG ] |=1UL << (nr %BITS_PER_LONG ); -} - -static inline void clear_bit (int nr,unsigned long *addr) -{ - addr[nr /BITS_PER_LONG ] &= ~(1UL << (nr %BITS_PER_LONG )); -} - -static __always_inline int test_bit(unsigned int nr, const unsigned long *addr) -{ -return ((1UL << (nr %BITS_PER_LONG )) & - (((unsigned long *)addr)[nr /BITS_PER_LONG ])) !=0 ; -} +#include <asm-generic/bitops/atomic.h> static inline unsigned long hweight_long (unsigned long w) {
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 9/18 tools: Whitespace prep patches for moving bitops.h
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/include/linux/bitops.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
tools/perf/util/include/linux/bitops.h +8 -7
@@ -10,13 +10,14 @@#endif #define BITS_PER_LONG __WORDSIZE -#define BITS_PER_BYTE 8 -#define BITS_TO_LONGS (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) -#define BITS_TO_U64 (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(u64)) -#define BITS_TO_U32 (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(u32)) -#define BITS_TO_BYTES (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE) -#define BIT_WORD (nr) ((nr) / BITS_PER_LONG) -#define BIT_MASK (nr) (1UL << ((nr) % BITS_PER_LONG)) + +#define BIT_MASK (nr) (1UL << ((nr) % BITS_PER_LONG)) +#define BIT_WORD (nr) ((nr) / BITS_PER_LONG) +#define BITS_PER_BYTE 8 +#define BITS_TO_LONGS (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) +#define BITS_TO_U64 (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(u64)) +#define BITS_TO_U32 (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(u32)) +#define BITS_TO_BYTES (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE)#define for_each_set_bit (bit, addr, size) \ for ((bit) = find_first_bit((addr), (size)); \
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 10/18 tools lib: Move asm-generic/bitops/find.h code to tools/include and tools/lib
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To match the Linux kernel source code structure from where this code came from.
--- tools/include/asm-generic/bitops/find.h | 33 ++++++++++++ tools/lib/util/find_next_bit.c | 89 +++++++++++++++++++++++++++++++++ tools/perf/MANIFEST | 3 ++ tools/perf/Makefile.perf | 5 ++ tools/perf/util/include/linux/bitops.h | 73 +-------------------------- 5 files changed, 131 insertions(+), 72 deletions(-) create mode 100644 tools/include/asm-generic/bitops/find.h create mode 100644 tools/lib/util/find_next_bit.c
tools/include/asm-generic/bitops/find.h new file +33 -0
@@ -0,0 +1,33 @@ +#ifndef _TOOLS_LINUX_ASM_GENERIC_BITOPS_FIND_H_ +#define _TOOLS_LINUX_ASM_GENERIC_BITOPS_FIND_H_ + +#ifndef find_next_bit +/** +* find_next_bit - find the next set bit in a memory region +* @addr: The address to base the search on +* @offset: The bitnumber to start searching at +* @size: The bitmap size in bits +* +* Returns the bit number for the next set bit +* If no bits are set, returns @size. +*/ +extern unsigned long find_next_bit (const unsigned long *addr,unsigned long + size,unsigned long offset); +#endif + +#ifndef find_first_bit + +/** +* find_first_bit - find the first set bit in a memory region +* @addr: The address to start the search at +* @size: The maximum number of bits to search +* +* Returns the bit number of the first set bit. +* If no bits are set, returns @size. +*/ +extern unsigned long find_first_bit (const unsigned long *addr, +unsigned long size); + +#endif /* find_first_bit */ + +#endif /*_TOOLS_LINUX_ASM_GENERIC_BITOPS_FIND_H_ */
tools/lib/util/find_next_bit.c new file +89 -0
89 lines not on this page · raw message
tools/perf/MANIFEST +3 -0
@@ -4,8 +4,10 @@ tools/lib/traceevent tools/lib/api tools/lib/symbol/kallsyms.c tools/lib/symbol/kallsyms.h +tools/lib/util/find_next_bit.c tools/include/asm/bug.h tools/include/asm-generic/bitops/atomic.h +tools/include/asm-generic/bitops/find.h tools/include/asm-generic/bitops/__ffs.h tools/include/linux/compiler.h tools/include/linux/export.h
@@ -18,6 +20,7 @@ include/linux/rbtree.h include/linux/list.h include/linux/hash.h include/linux/stringify.h +lib/find_next_bit.c lib/rbtree.c include/linux/swab.h arch/*/include/asm/unistd*.h
tools/perf/Makefile.perf +5 -0
@@ -233,6 +233,7 @@ LIB_H += ../../include/linux/stringify.h LIB_H += util/include/linux/bitmap.h LIB_H += util/include/linux/bitops.h LIB_H += ../include/asm-generic/bitops/atomic.h +LIB_H += ../include/asm-generic/bitops/find.h LIB_H += ../include/asm-generic/bitops/__ffs.h LIB_H += ../include/linux/compiler.h LIB_H += ../include/linux/log2.h
@@ -338,6 +339,7 @@ LIB_OBJS += $(OUTPUT)util/event.o LIB_OBJS += $(OUTPUT)util/evlist.o LIB_OBJS += $(OUTPUT)util/evsel.o LIB_OBJS += $(OUTPUT)util/exec_cmd.o +LIB_OBJS += $(OUTPUT)util/find_next_bit.o LIB_OBJS += $(OUTPUT)util/help.o LIB_OBJS += $(OUTPUT)util/kallsyms.o LIB_OBJS += $(OUTPUT)util/levenshtein.o
@@ -737,6 +739,9 @@ $(OUTPUT)util/kallsyms.o: ../lib/symbol/kallsyms.c $(OUTPUT)PERF-CFLAGS $(OUTPUT)util/rbtree.o: ../../lib/rbtree.c $(OUTPUT)PERF-CFLAGS $(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -Wno-unused-parameter -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $< +$(OUTPUT)util/find_next_bit.o: ../lib/util/find_next_bit.c $(OUTPUT)PERF-CFLAGS + $(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -Wno-unused-parameter -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $< + $(OUTPUT)util/parse-events.o: util/parse-events.c $(OUTPUT)PERF-CFLAGS $(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -Wno-redundant-decls $<
tools/perf/util/include/linux/bitops.h +1 -72
79 lines not on this page · raw message
Signature · 1 line
1.9.3
Re: [PATCH 10/18] tools lib: Move asm-generic/bitops/find.h code to tools/include and tools/lib
Quoted 3 lines · Arnaldo Carvalho de Melo
From: Arnaldo Carvalho de Melo <[email protected]>
To match the Linux kernel source code structure from where this code came from.
SNIP
Quoted 19 lines
tools/lib/util/find_next_bit.c new file +14
-0+ goto found; + result +=BITS_PER_LONG ; + size -= BITS_PER_LONG; + } +if (!size) +return result; + + tmp = (*p) & (~0UL >> (BITS_PER_LONG - size)); +if (tmp ==0UL )/* Are any bits set? */ +return result + size;/* Nope. */ +found: +return result +__ffs (tmp); +} +#endif tools/perf/MANIFEST +0
-0
tools/perf/MANIFEST tools/lib/traceevent · line 7
Quoted 4 lines
tools/perf/MANIFEST +1
-0@@ -4,8 +4,10 @@ tools/lib/traceevent tools/lib/api tools/lib/symbol/kallsyms.c tools/lib/symbol/kallsyms.h +tools/lib/util/find_next_bit.c
hum, I had the impression that we will move 'generic' things under 'api' to be built separatelly.. so whats the current notion? ;-)
what kind of code belongs to 'lib/api/...' and what to 'lib/...' ?
thanks,
jirka
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 10/18] tools lib: Move asm-generic/bitops/find.h code to tools/include and tools/lib
Em Wed, Dec 17, 2014 at 02:41:16PM +0100, Jiri Olsa escreveu:
Quoted 11 lines · Arnaldo Carvalho de Melo
tools/perf/MANIFEST tools/lib/traceevent · line 7
Quoted 6 lines
+++ b/tools/perf/MANIFEST
tools/perf/MANIFEST +1
-0@@ -4,8 +4,10 @@ tools/lib/traceevent tools/lib/api tools/lib/symbol/kallsyms.c tools/lib/symbol/kallsyms.h +tools/lib/util/find_next_bit.chum, I had the impression that we will move 'generic' things under 'api' to be built separatelly.. so whats the current notion? ;-)
Quoted 1 line
what kind of code belongs to '
lib/api/...' and what to 'lib/...' ?
Well, the reasoning here was that if libkapi is for functions that provide glue over kernel APIs, which a set of bitmap handling routines is not, i.e. that is more generic and not strictly related to the kernel.
- Arnaldo
Re: [PATCH 10/18] tools lib: Move asm-generic/bitops/find.h code to tools/include and tools/lib
In reply to Arnaldo Carvalho de MeloQuoted 3 lines · Arnaldo Carvalho de Melo
From: Arnaldo Carvalho de Melo <[email protected]>
To match the Linux kernel source code structure from where this code came from.
SNIP
Quoted 28 lines
tools/perf/MANIFEST +3
-0@@ -4,8 +4,10 @@ tools/lib/traceevent tools/lib/api tools/lib/symbol/kallsyms.c tools/lib/symbol/kallsyms.h +tools/lib/util/find_next_bit.c tools/include/asm/bug.h tools/include/asm-generic/bitops/atomic.h +tools/include/asm-generic/bitops/find.h tools/include/asm-generic/bitops/__ffs.h tools/include/linux/compiler.h tools/include/linux/export.h@@ -18,6 +20,7 @@ include/linux/rbtree.h include/linux/list.h include/linux/hash.h include/linux/stringify.h +lib/find_next_bit.c lib/rbtree.c include/linux/swab.h arch/*/include/asm/unistd*.htools/perf/Makefile.perf +0
-0
tools/perf/Makefile.perf LIB_H += ../../include/linux/stringify.h · line 236
Quoted 4 lines
tools/perf/Makefile.perf +1
-0@@ -233,6 +233,7 @@ LIB_H += ../../include/linux/stringify.h LIB_H += util/include/linux/bitmap.h LIB_H += util/include/linux/bitops.h LIB_H += ../include/asm-generic/bitops/atomic.h +LIB_H += ../include/asm-generic/bitops/find.h
whitespace at the EOLN ;-)
jirka
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 10/18] tools lib: Move asm-generic/bitops/find.h code to tools/include and tools/lib
Em Wed, Dec 17, 2014 at 02:42:23PM +0100, Jiri Olsa escreveu:
Quoted 9 lines · Arnaldo Carvalho de Melo
tools/perf/Makefile.perf LIB_H += ../../include/linux/stringify.h · line 236
Quoted 6 lines
+++ b/tools/perf/Makefile.perf
tools/perf/Makefile.perf +1
-0@@ -233,6 +233,7 @@ LIB_H += ../../include/linux/stringify.h LIB_H += util/include/linux/bitmap.h LIB_H += util/include/linux/bitops.h LIB_H += ../include/asm-generic/bitops/atomic.h +LIB_H += ../include/asm-generic/bitops/find.hwhitespace at the EOLN ;-)
How could this slip thru? /me scratches head, will check, but I thought that I catched these things with the .git hooks, humm, three new entries in Makefile.perf has, three doesn't :-\ Will try to plug this in my machine setups.
- Arnaldo
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 10/18] tools lib: Move asm-generic/bitops/find.h code to tools/include and tools/lib
Em Wed, Dec 17, 2014 at 11:02:35AM -0300, Arnaldo Carvalho de Melo escreveu:
Quoted 11 lines
Em Wed, Dec 17, 2014 at 02:42:23PM +0100, Jiri Olsa escreveu:
Quoted 9 lines · Arnaldo Carvalho de Melo
tools/perf/Makefile.perf LIB_H += ../../include/linux/stringify.h · line 236
Quoted 6 lines
+++ b/tools/perf/Makefile.perf
tools/perf/Makefile.perf +1
-0@@ -233,6 +233,7 @@ LIB_H += ../../include/linux/stringify.h LIB_H += util/include/linux/bitmap.h LIB_H += util/include/linux/bitops.h LIB_H += ../include/asm-generic/bitops/atomic.h +LIB_H += ../include/asm-generic/bitops/find.hwhitespace at the EOLN ;-)
Quoted 4 lines
How could this slip thru? /me scratches head, will check, but I thought that I catched these things with the .git hooks, humm, three new entries in Makefile.perf has, three doesn't :-\ Will try to plug this in my machine setups.
I redid the offending csets and put them on a new signed tag:
perf-core-for-mingo-2
And also force pushed perf/core, i.e. the original stuff is there, available thru the perf-core-for-mingo signed tag, the fixed up stuff is on perf/core and on this new signed tag.
Ingo, if you see this, please prefer the fixed up one,
Thanks,
- Arnaldo
Arnaldo Carvalho de Melo
maintainerPATCH 11/18 tools: Introduce asm-generic/bitops.h
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
In preparation for moving linux/bitops.h from tools/perf/util/ to tools/include/.
--- tools/include/asm-generic/bitops.h | 24 ++++++++++++++++++++++++ tools/perf/MANIFEST | 3 ++- tools/perf/Makefile.perf | 1 + tools/perf/util/include/linux/bitops.h | 17 ++++++++++------- 4 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 tools/include/asm-generic/bitops.h
tools/include/asm-generic/bitops.h new file +24 -0
@@ -0,0 +1,24 @@ +#ifndef __TOOLS_ASM_GENERIC_BITOPS_H +#define __TOOLS_ASM_GENERIC_BITOPS_H + +/* +* tools/ copied this from include/asm-generic/bitops.h, bit by bit as it needed +* some functions. +* +* For the benefit of those who are trying to port Linux to another +* architecture, here are some C-language equivalents. You should +* recode these in the native assembly language, if at all possible. +* +* C language equivalents written by Theodore Ts'o, 9/26/92 +*/ + +#include <asm-generic/bitops/__ffs.h> +#include <asm-generic/bitops/find.h> + +#ifndef _TOOLS_LINUX_BITOPS_H_ +#error only <linux/bitops.h> can be included directly +#endif + +#include <asm-generic/bitops/atomic.h> + +#endif /* __TOOLS_ASM_GENERIC_BITOPS_H */
tools/perf/MANIFEST +2 -1
@@ -7,8 +7,9 @@ tools/lib/symbol/kallsyms.h tools/lib/util/find_next_bit.c tools/include/asm/bug.h tools/include/asm-generic/bitops/atomic.h -tools/include/asm-generic/bitops/find.h tools/include/asm-generic/bitops/__ffs.h +tools/include/asm-generic/bitops/find.h +tools/include/asm-generic/bitops.h tools/include/linux/compiler.h tools/include/linux/export.h tools/include/linux/hash.h
tools/perf/Makefile.perf +1 -0
@@ -235,6 +235,7 @@ LIB_H += util/include/linux/bitops.h LIB_H += ../include/asm-generic/bitops/atomic.h LIB_H += ../include/asm-generic/bitops/find.h LIB_H += ../include/asm-generic/bitops/__ffs.h +LIB_H += ../include/asm-generic/bitops.h LIB_H += ../include/linux/compiler.h LIB_H += ../include/linux/log2.h LIB_H += util/include/linux/const.h
tools/perf/util/include/linux/bitops.h +10 -7
@@ -1,5 +1,5 @@ -#ifndef _PERF_LINUX_BITOPS_H_ -#define _PERF_LINUX_BITOPS_H_ +#ifndef _TOOLS_LINUX_BITOPS_H_ +#define _TOOLS_LINUX_BITOPS_H_#include <linux/kernel.h> #include <linux/compiler.h>
@@ -19,6 +19,14 @@#define BITS_TO_U32 (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(u32))#define BITS_TO_BYTES (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE) +/* +* Include this here because some architectures need generic_ffs/fls in +* scope +* +* XXX: this needs to be asm/bitops.h, when we get to per arch optimizations +*/ +#include <asm-generic/bitops.h> +#define for_each_set_bit (bit, addr, size) \ for ((bit) = find_first_bit((addr), (size)); \ (bit) < (size); \
@@ -30,14 +38,9 @@ (bit) < (size); \ (bit) = find_next_bit((addr), (size), (bit) + 1)) -#include <asm-generic/bitops/atomic.h> -static inline unsigned long hweight_long (unsigned long w) {return sizeof (w) ==4 ?hweight32 (w) :hweight64 (w); } -#include <asm-generic/bitops/__ffs.h> -#include <asm-generic/bitops/find.h> -#endif
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 12/18 tools: Move bitops.h from tools/perf/util to tools/
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
So that we better mirror the kernel sources and make it available for other tools.
--- tools/include/linux/bitops.h | 46 ++++++++++++++++++++++++++++++++++ tools/perf/MANIFEST | 1 + tools/perf/Makefile.perf | 2 +- tools/perf/util/include/linux/bitops.h | 46 ---------------------------------- 4 files changed, 48 insertions(+), 47 deletions(-) create mode 100644 tools/include/linux/bitops.h delete mode 100644 tools/perf/util/include/linux/bitops.h
tools/include/linux/bitops.h new file +46 -0
@@ -0,0 +1,46 @@ +#ifndef _TOOLS_LINUX_BITOPS_H_ +#define _TOOLS_LINUX_BITOPS_H_ + +#include <linux/kernel.h> +#include <linux/compiler.h> +#include <asm/hweight.h> + +#ifndef __WORDSIZE +#define __WORDSIZE (__SIZEOF_LONG__ * 8) +#endif + +#define BITS_PER_LONG __WORDSIZE + +#define BIT_MASK (nr) (1UL << ((nr) % BITS_PER_LONG)) +#define BIT_WORD (nr) ((nr) / BITS_PER_LONG) +#define BITS_PER_BYTE 8 +#define BITS_TO_LONGS (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) +#define BITS_TO_U64 (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(u64)) +#define BITS_TO_U32 (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(u32)) +#define BITS_TO_BYTES (nr) DIV_ROUND_UP(nr, BITS_PER_BYTE) + +/* +* Include this here because some architectures need generic_ffs/fls in +* scope +* +* XXX: this needs to be asm/bitops.h, when we get to per arch optimizations +*/ +#include <asm-generic/bitops.h> + +#define for_each_set_bit (bit, addr, size) \ + for ((bit) = find_first_bit((addr), (size)); \ + (bit) < (size); \ + (bit) = find_next_bit((addr), (size), (bit) + 1)) + +/* same as for_each_set_bit() but use bit as value to start with */ +#define for_each_set_bit_from (bit, addr, size) \ + for ((bit) = find_next_bit((addr), (size), (bit)); \ + (bit) < (size); \ + (bit) = find_next_bit((addr), (size), (bit) + 1)) + +static inline unsigned long hweight_long (unsigned long w) +{ +return sizeof (w) ==4 ?hweight32 (w) :hweight64 (w); +} + +#endif
tools/perf/MANIFEST +1 -0
@@ -10,6 +10,7 @@ tools/include/asm-generic/bitops/atomic.h tools/include/asm-generic/bitops/__ffs.h tools/include/asm-generic/bitops/find.h tools/include/asm-generic/bitops.h +tools/include/linux/bitops.h tools/include/linux/compiler.h tools/include/linux/export.h tools/include/linux/hash.h
tools/perf/Makefile.perf +1 -1
@@ -231,7 +231,7 @@ LIB_H += ../../include/uapi/linux/const.h LIB_H += ../include/linux/hash.h LIB_H += ../../include/linux/stringify.h LIB_H += util/include/linux/bitmap.h -LIB_H += util/include/linux/bitops.h +LIB_H += ../include/linux/bitops.h LIB_H += ../include/asm-generic/bitops/atomic.h LIB_H += ../include/asm-generic/bitops/find.h LIB_H += ../include/asm-generic/bitops/__ffs.h
tools/perf/util/include/linux/bitops.h deleted +0 -46
46 lines not on this page · raw message
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 13/18 tools: Adopt fls_long and deps
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Will be used when adopting rounddown_pow_of_two.
--- tools/include/asm-generic/bitops.h | 3 +++ tools/include/asm-generic/bitops/__fls.h | 1 + tools/include/asm-generic/bitops/fls.h | 1 + tools/include/asm-generic/bitops/fls64.h | 1 + tools/include/linux/bitops.h | 7 +++++++ tools/perf/MANIFEST | 3 +++ tools/perf/Makefile.perf | 3 +++ 7 files changed, 19 insertions(+) create mode 100644 tools/include/asm-generic/bitops/__fls.h create mode 100644 tools/include/asm-generic/bitops/fls.h create mode 100644 tools/include/asm-generic/bitops/fls64.h
tools/include/asm-generic/bitops.h +3 -0
@@ -13,6 +13,9 @@*/ #include <asm-generic/bitops/__ffs.h> +#include <asm-generic/bitops/fls.h> +#include <asm-generic/bitops/__fls.h> +#include <asm-generic/bitops/fls64.h> #include <asm-generic/bitops/find.h> #ifndef _TOOLS_LINUX_BITOPS_H_
tools/include/asm-generic/bitops/__fls.h new file +1 -0
@@ -0,0 +1 @@ +#include <../../../../include/asm-generic/bitops/__fls.h>
tools/include/asm-generic/bitops/fls.h new file +1 -0
@@ -0,0 +1 @@ +#include <../../../../include/asm-generic/bitops/fls.h>
tools/include/asm-generic/bitops/fls64.h new file +1 -0
@@ -0,0 +1 @@ +#include <../../../../include/asm-generic/bitops/fls64.h>
tools/include/linux/bitops.h +7 -0
@@ -43,4 +43,11 @@ static inline unsigned long hweight_long(unsigned long w) return sizeof(w) == 4 ? hweight32(w) : hweight64(w); } +static inline unsigned fls_long (unsigned long l) +{ +if (sizeof (l) ==4 ) +return fls (l); +return fls64 (l); +} +#endif
tools/perf/MANIFEST +3 -0
@@ -8,7 +8,10 @@ tools/lib/util/find_next_bit.c tools/include/asm/bug.h tools/include/asm-generic/bitops/atomic.h tools/include/asm-generic/bitops/__ffs.h +tools/include/asm-generic/bitops/__fls.h tools/include/asm-generic/bitops/find.h +tools/include/asm-generic/bitops/fls64.h +tools/include/asm-generic/bitops/fls.h tools/include/asm-generic/bitops.h tools/include/linux/bitops.h tools/include/linux/compiler.h
tools/perf/Makefile.perf +3 -0
@@ -234,7 +234,10 @@ LIB_H += util/include/linux/bitmap.h LIB_H += ../include/linux/bitops.h LIB_H += ../include/asm-generic/bitops/atomic.h LIB_H += ../include/asm-generic/bitops/find.h +LIB_H += ../include/asm-generic/bitops/fls64.h +LIB_H += ../include/asm-generic/bitops/fls.h LIB_H += ../include/asm-generic/bitops/__ffs.h +LIB_H += ../include/asm-generic/bitops/__fls.h LIB_H += ../include/asm-generic/bitops.h LIB_H += ../include/linux/compiler.h LIB_H += ../include/linux/log2.h
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 14/18 tools: Adopt rounddown_pow_of_two and deps
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Will be used to make sure we pass a power of two when automatically setting up the perf_mmap addr range length, as the kernel code validating input on /proc/sys/kernel/perf_event_mlock_kb accepts any integer, if we plain use it to set up the mmap lenght, we may get an EINVAL when passing a non power of two.
--- tools/include/linux/log2.h | 134 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+)
tools/include/linux/log2.h +134 -0
@@ -13,6 +13,30 @@#define _TOOLS_LINUX_LOG2_H/* +* deal with unrepresentable constant logarithms +*/ +extern __attribute__((const, noreturn)) +int ____ilog2_NaN (void ); + +/* +* non-constant log of base 2 calculators +* - the arch may override these in asm/bitops.h if they can be implemented +* more efficiently than using fls() and fls64() +* - the arch is not required to handle n==0 if implementing the fallback +*/ +static inline __attribute__((const)) +int __ilog2_u32 (u32 n) +{ +return fls (n) -1 ; +} + +static inline __attribute__((const)) +int __ilog2_u64 (u64 n) +{ +return fls64 (n) -1 ; +} + +/* * Determine whether some value is a power of two, where zero is * *not* considered a power of two. */
@@ -23,4 +47,114 @@ bool is_power_of_2(unsigned long n) return (n != 0 && ((n & (n - 1)) == 0)); } +/* +* round down to nearest power of two +*/ +static inline __attribute__((const)) +unsigned long __rounddown_pow_of_two (unsigned long n) +{ +return 1UL << (fls_long (n) -1 ); +} + +/** +* ilog2 - log of base 2 of 32-bit or a 64-bit unsigned value +* @n - parameter +* +* constant-capable log of base 2 calculation +* - this can be used to initialise global variables from constant data, hence +* the massive ternary operator construction +* +* selects the appropriately-sized optimised version depending on sizeof(n) +*/ +#define ilog2 (n) \ +( \ + __builtin_constant_p(n) ? ( \ + (n) < 1 ? ____ilog2_NaN() : \ + (n) & (1ULL << 63) ? 63 : \ + (n) & (1ULL << 62) ? 62 : \ + (n) & (1ULL << 61) ? 61 : \ + (n) & (1ULL << 60) ? 60 : \ + (n) & (1ULL << 59) ? 59 : \ + (n) & (1ULL << 58) ? 58 : \ + (n) & (1ULL << 57) ? 57 : \ + (n) & (1ULL << 56) ? 56 : \ + (n) & (1ULL << 55) ? 55 : \ + (n) & (1ULL << 54) ? 54 : \ + (n) & (1ULL << 53) ? 53 : \ + (n) & (1ULL << 52) ? 52 : \ + (n) & (1ULL << 51) ? 51 : \ + (n) & (1ULL << 50) ? 50 : \ + (n) & (1ULL << 49) ? 49 : \ + (n) & (1ULL << 48) ? 48 : \ + (n) & (1ULL << 47) ? 47 : \ + (n) & (1ULL << 46) ? 46 : \ + (n) & (1ULL << 45) ? 45 : \ + (n) & (1ULL << 44) ? 44 : \ + (n) & (1ULL << 43) ? 43 : \ + (n) & (1ULL << 42) ? 42 : \ + (n) & (1ULL << 41) ? 41 : \ + (n) & (1ULL << 40) ? 40 : \ + (n) & (1ULL << 39) ? 39 : \ + (n) & (1ULL << 38) ? 38 : \ + (n) & (1ULL << 37) ? 37 : \ + (n) & (1ULL << 36) ? 36 : \ + (n) & (1ULL << 35) ? 35 : \ + (n) & (1ULL << 34) ? 34 : \ + (n) & (1ULL << 33) ? 33 : \ + (n) & (1ULL << 32) ? 32 : \ + (n) & (1ULL << 31) ? 31 : \ + (n) & (1ULL << 30) ? 30 : \ + (n) & (1ULL << 29) ? 29 : \ + (n) & (1ULL << 28) ? 28 : \ + (n) & (1ULL << 27) ? 27 : \ + (n) & (1ULL << 26) ? 26 : \ + (n) & (1ULL << 25) ? 25 : \ + (n) & (1ULL << 24) ? 24 : \ + (n) & (1ULL << 23) ? 23 : \ + (n) & (1ULL << 22) ? 22 : \ + (n) & (1ULL << 21) ? 21 : \ + (n) & (1ULL << 20) ? 20 : \ + (n) & (1ULL << 19) ? 19 : \ + (n) & (1ULL << 18) ? 18 : \ + (n) & (1ULL << 17) ? 17 : \ + (n) & (1ULL << 16) ? 16 : \ + (n) & (1ULL << 15) ? 15 : \ + (n) & (1ULL << 14) ? 14 : \ + (n) & (1ULL << 13) ? 13 : \ + (n) & (1ULL << 12) ? 12 : \ + (n) & (1ULL << 11) ? 11 : \ + (n) & (1ULL << 10) ? 10 : \ + (n) & (1ULL << 9) ? 9 : \ + (n) & (1ULL << 8) ? 8 : \ + (n) & (1ULL << 7) ? 7 : \ + (n) & (1ULL << 6) ? 6 : \ + (n) & (1ULL << 5) ? 5 : \ + (n) & (1ULL << 4) ? 4 : \ + (n) & (1ULL << 3) ? 3 : \ + (n) & (1ULL << 2) ? 2 : \ + (n) & (1ULL << 1) ? 1 : \ + (n) & (1ULL << 0) ? 0 : \ + ____ilog2_NaN() \ + ) : \ + (sizeof(n) <= 4) ? \ + __ilog2_u32(n) : \ + __ilog2_u64(n) \ + ) + + +/** +* rounddown_pow_of_two - round the given value down to nearest power of two +* @n - parameter +* +* round the given value down to the nearest power of two +* - the result is undefined when n == 0 +* - this can be used to initialise global variables from constant data +*/ +#define rounddown_pow_of_two (n) \ +( \ + __builtin_constant_p(n) ? ( \ + (1UL << ilog2(n))) : \ + __rounddown_pow_of_two(n) \ + ) +#endif /* _TOOLS_LINUX_LOG2_H */
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 15/18 perf tools: Make the mmap length autotuning more robust
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
If /proc/sys/kernel/perf_event_mlock_kb is not (power of 2 + PAGE_SIZE_in_kb) and we let the perf tools do mmap length autosizing based on that, then, for non-CAP_IPC_LOCK users when /proc/sys/kernel/perf_event_paranoid is > -1, then we get an -EINVAL that ends up in:
[acme@ssdandy linux]$ trace usleep 1
Invalid argument
[acme@ssdandy linux]$ perf record usleep 1
failed to mmap with 22 (Invalid argument)
After this fix:
[acme@ssdandy linux]$ trace usleep 1
<SNIP>
0.806 ( 0.006 ms): munmap(addr: 0x7f7e4740a000, len: 66467) = 0
0.869 ( 0.002 ms): brk( ) = 0x7bb000 0.873 ( 0.003 ms): brk(brk: 0x7dc000 ) = 0x7dc000 0.877 ( 0.001 ms): brk( ) = 0x7dc000 0.953 ( 0.058 ms): nanosleep(rqtp: 0x7fff26ab9420 ) = 0
0.959 ( 0.000 ms): exit_group(
[acme@ssdandy linux]$ perf record usleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.017 MB perf.data (~759 samples) ] [acme@ssdandy linux]$
--- tools/perf/util/evlist.c | 2 ++ 1 file changed, 2 insertions(+)
tools/perf/util/evlist.c +2 -0
@@ -909,6 +909,8 @@ static size_t perf_evlist__mmap_size(unsigned long pages) } pages = (max *1024 ) / page_size; +if (!is_power_of_2 (pages)) + pages =rounddown_pow_of_two (pages); }else if (!is_power_of_2 (pages))return 0 ;
Signature · 1 line
1.9.3
Re: [PATCH 15/18] perf tools: Make the mmap length autotuning more robust
Quoted 49 lines · Arnaldo Carvalho de Melo
From: Arnaldo Carvalho de Melo <[email protected]>
If
/proc/sys/kernel/perf_event_mlock_kbis not (power of 2 +PAGE_SIZE_in_kb) and we let the perf tools do mmap length autosizing based on that, then, for non-CAP_IPC_LOCK users when/proc/sys/kernel/perf_event_paranoidis > -1, then we get an-EINVALthat ends up in:[acme@ssdandy linux]$ trace usleep 1
Invalid argument
[acme@ssdandy linux]$ perf record usleep 1
failed to mmap with 22 (Invalid argument)After this fix:
[acme@ssdandy linux]$ trace usleep 1
<SNIP>
0.806 ( 0.006 ms):munmap(addr: 0x7f7e4740a000, len: 66467)= 00.869 ( 0.002 ms): brk( ) = 0x7bb000 0.873 ( 0.003 ms): brk(brk: 0x7dc000 ) = 0x7dc000 0.877 ( 0.001 ms): brk( ) = 0x7dc000 0.953 ( 0.058 ms): nanosleep(rqtp: 0x7fff26ab9420 ) = 00.959 ( 0.000 ms): exit_group(
[acme@ssdandy linux]$ perf record usleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.017 MB perf.data (~759 samples) ] [acme@ssdandy linux]$Cc Adrian Hunter <[email protected]>Cc Borislav Petkov <[email protected]>Cc David Ahern <[email protected]>Cc Don Zickus <[email protected]>Cc Frederic Weisbecker <[email protected]>Cc Jiri Olsa <[email protected]>Cc Mike Galbraith <[email protected]>Cc Namhyung Kim <[email protected]>Cc Paul Mackerras <[email protected]>Cc Peter Zijlstra <[email protected]>Cc Stephane Eranian <[email protected]>Signed-off-by Arnaldo Carvalho de Melo <[email protected]>--- tools/perf/util/evlist.c | 2 ++ 1 file changed, 2 insertions(+)tools/perf/util/evlist.c +0
-0
tools/perf/util/evlist.c static size_t perf_evlist__mmap_size(unsigned long pages) · line 913
Quoted 5 lines
tools/perf/util/evlist.c +2
-0@@ -909,6 +909,8 @@ static size_t perf_evlist__mmap_size(unsigned long pages) } pages = (max *1024 ) / page_size; +if (!is_power_of_2 (pages)) + pages =rounddown_pow_of_two (pages);
ok then ;-)
jirka
Arnaldo Carvalho de Melo
maintainerPATCH 16/18 tools: Adopt roundup_pow_of_two
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To replace equivalent code used in the mmap_pages command line parameter handling in tools/perf.
--- tools/include/linux/log2.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
tools/include/linux/log2.h +25 -0
@@ -48,6 +48,15 @@ bool is_power_of_2(unsigned long n) }/* +* round up to nearest power of two +*/ +static inline __attribute__((const)) +unsigned long __roundup_pow_of_two (unsigned long n) +{ +return 1UL <<fls_long (n -1 ); +} + +/* * round down to nearest power of two */ static inline __attribute__((const))
@@ -141,6 +150,22 @@ unsigned long __rounddown_pow_of_two(unsigned long n) __ilog2_u64(n) \ ) +/** +* roundup_pow_of_two - round the given value up to nearest power of two +* @n - parameter +* +* round the given value up to the nearest power of two +* - the result is undefined when n == 0 +* - this can be used to initialise global variables from constant data +*/ +#define roundup_pow_of_two (n) \ +( \ + __builtin_constant_p(n) ? ( \ + (n == 1) ? 1 : \ + (1UL << (ilog2((n) - 1) + 1)) \ + ) : \ + __roundup_pow_of_two(n) \ + )/** * rounddown_pow_of_two - round the given value down to nearest power of two
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 17/18 perf evlist: Use roundup_pow_of_two
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
And remove the equivalent next_pow2{_l} functions.
--- tools/perf/util/evlist.c | 2 +- tools/perf/util/util.h | 18 ------------------ 2 files changed, 1 insertion(+), 19 deletions(-)
tools/perf/util/evlist.c +1 -1
@@ -948,7 +948,7 @@ static long parse_pages_arg(const char *str, unsigned long min,/* leave number of pages at 0 */ }else if (!is_power_of_2 (pages)) {/* round pages up to next power of 2 */ - pages =next_pow2_l (pages); + pages =roundup_pow_of_two (pages);if (!pages)return -EINVAL ; pr_info("rounding mmap pages size to %lu bytes (%lu pages)\n",
tools/perf/util/util.h +0 -18
@@ -269,24 +269,6 @@ void event_attr_init(struct perf_event_attr *attr);#define _STR (x) #x#define STR (x) _STR(x) -static inline unsigned next_pow2 (unsigned x) -{ -if (!x) -return 1 ; -return 1ULL << (32 -__builtin_clz (x -1 )); -} - -static inline unsigned long next_pow2_l (unsigned long x) -{ -#if BITS_PER_LONG ==64 -if (x <= (1UL <<31 )) -return next_pow2 (x); -return (unsigned long )next_pow2 (x >>32 ) <<32 ; -#else -return next_pow2 (x); -#endif -} -size_t hex_width (u64 v);int hex2u64 (const char *ptr,u64 *val);
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 18/18 perf symbols: Fix use after free in filename__read_build_id
In reply to Arnaldo Carvalho de MeloFrom: Mitchell Krome <[email protected]>
In filename__read_build_id, phdr points to memory in buf, which gets realloced before a call to fseek that uses phdr->p_offset. This change stores the value of p_offset before buf is realloced, so the fseek can use the value safely.
--- tools/perf/util/symbol-minimal.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
tools/perf/util/symbol-minimal.c +6 -2
@@ -129,6 +129,7 @@ int filename__read_build_id(const char *filename, void *bf, size_t size)for (i =0 , phdr = buf; i < ehdr.e_phnum; i++, phdr++) {void *tmp; +long offset;if (need_swap) { phdr->p_type =bswap_32 (phdr->p_type);
@@ -140,12 +141,13 @@ int filename__read_build_id(const char *filename, void *bf, size_t size)continue ; buf_size = phdr->p_filesz; + offset = phdr->p_offset; tmp =realloc (buf, buf_size);if (tmp ==NULL ) goto out_free; buf = tmp; -fseek (fp, phdr->p_offset,SEEK_SET ); +fseek (fp, offset,SEEK_SET );if (fread (buf, buf_size,1 , fp) !=1 ) goto out_free;
@@ -178,6 +180,7 @@ int filename__read_build_id(const char *filename, void *bf, size_t size)for (i =0 , phdr = buf; i < ehdr.e_phnum; i++, phdr++) {void *tmp; +long offset;if (need_swap) { phdr->p_type =bswap_32 (phdr->p_type);
@@ -189,12 +192,13 @@ int filename__read_build_id(const char *filename, void *bf, size_t size)continue ; buf_size = phdr->p_filesz; + offset = phdr->p_offset; tmp =realloc (buf, buf_size);if (tmp ==NULL ) goto out_free; buf = tmp; -fseek (fp, phdr->p_offset,SEEK_SET ); +fseek (fp, offset,SEEK_SET );if (fread (buf, buf_size,1 , fp) !=1 ) goto out_free;
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerEm Tue, Dec 16, 2014 at 01:57:02PM -0300, Arnaldo Carvalho de Melo escreveu:
Quoted 6 lines
Hi Ingo,
Please consider pulling,
- Arnaldo
Quoted 8 lines
The following changes since commit
41e950c033b7df997d4b38653efe6554be9b96a7:Merge tag 'perf-core-for-mingo' of
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linuxinto perf/urgent (2014-12-12 09:09:52 +0100)are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-core-for-mingo
Ingo,
Please consider pulling the perf-core-for-mingo-2 signed tag
instead, it is exactly the same content modulo removal of some whitespaces at the end of a few lines in tools/perf/Makefile.perf that Jiri found while reading those patches,
Thanks,
- Arnaldo
Quoted 86 lines
for you to fetch changes up to
67195c75a87232f055ff415fc4624ef01f24fc3d:perf symbols: Fix use after free in
filename__read_build_id(2014-12-16 13:38:28 -0300)----------------------------------------------------------------
perf/core improvements and fixes:User visible:
- The mmap address range for the ring buffer now is calculated using the contents of
/proc/sys/kernel/perf_event_mlock_kb.This fixes an
-EPERMcase where 'trace' was trying to use more than what configured onperf_event_mlock_kb. (Arnaldo Carvalho de Melo)Infrastructure:
- Move bitops definitions so that they match the header file hierarchy in the kernel sources where that code came from. (Arnaldo Carvalho de Melo)
- Adopt round{down,up}_pow_of_two from the kernel and use it instead of equivalent code, so that we reuse more kernel code and make
tools/look more like kernel source code, to encourage further contributions from kernel hackers (Arnaldo Carvalho de Melo)- Fix use after free in
filename__read_build_id(Mitchell Krome)Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Arnaldo Carvalho de Melo (17):
perf evlist: Fixup brown paper bag on "hint" for --mmap-pages cmdline arg perf evlist: Clarifysterror_mmapvariable names
perf evlist: Improve thestrerror_mmapmethod
perf trace: Let theperf_evlist__mmapautosize the number of pages to use perf evlist: Do not use hard coded value for ammap_pagesdefault
tools: Move__ffsimplementation totools/include/asm-generic/bitops/__ffs.h
tools: Move code originally fromlinux/log2.htotools/include/linux/
tools: Move code originally fromasm-generic/atomic.hintotools/include/asm-generic/
tools: Whitespace prep patches for movingbitops.h
tools lib: Moveasm-generic/bitops/find.hcode totools/includeandtools/lib
tools: Introduceasm-generic/bitops.h
tools: Movebitops.hfromtools/perf/utiltotools/
tools: Adoptfls_longand deps
tools: Adoptrounddown_pow_of_twoand deps
perf tools: Make the mmap length autotuning more robust
tools: Adoptroundup_pow_of_two
perf evlist: Useroundup_pow_of_twoMitchell Krome (1):
perf symbols: Fix use after free infilename__read_build_idtools/include/asm-generic/bitops.h | 27 +++++ tools/include/asm-generic/bitops/__ffs.h | 43 +++++++ tools/include/asm-generic/bitops/__fls.h | 1 + tools/include/asm-generic/bitops/atomic.h | 22 ++++ tools/include/asm-generic/bitops/find.h | 33 ++++++ tools/include/asm-generic/bitops/fls.h | 1 + tools/include/asm-generic/bitops/fls64.h | 1 + tools/include/linux/bitops.h | 53 +++++++++ tools/include/linux/log2.h | 185 ++++++++++++++++++++++++++++++ tools/lib/util/find_next_bit.c | 89 ++++++++++++++ tools/perf/MANIFEST | 13 ++- tools/perf/Makefile.perf | 14 ++- tools/perf/builtin-trace.c | 2 +- tools/perf/util/evlist.c | 46 ++++++-- tools/perf/util/include/linux/bitops.h | 162 -------------------------- tools/perf/util/symbol-minimal.c | 8 +- tools/perf/util/util.h | 29 ----- 17 files changed, 522 insertions(+), 207 deletions(-) create mode 100644 tools/include/asm-generic/bitops.h create mode 100644 tools/include/asm-generic/bitops/__ffs.h create mode 100644 tools/include/asm-generic/bitops/__fls.h create mode 100644 tools/include/asm-generic/bitops/atomic.h create mode 100644 tools/include/asm-generic/bitops/find.h create mode 100644 tools/include/asm-generic/bitops/fls.h create mode 100644 tools/include/asm-generic/bitops/fls64.h create mode 100644 tools/include/linux/bitops.h create mode 100644 tools/include/linux/log2.h create mode 100644 tools/lib/util/find_next_bit.c delete mode 100644 tools/perf/util/include/linux/bitops.h--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Quoted 14 lines · Arnaldo Carvalho de Melo
Em Tue, Dec 16, 2014 at 01:57:02PM -0300, Arnaldo Carvalho de Melo escreveu:
Quoted 13 lines
Hi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit
41e950c033b7df997d4b38653efe6554be9b96a7:Merge tag 'perf-core-for-mingo' of
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linuxinto perf/urgent (2014-12-12 09:09:52 +0100)are available in the git repository at:
Quoted 8 lines
Quoted 1 line
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-core-for-mingoIngo,
Please consider pulling the perf-core-for-mingo-2 signed tag
instead, it is exactly the same content modulo removal of some whitespaces at the end of a few lines intools/perf/Makefile.perfthat Jiri found while reading those patches,
Pulled, thanks a lot!
Ingo