perf/urgent fixes
Arnaldo Carvalho de Melo
maintainerHi Ingo,
Please consider pulling,
- Arnaldo
Test results at the end of this message, as usual.
The following changes since commit d1e7e602cd64cf61f87dbf30df07c24df9eb1d99:
perf/x86/intel: Move regs->flags EXACT bit init (2018-04-05 09:28:40 +0200)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-urgent-for-mingo-4.17-20180409
for you to fetch changes up to fcbd8fa44664e99a5d8c7ab97f1afdd82472f973:
perf tests clang: Fix function name for clang IR test (2018-04-09 11:13:09 -0300)
----------------------------------------------------------------
perf/urgent fixes:
. Fix the --stdio2/TUI annotate output to include group details,
be it for a recorded '{a,b,f}' explicit event group or when forcing group display using 'perf report --group' for a set of events not recorded as a group (Arnaldo Carvalho de Melo)
. Fix display artifacts in the ui browser (base class for the
annotate and main report/top TUI browser) related to the extra title lines work (Arnaldo Carvalho de Melo)
. perf auxtrace refactorings, leftovers from a previously partially
processed patchset (Adrian Hunter)
. Fix the builtin clang build (Sandipan Das, Arnaldo Carvalho de Melo)
- Synchronize i915_drm.h, silencing a perf build warning and in the process automagically adding support for a new ioctl command (Arnaldo Carvalho de Melo)
----------------------------------------------------------------
Adrian Hunter (2):
perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
Arnaldo Carvalho de Melo (8):
perf annotate: Show group details on the title line
perf annotate browser: Fixup vertical line separating metrics from instructions perf ui browser: Fixup cleaning unused lines at the bottom
perf report: Remove duplicated 'samples' in lost samples warning tools headers uapi: Synchronize i915_drm.h
perf hists browser: Show extra_title_lines in the 'D' debug hotkey perf hists browser: Remove leftover from row returned from refresh perf tools: No need to include namespaces.h in util.h
Sandipan Das (3):
perf tools: Fix perf builds with clang support perf clang: Add support for recent clang versions perf tests clang: Fix function name for clang IR test
tools/include/uapi/drm/i915_drm.h | 112 +++++++++++++++++++++++++++++++++++-- tools/perf/Makefile.perf | 3 +- tools/perf/ui/browser.c | 4 +- tools/perf/ui/browsers/annotate.c | 2 +- tools/perf/ui/browsers/hists.c | 13 ++--- tools/perf/util/annotate.c | 7 ++- tools/perf/util/auxtrace.c | 72 +++++++++++------------- tools/perf/util/c++/clang-test.cpp | 2 +- tools/perf/util/c++/clang.cpp | 11 +++- tools/perf/util/session.c | 2 +- tools/perf/util/util.h | 4 +- 11 files changed, 169 insertions(+), 63 deletions(-)
Test results:
The first ones are container (docker) based builds of tools/perf with and without libelf support. Where clang is available, it is also used to build perf with/without libelf.
The objtool and samples/bpf/ builds are disabled now that I'm switching from using the sources in a local volume to fetching them from a http server to build it inside the container, to make it easier to build in a container cluster. Those will come back later.
Several are cross builds, the ones with -x-ARCH and the android one, and those may not have all the features built, due to lack of multi-arch devel packages, available and being used so far on just a few, like debian:experimental-x-{arm64,mipsel}.
The 'perf test' one will perform a variety of tests exercising tools/perf/util/, tools/lib/{bpf,traceevent,etc}, as well as run perf commands with a variety of command line event specifications to then intercept the sys_perf_event syscall to check that the perf_event_attr fields are set up as expected, among a variety of other unit tests.
Then there is the 'make -C tools/perf build-test' ones, that build tools/perf/ with a variety of feature sets, exercising the build with an incomplete set of features as well as with a complete one. It is planned to have it run on each of the containers mentioned above, using some container orchestration infrastructure. Get in contact if interested in helping having this in place.
# dm 1 alpine:3.4 : Ok gcc (Alpine 5.3.0) 5.3.0 2 alpine:3.5 : Ok gcc (Alpine 6.2.1) 6.2.1 20160822 3 alpine:3.6 : Ok gcc (Alpine 6.3.0) 6.3.0 4 alpine:3.7 : Ok gcc (Alpine 6.4.0) 6.4.0 5 alpine:edge : Ok gcc (Alpine 6.4.0) 6.4.0 6 amazonlinux:1 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11) 7 amazonlinux:2 : Ok gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2) 8 android-ndk:r12b-arm : Ok arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease) 9 android-ndk:r15c-arm : Ok arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease) 10 centos:5 : Ok gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55) 11 centos:6 : Ok gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18) 12 centos:7 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) 13 debian:7 : Ok gcc (Debian 4.7.2-5) 4.7.2 14 debian:8 : Ok gcc (Debian 4.9.2-10+deb8u1) 4.9.2 15 debian:9 : Ok gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 16 debian:experimental : Ok gcc (Debian 7.3.0-14) 7.3.0 17 debian:experimental-x-arm64 : Ok aarch64-linux-gnu-gcc (Debian 7.3.0-12) 7.3.0 18 debian:experimental-x-mips : Ok mips-linux-gnu-gcc (Debian 7.3.0-12) 7.3.0 19 debian:experimental-x-mips64 : Ok mips64-linux-gnuabi64-gcc (Debian 7.3.0-12) 7.3.0 20 debian:experimental-x-mipsel : Ok mipsel-linux-gnu-gcc (Debian 7.3.0-12) 7.3.0 21 fedora:20 : Ok gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7) 22 fedora:21 : Ok gcc (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6) 23 fedora:22 : Ok gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6) 24 fedora:23 : Ok gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6) 25 fedora:24 : Ok gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1) 26 fedora:24-x-ARC-uClibc : Ok arc-linux-gcc (ARCompact ISA Linux uClibc toolchain 2017.09-rc2) 7.1.1 20170710 27 fedora:25 : Ok gcc (GCC) 6.4.1 20170727 (Red Hat 6.4.1-1) 28 fedora:26 : Ok gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2) 29 fedora:27 : Ok gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5) 30 fedora:28 : Ok gcc (GCC) 8.0.1 20180324 (Red Hat 8.0.1-0.20) 31 fedora:rawhide : Ok gcc (GCC) 8.0.1 20180324 (Red Hat 8.0.1-0.20) 32 gentoo-stage3-amd64:latest : Ok gcc (Gentoo 6.4.0-r1 p1.3) 6.4.0 33 mageia:5 : Ok gcc (GCC) 4.9.2 34 mageia:6 : Ok gcc (Mageia 5.5.0-1.mga6) 5.5.0 35 opensuse:42.1 : Ok gcc (SUSE Linux) 4.8.5 36 opensuse:42.2 : Ok gcc (SUSE Linux) 4.8.5 37 opensuse:42.3 : Ok gcc (SUSE Linux) 4.8.5 38 opensuse:tumbleweed : Ok gcc (SUSE Linux) 7.3.1 20180307 [gcc-7-branch revision 258314] 39 oraclelinux:6 : Ok gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18) 40 oraclelinux:7 : Ok gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16.0.3) 41 ubuntu:12.04.5 : Ok gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 42 ubuntu:14.04.4 : Ok gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 43 ubuntu:14.04.4-x-linaro-arm64 : Ok aarch64-linux-gnu-gcc (Linaro GCC 5.4-2017.05) 5.4.1 20170404 44 ubuntu:15.04 : Ok gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2 45 ubuntu:16.04 : Ok gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 46 ubuntu:16.04-x-arm : Ok arm-linux-gnueabihf-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 47 ubuntu:16.04-x-arm64 : Ok aarch64-linux-gnu-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 48 ubuntu:16.04-x-powerpc : Ok powerpc-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 49 ubuntu:16.04-x-powerpc64 : Ok powerpc64-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 50 ubuntu:16.04-x-powerpc64el : Ok powerpc64le-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 51 ubuntu:16.04-x-s390 : Ok s390x-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 52 ubuntu:16.10 : Ok gcc (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005 53 ubuntu:17.04 : Ok gcc (Ubuntu 6.3.0-12ubuntu2) 6.3.0 20170406 54 ubuntu:17.10 : Ok gcc (Ubuntu 7.2.0-8ubuntu3) 7.2.0 55 ubuntu:18.04 : Ok gcc (Ubuntu 7.2.0-16ubuntu1) 7.2.0
# uname -a Linux jouet 4.16.0-rc7 #3 SMP Mon Mar 26 14:35:30 -03 2018 x86_64 x86_64 x86_64 GNU/Linux # perf test 1: vmlinux symtab matches kallsyms : Ok 2: Detect openat syscall event : Ok 3: Detect openat syscall event on all cpus : Ok 4: Read samples using the mmap interface : Ok 5: Test data source output : Ok 6: Parse event definition strings : Ok 7: Simple expression parser : Ok 8: PERF_RECORD_* events & perf_sample fields : Ok 9: Parse perf pmu format : Ok 10: DSO data read : Ok 11: DSO data cache : Ok 12: DSO data reopen : Ok 13: Roundtrip evsel->name : Ok 14: Parse sched tracepoints fields : Ok 15: syscalls:sys_enter_openat event fields : Ok 16: Setup struct perf_event_attr : Ok 17: Match and link multiple hists : Ok 18: 'import perf' in python : Ok 19: Breakpoint overflow signal handler : Ok 20: Breakpoint overflow sampling : Ok 21: Breakpoint accounting : Skip 22: Number of exit events of a simple workload : Ok 23: Software clock events period values : Ok 24: Object code reading : Ok 25: Sample parsing : Ok 26: Use a dummy software event to keep tracking : Ok 27: Parse with no sample_id_all bit set : Ok 28: Filter hist entries : Ok 29: Lookup mmap thread : Ok 30: Share thread mg : Ok 31: Sort output of hist entries : Ok 32: Cumulate child hist entries : Ok 33: Track with sched_switch : Ok 34: Filter fds with revents mask in a fdarray : Ok 35: Add fd to a fdarray, making it autogrow : Ok 36: kmod_path__parse : Ok 37: Thread map : Ok 38: LLVM search and compile : 38.1: Basic BPF llvm compile : Ok 38.2: kbuild searching : Ok 38.3: Compile source for BPF prologue generation : Ok 38.4: Compile source for BPF relocation : Ok 39: Session topology : Ok 40: BPF filter : 40.1: Basic BPF filtering : Ok 40.2: BPF pinning : Ok 40.3: BPF prologue generation : Ok 40.4: BPF relocation checker : Ok 41: Synthesize thread map : Ok 42: Remove thread map : Ok 43: Synthesize cpu map : Ok 44: Synthesize stat config : Ok 45: Synthesize stat : Ok 46: Synthesize stat round : Ok 47: Synthesize attr update : Ok 48: Event times : Ok 49: Read backward ring buffer : Ok 50: Print cpu map : Ok 51: Probe SDT events : Ok 52: is_printable_array : Ok 53: Print bitmap : Ok 54: perf hooks : Ok 55: builtin clang support : Skip (not compiled in) 56: unit_number__scnprintf : Ok 57: mem2node : Ok 58: x86 rdpmc : Ok 59: Convert perf time to TSC : Ok 60: DWARF unwind : Ok 61: x86 instruction decoder - new instructions : Ok 62: Use vfs_getname probe to get syscall args filenames : Ok 63: probe libc's inet_pton & backtrace it with ping : Ok 64: Check open filename arg using perf trace + vfs_getname: Ok 65: probe libc's inet_pton & backtrace it with ping : Ok 66: Add vfs_getname probe to get syscall args filenames : Ok #
$ make -C tools/perf build-test
make: Entering directory '/home/acme/git/perf/tools/perf'
- tarpkg: ./tests/perf-targz-src-pkg .
make_no_libunwind_O: make NO_LIBUNWIND=1
make_clean_all_O: make clean all
make_no_ui_O: make NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
make_with_clangllvm_O: make LIBCLANGLLVM=1
make_no_newt_O: make NO_NEWT=1
make_no_libbpf_O: make NO_LIBBPF=1
make_no_auxtrace_O: make NO_AUXTRACE=1
make_no_libdw_dwarf_unwind_O: make NO_LIBDW_DWARF_UNWIND=1
make_perf_o_O: make perf.o
make_static_O: make LDFLAGS=-static
make_no_libaudit_O: make NO_LIBAUDIT=1
make_util_pmu_bison_o_O: make util/pmu-bison.o
make_no_scripts_O: make NO_LIBPYTHON=1 NO_LIBPERL=1
make_install_prefix_O: make install prefix=/tmp/krava
make_no_libperl_O: make NO_LIBPERL=1
make_minimal_O: make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1
make_install_O: make install
make_with_babeltrace_O: make LIBBABELTRACE=1
make_pure_O: make
make_no_libpython_O: make NO_LIBPYTHON=1
make_tags_O: make tags
make_install_bin_O: make install-bin
make_help_O: make help
make_no_backtrace_O: make NO_BACKTRACE=1
make_no_demangle_O: make NO_DEMANGLE=1
make_doc_O: make doc
make_install_prefix_slash_O: make install prefix=/tmp/krava/
make_no_libbionic_O: make NO_LIBBIONIC=1
make_no_gtk2_O: make NO_GTK2=1
make_no_libelf_O: make NO_LIBELF=1
make_no_slang_O: make NO_SLANG=1
make_no_libnuma_O: make NO_LIBNUMA=1
make_debug_O: make DEBUG=1
make_util_map_o_O: make util/map.o
OK
make: Leaving directory '/home/acme/git/perf/tools/perf'
$Arnaldo Carvalho de Melo
maintainerPATCH 1/13 perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
From: Adrian Hunter <[email protected]>
In preparation for supporting AUX area sampling buffers, auxtrace_queues__add_buffer() needs to be more generic. To that end, move memory allocation for struct buffer into it.
--- tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 30 deletions(-)
tools/perf/util/auxtrace.c +24 -30
@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,struct auxtrace_buffer *buffer, struct auxtrace_buffer **buffer_ptr) { - int err; + int err = -ENOMEM; + + buffer =memdup (buffer,sizeof (*buffer)); +if (!buffer) +return -ENOMEM ;if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset +
@@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, }else if (perf_data__is_pipe (session->data)) { buffer->data =auxtrace_copy_data (buffer->size, session);if (!buffer->data) -return -ENOMEM ; + goto out_free; buffer->data_needs_freeing = true; }else if (BITS_PER_LONG ==32 && buffer->size >BUFFER_LIMIT_FOR_32_BIT ) { err =auxtrace_queues__split_buffer (queues, idx, buffer);if (err) -return err; + goto out_free; } err =auxtrace_queues__queue_buffer (queues, idx, buffer);if (err) -return err; + goto out_free;/* FIXME: Doesn't work for split buffer */ if (buffer_ptr) *buffer_ptr = buffer;return 0 ; + +out_free: +auxtrace_buffer__free (buffer); +return err; }static bool filter_cpu (struct perf_session *session,int cpu)
@@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, union perf_event *event, off_t data_offset, struct auxtrace_buffer **buffer_ptr) { - struct auxtrace_buffer *buffer; -unsigned int idx; -int err; + struct auxtrace_buffer buffer = { + .pid =-1 , + .tid = event->auxtrace.tid, + .cpu = event->auxtrace.cpu, + .data_offset = data_offset, + .offset = event->auxtrace.offset, + .reference = event->auxtrace.reference, + .size = event->auxtrace.size, + }; +unsigned int idx = event->auxtrace.idx;if (filter_cpu (session, event->auxtrace.cpu))return 0 ; - buffer =zalloc (sizeof (struct auxtrace_buffer )); -if (!buffer) -return -ENOMEM ; - - buffer->pid =-1 ; - buffer->tid = event->auxtrace.tid; - buffer->cpu = event->auxtrace.cpu; - buffer->data_offset = data_offset; - buffer->offset = event->auxtrace.offset; - buffer->reference = event->auxtrace.reference; - buffer->size = event->auxtrace.size; - idx = event->auxtrace.idx; - - err =auxtrace_queues__add_buffer (queues, session, idx, buffer, - buffer_ptr); -if (err) - goto out_err; - -return 0 ; - -out_err: -auxtrace_buffer__free (buffer); -return err; +return auxtrace_queues__add_buffer (queues, session, idx, &buffer, + buffer_ptr); } static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 2/13 perf annotate: Show group details on the title line
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To match what is shown in the main 'perf report/top' title lines, i.e. if a group is being shown, either a real group (recorded with "-e '{a,b,c}') or a forced group (using 'perf report --group' for a perf.data file recorded without {}) we will show multiple columns, one per event, but we were failing to show the group details, so, for:
# perf report --header-only | grep cmdline
# cmdline : /home/acme/bin/perf record -e {cycles,instructions,cache-misses}
# perf report --groupThe first line was showing just "cycles", now it shows the correct line, which is:
Samples: 578 of events 'anon group { cycles, instructions, cache-misses }', 4000 Hz, Event count (approx.): 487421794 syscall_return_via_sysret /lib/modules/4.16.0-rc7/build/vmlinux
0.22 2.97 0.00 │ ↓ jmp 6c
│ mov %cr3,%rdi
1.33 10.89 4.00 │ ↓ jmp 62
│ mov %rdi,%rax<SNIP>
--- tools/perf/util/annotate.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
tools/perf/util/annotate.c +5 -2
@@ -2600,7 +2600,7 @@ int __annotation__scnprintf_samples_period(struct annotation *notes, bool show_freq) {const char *ev_name =perf_evsel__name (evsel); -char ref[30 ] =" show reference callgraph, " ; +char buf[1024 ], ref[30 ] =" show reference callgraph, " ;char sample_freq_str[64 ] ="" ;unsigned long nr_samples =0 ;int nr_members =1 ;
@@ -2609,8 +2609,11 @@ int __annotation__scnprintf_samples_period(struct annotation *notes,char unit;int i; -if (perf_evsel__is_group_event (evsel)) +if (perf_evsel__is_group_event (evsel)) { +perf_evsel__group_desc (evsel, buf,sizeof (buf)); + ev_name = buf; nr_members = evsel->nr_members; + }for (i =0 ; i < nr_members; i++) {struct sym_hist *ah =annotation__histogram (notes, evsel->idx + i);
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 3/13 perf annotate browser: Fixup vertical line separating metrics from instructions
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Now that we can have extra title lines we should use ui_browser->rows and not ->height when drawing lines, as it will use ui_browser__gotorc() and that will take the extra title lines into account, which was causing an off by one at the end of the vertical line drawn by __ui_browser__vline(), fix it.
The visual effect was that the last line, with status messages, was being overwritten by the vertical line, looking like:
Press 'h' for help on│key bindings
--- tools/perf/ui/browsers/annotate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/ui/browsers/annotate.c +1 -1
@@ -218,7 +218,7 @@ static unsigned int annotate_browser__refresh(struct ui_browser *browser)annotate_browser__draw_current_jump (browser);ui_browser__set_color (browser,HE_COLORSET_NORMAL ); -__ui_browser__vline (browser, pcnt_width,0 , browser->height -1 ); +__ui_browser__vline (browser, pcnt_width,0 , browser->rows -1 );return ret; }
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 4/13 perf ui browser: Fixup cleaning unused lines at the bottom
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Now that we can have extra title lines we should use ui_browser->rows and not ->height when drawing lines, as well as adding ui_browser->extra_title_lines to browser->y when cleaning unused lines at the bottom, otherwise we end up clobbering with spaces the last line just shown by ui_browser->refresh() routine.
--- tools/perf/ui/browser.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/ui/browser.c +2 -2
@@ -343,8 +343,8 @@ static int __ui_browser__refresh(struct ui_browser *browser)else width +=1 ; -SLsmg_fill_region (browser->y + row, browser->x, - browser->height - row, width,' ' ); +SLsmg_fill_region (browser->y + row + browser->extra_title_lines, browser->x, + browser->rows - row, width,' ' );return 0 ; }
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 5/13 perf report: Remove duplicated 'samples' in lost samples warning
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
The following message, emitted when samples are lost due to system overload, had one 'samples' too many, ditch it:
Processed 25333 samples and lost 20.88% samples!
--- tools/perf/util/session.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/session.c +1 -1
@@ -1591,7 +1591,7 @@ static void perf_session__warn_about_errors(const struct perf_session *session) drop_rate = (double )stats->total_lost_samples / (double ) (stats->nr_events[PERF_RECORD_SAMPLE ] + stats->total_lost_samples);if (drop_rate >0.05 ) { -ui__warning ("Processed %" PRIu64" samples and lost %3.2f%% samples!\n\n" , +ui__warning ("Processed %" PRIu64" samples and lost %3.2f%%!\n\n" , stats->nr_events[PERF_RECORD_SAMPLE ] + stats->total_lost_samples, drop_rate *100.0 ); }
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 6/13 tools headers uapi: Synchronize i915_drm.h
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To pick up the changes in:
c822e0591855 drm/i915: expose rcs topology through query uAPI a446ae2c6e65 drm/i915: add query uAPI
This affects 'perf trace', that automagically gets the definition of the new I915_QUERY DRM ioctl:
--- /tmp/build/perf/trace/beauty/generated/ioctl/drm_ioctl_array.c.old 2018-04-05 14:38:33.660111995 -0300 +++ /tmp/build/perf/trace/beauty/generated/ioctl/drm_ioctl_array.c 2018-04-05 14:40:17.923283914 -0300 @@ -158,4 +158,5 @@
[DRM_COMMAND_BASE + 0x36] = "I915_PERF_OPEN",
[DRM_COMMAND_BASE + 0x37] = "I915_PERF_ADD_CONFIG",
[DRM_COMMAND_BASE + 0x38] = "I915_PERF_REMOVE_CONFIG", + [DRM_COMMAND_BASE + 0x39] = "I915_QUERY",
};
I.e. on systems where this is used it will appear when, for instance, one does a system wide 'perf trace' session looking for ioctl calls, just like it does with the previously implemented DRM_I915 ioctls:
# perf trace -e ioctl --filter-pids 2190 <SNIP> 4346.232 ( 0.012 ms): gnome-shell/1455 ioctl(fd: 8</dev/dri/card0>, cmd: DRM_I915_GEM_BUSY, arg: 0x7fff3b0cd910) = 0 4346.246 ( 0.002 ms): gnome-shell/1455 ioctl(fd: 8</dev/dri/card0>, cmd: DRM_I915_GEM_MADVISE, arg: 0x7fff3b0cd980) = 0 4346.252 ( 0.002 ms): gnome-shell/1455 ioctl(fd: 8</dev/dri/card0>, cmd: DRM_I915_GEM_BUSY, arg: 0x7fff3b0cdb00) = 0 <SNIP>
This silences this perf tools build warning:
Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h'
--- tools/include/uapi/drm/i915_drm.h | 112 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 108 insertions(+), 4 deletions(-)
tools/include/uapi/drm/i915_drm.h +108 -4
@@ -318,6 +318,7 @@ typedef struct _drm_i915_sarea {#define DRM_I915_PERF_OPEN 0x36#define DRM_I915_PERF_ADD_CONFIG 0x37#define DRM_I915_PERF_REMOVE_CONFIG 0x38 +#define DRM_I915_QUERY 0x39#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
@@ -375,6 +376,7 @@ typedef struct _drm_i915_sarea {#define DRM_IOCTL_I915_PERF_OPEN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param)#define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config)#define DRM_IOCTL_I915_PERF_REMOVE_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64) +#define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query)/* Allow drivers to submit batchbuffers directly to hardware, relying * on the security mechanisms provided by hardware.
@@ -1358,7 +1360,9 @@ struct drm_intel_overlay_attrs {* active on a given plane. */ -#define I915_SET_COLORKEY_NONE (1<<0)/* disable color key matching */ +#define I915_SET_COLORKEY_NONE (1<<0)/* Deprecated. Instead set +* flags==0 to disable colorkeying. +*/ #define I915_SET_COLORKEY_DESTINATION (1<<1)#define I915_SET_COLORKEY_SOURCE (1<<2)struct drm_intel_sprite_colorkey {
@@ -1604,15 +1608,115 @@ struct drm_i915_perf_oa_config {__u32 n_flex_regs;/* -* These fields are pointers to tuples of u32 values (register -* address, value). For example the expected length of the buffer -* pointed by mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs). +* These fields are pointers to tuples of u32 values (register address, +* value). For example the expected length of the buffer pointed by +* mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs). */ __u64 mux_regs_ptr;__u64 boolean_regs_ptr;__u64 flex_regs_ptr; }; +struct drm_i915_query_item { +__u64 query_id; +#define DRM_I915_QUERY_TOPOLOGY_INFO 1 + +/* +* When set to zero by userspace, this is filled with the size of the +* data to be written at the data_ptr pointer. The kernel sets this +* value to a negative value to signal an error on a particular query +* item. +*/ +__s32 length; + +/* +* Unused for now. Must be cleared to zero. +*/ +__u32 flags; + +/* +* Data will be written at the location pointed by data_ptr when the +* value of length matches the length of the data to be written by the +* kernel. +*/ +__u64 data_ptr; +}; + +struct drm_i915_query { +__u32 num_items; + +/* +* Unused for now. Must be cleared to zero. +*/ +__u32 flags; + +/* +* This points to an array of num_items drm_i915_query_item structures. +*/ +__u64 items_ptr; +}; + +/* +* Data written by the kernel with query DRM_I915_QUERY_TOPOLOGY_INFO : +* +* data: contains the 3 pieces of information : +* +* - the slice mask with one bit per slice telling whether a slice is +* available. The availability of slice X can be queried with the following +* formula : +* +* (data[X / 8] >> (X % 8)) & 1 +* +* - the subslice mask for each slice with one bit per subslice telling +* whether a subslice is available. The availability of subslice Y in slice +* X can be queried with the following formula : +* +* (data[subslice_offset + +* X * subslice_stride + +* Y / 8] >> (Y % 8)) & 1 +* +* - the EU mask for each subslice in each slice with one bit per EU telling +* whether an EU is available. The availability of EU Z in subslice Y in +* slice X can be queried with the following formula : +* +* (data[eu_offset + +* (X * max_subslices + Y) * eu_stride + +* Z / 8] >> (Z % 8)) & 1 +*/ +struct drm_i915_query_topology_info { +/* +* Unused for now. Must be cleared to zero. +*/ +__u16 flags; + +__u16 max_slices; +__u16 max_subslices; +__u16 max_eus_per_subslice; + +/* +* Offset in data[] at which the subslice masks are stored. +*/ +__u16 subslice_offset; + +/* +* Stride at which each of the subslice masks for each slice are +* stored. +*/ +__u16 subslice_stride; + +/* +* Offset in data[] at which the EU masks are stored. +*/ +__u16 eu_offset; + +/* +* Stride at which each of the EU masks for each subslice are stored. +*/ +__u16 eu_stride; + +__u8 data[]; +}; +#if defined(__cplusplus) }#endif
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 7/13 perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
In reply to Arnaldo Carvalho de MeloFrom: Adrian Hunter <[email protected]>
In preparation for supporting AUX area sampling buffers, auxtrace_queues__add_buffer() needs to be more generic. To that end, move CPU filtering into it.
--- tools/perf/util/auxtrace.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
tools/perf/util/auxtrace.c +10 -10
@@ -302,6 +302,13 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,return 0 ; } +static bool filter_cpu (struct perf_session *session,int cpu) +{ +unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap; + +return cpu_bitmap && cpu !=-1 && !test_bit (cpu, cpu_bitmap); +} + static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, struct perf_session *session, unsigned int idx,
@@ -310,6 +317,9 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, {int err = -ENOMEM ; +if (filter_cpu (session, buffer->cpu)) +return 0 ; + buffer =memdup (buffer,sizeof (*buffer));if (!buffer)return -ENOMEM ;
@@ -344,13 +354,6 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,return err; } -static bool filter_cpu (struct perf_session *session,int cpu) -{ -unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap; - -return cpu_bitmap && cpu !=-1 && !test_bit (cpu, cpu_bitmap); -} - int auxtrace_queues__add_event(struct auxtrace_queues *queues, struct perf_session *session, union perf_event *event, off_t data_offset,
@@ -367,9 +370,6 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, };unsigned int idx = event->auxtrace.idx; -if (filter_cpu (session, event->auxtrace.cpu)) -return 0 ; -return auxtrace_queues__add_buffer (queues, session, idx, &buffer, buffer_ptr); }
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 8/13 perf hists browser: Show extra_title_lines in the 'D' debug hotkey
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To help in fixing problems in the browser.
--- tools/perf/ui/browsers/hists.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
tools/perf/ui/browsers/hists.c +2 -1
@@ -659,9 +659,10 @@ int hist_browser__run(struct hist_browser *browser, const char *help,struct hist_entry *h =rb_entry (browser->b.top, struct hist_entry, rb_node);ui_helpline__pop (); - ui_helpline__fpush("%d: nr_ent=(%d,%d), rows=%d, idx=%d, fve: idx=%d, row_off=%d, nrows=%d", + ui_helpline__fpush("%d: nr_ent=(%d,%d), etl: %d, rows=%d, idx=%d, fve: idx=%d, row_off=%d, nrows=%d", seq++, browser->b.nr_entries, browser->hists->nr_entries, + browser->b.extra_title_lines, browser->b.rows, browser->b.index, browser->b.top_idx,
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 9/13 perf hists browser: Remove leftover from row returned from refresh
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
The per-browser screen refresh routine (ui_browser->refresh()) should return the first row that should be cleaned after the rows just printed, in case not all rows available on the screen gets filled.
When moving the extra title lines logic from the hists browser to the generic ui_browser class, one piece of that logic remained in the hists browser and then when going back from the annotate browser to the hists browser in a case where fewer lines were displayed in the hists browser, for instance when filtering the entries per substring, one line of the annotate browser would remain on the screen, fix that.
Example of the screen artifact:
================================================================================
Samples: 73K of event 'cycles:ppp', 4000 Hz, Event count (approx.): 45172901394
Overhead Shared O Symbol 0.30% [kernel] [k] __indirect_thunk_start 0.09% [kernel] [k] __x86_indirect_thunk_r10
│ lfence
================================================================================
Here from 'perf top' the view was zoomed with '/thunk' to functions having that substring, then the first was annotated and from the annotate browser ESC was pressed, then the first lines were overwritten, but the 'lfence' line remained due to the off by one bug fixed in this cset.
--- tools/perf/ui/browsers/hists.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-)
tools/perf/ui/browsers/hists.c +2 -8
@@ -1744,17 +1744,11 @@ static void ui_browser__hists_init_top(struct ui_browser *browser)static unsigned int hist_browser__refresh (struct ui_browser *browser) {unsigned row =0 ; -u16 header_offset =0 ;struct rb_node *nd; struct hist_browser *hb = container_of(browser, struct hist_browser, b); -struct hists *hists = hb->hists; - -if (hb->show_headers) { -struct perf_hpp_list *hpp_list = hists->hpp_list; +if (hb->show_headers)hist_browser__show_headers (hb); - header_offset = hpp_list->nr_header_lines; - }ui_browser__hists_init_top (browser); hb->he_selection =NULL ;
@@ -1792,7 +1786,7 @@ static unsigned int hist_browser__refresh(struct ui_browser *browser)break ; } -return row + header_offset; +return row; } static struct rb_node *hists__filter_entries(struct rb_node *nd,
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 10/13 perf tools: No need to include namespaces.h in util.h
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
The only thing that is needed there is a forward declaration for 'struct nsinfo', so disentanble this, which in turns allows built-in clang builds, i.e. 'make LIBCLANGLLVM=1 -C tools/perf'.
--- tools/perf/util/util.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/util/util.h +2 -2
@@ -11,8 +11,7 @@#include <stdlib.h> #include <stdarg.h> #include <linux/compiler.h> -#include <linux/types.h> -#include "namespaces.h" +#include <sys/types.h> /* General helper functions */ void usage (const char *err)__noreturn ;
@@ -26,6 +25,7 @@ static inline void *zalloc(size_t size)#define zfree (ptr) ({ free(*ptr); *ptr = NULL; })struct dirent ; +struct nsinfo ;struct strlist ;int mkdir_p (char *path,mode_t mode);
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 11/13 perf tools: Fix perf builds with clang support
In reply to Arnaldo Carvalho de MeloFrom: Sandipan Das <[email protected]>
For libclang, some distro packages provide static libraries (.a) while some provide shared libraries (.so). Currently, perf code can only be linked with static libraries. This makes perf build possible for both cases.
--- tools/perf/Makefile.perf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
tools/perf/Makefile.perf +2 -1
@@ -364,7 +364,8 @@ LIBS = -Wl,--whole-archive $(PERFLIBS) $(EXTRA_PERFLIBS) -Wl,--no-whole-archive ifeq ($(USE_CLANG), 1) CLANGLIBS_LIST = AST Basic CodeGen Driver Frontend Lex Tooling Edit Sema Analysis Parse Serialization - LIBCLANG = $(foreach l,$(CLANGLIBS_LIST),$(wildcard $(shell $(LLVM_CONFIG) --libdir)/libclang$(l).a)) + CLANGLIBS_NOEXT_LIST = $(foreach l,$(CLANGLIBS_LIST),$(shell $(LLVM_CONFIG) --libdir)/libclang$(l)) + LIBCLANG = $(foreach l,$(CLANGLIBS_NOEXT_LIST),$(wildcard $(l).a $(l).so)) LIBS += -Wl,--start-group $(LIBCLANG) -Wl,--end-group endif
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 12/13 perf clang: Add support for recent clang versions
In reply to Arnaldo Carvalho de MeloFrom: Sandipan Das <[email protected]>
The clang API calls used by perf have changed in recent releases and builds succeed with libclang-3.9 only. This introduces compatibility with libclang-4.0 and above.
Without this patch, we will see the following compilation errors with libclang-4.0+:
util/c++/clang.cpp: In function ‘clang::CompilerInvocation* perf::createCompilerInvocation(llvm::opt::ArgStringList, llvm::StringRef&, clang::DiagnosticsEngine&)’:
util/c++/clang.cpp:62:33: error: ‘IK_C’ was not declared in this scope
Opts.Inputs.emplace_back(Path, IK_C);
^~~~
util/c++/clang.cpp: In function ‘std::unique_ptr<llvm::Module> perf::getModuleFromSource(llvm::opt::ArgStringList, llvm::StringRef, llvm::IntrusiveRefCntPtr<clang::vfs::FileSystem>)’:
util/c++/clang.cpp:75:26: error: no matching function for call to ‘clang::CompilerInstance::setInvocation(clang::CompilerInvocation*)’
Clang.setInvocation(&*CI);
^
In file included from util/c++/clang.cpp:14:0:
/usr/include/clang/Frontend/CompilerInstance.h:231:8: note: candidate: void clang::CompilerInstance::setInvocation(std::shared_ptr<clang::CompilerInvocation>)
void setInvocation(std::shared_ptr<CompilerInvocation> Value);
^~~~~~~~~~~~~Committer testing:
Tested on Fedora 27 after installing the clang-devel and llvm-devel packages, versions:
# rpm -qa | egrep llvm\|clang llvm-5.0.1-6.fc27.x86_64 clang-libs-5.0.1-5.fc27.x86_64 clang-5.0.1-5.fc27.x86_64 clang-tools-extra-5.0.1-5.fc27.x86_64 llvm-libs-5.0.1-6.fc27.x86_64 llvm-devel-5.0.1-6.fc27.x86_64 clang-devel-5.0.1-5.fc27.x86_64 #
Make sure you don't have some older version lying around in /usr/local, etc, then:
$ make LIBCLANGLLVM=1 -C tools/perf install-bin
And in the end perf will be linked agains these libraries:
# ldd ~/bin/perf | egrep -i llvm\|clang libclangAST.so.5 => /lib64/libclangAST.so.5 (0x00007f8bb2eb4000) libclangBasic.so.5 => /lib64/libclangBasic.so.5 (0x00007f8bb29e3000) libclangCodeGen.so.5 => /lib64/libclangCodeGen.so.5 (0x00007f8bb23f7000) libclangDriver.so.5 => /lib64/libclangDriver.so.5 (0x00007f8bb2060000) libclangFrontend.so.5 => /lib64/libclangFrontend.so.5 (0x00007f8bb1d06000) libclangLex.so.5 => /lib64/libclangLex.so.5 (0x00007f8bb1a3e000) libclangTooling.so.5 => /lib64/libclangTooling.so.5 (0x00007f8bb17d4000) libclangEdit.so.5 => /lib64/libclangEdit.so.5 (0x00007f8bb15c5000) libclangSema.so.5 => /lib64/libclangSema.so.5 (0x00007f8bb0cc9000) libclangAnalysis.so.5 => /lib64/libclangAnalysis.so.5 (0x00007f8bb0a23000) libclangParse.so.5 => /lib64/libclangParse.so.5 (0x00007f8bb0725000) libclangSerialization.so.5 => /lib64/libclangSerialization.so.5 (0x00007f8bb039a000) libLLVM-5.0.so => /lib64/libLLVM-5.0.so (0x00007f8bace98000) libclangASTMatchers.so.5 => /lib64/../lib64/libclangASTMatchers.so.5 (0x00007f8bab735000) libclangFormat.so.5 => /lib64/../lib64/libclangFormat.so.5 (0x00007f8bab4b2000) libclangRewrite.so.5 => /lib64/../lib64/libclangRewrite.so.5 (0x00007f8bab2a1000) libclangToolingCore.so.5 => /lib64/../lib64/libclangToolingCore.so.5 (0x00007f8bab08e000) #
--- tools/perf/util/c++/clang.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
tools/perf/util/c++/clang.cpp +10 -1
@@ -9,6 +9,7 @@ * Copyright (C) 2016 Huawei Inc. */ +#include "clang/Basic/Version.h" #include "clang/CodeGen/CodeGenAction.h" #include "clang/Frontend/CompilerInvocation.h" #include "clang/Frontend/CompilerInstance.h"
@@ -58,7 +59,8 @@ createCompilerInvocation(llvm::opt::ArgStringList CFlags, StringRef& Path, FrontendOptions& Opts = CI->getFrontendOpts(); Opts.Inputs.clear(); - Opts.Inputs.emplace_back(Path, IK_C); + Opts.Inputs.emplace_back(Path, + FrontendOptions::getInputKindForExtension("c")); return CI; }
@@ -71,10 +73,17 @@ getModuleFromSource(llvm::opt::ArgStringList CFlags, Clang.setVirtualFileSystem(&*VFS); +#if CLANG_VERSION_MAJOR < 4 IntrusiveRefCntPtr<CompilerInvocation> CI = createCompilerInvocation(std::move(CFlags), Path, Clang.getDiagnostics()); Clang.setInvocation(&*CI); +#else + std::shared_ptr<CompilerInvocation> CI( + createCompilerInvocation(std::move(CFlags), Path, + Clang.getDiagnostics())); + Clang.setInvocation(CI); +#endif std::unique_ptr<CodeGenAction> Act(new EmitLLVMOnlyAction(&*LLVMCtx)); if (!Clang.ExecuteAction(*Act))
Signature · 1 line
2.14.3
Arnaldo Carvalho de Melo
maintainerPATCH 13/13 perf tests clang: Fix function name for clang IR test
In reply to Arnaldo Carvalho de MeloFrom: Sandipan Das <[email protected]>
As stated in tests/llvm-src-base.c, the name of the bpf function should be "bpf_func__SyS_epoll_pwait" but this clang test fails as it tries to lookup "bpf_func__SyS_epoll_wait".
Before applying patch:
55: builtin clang support : 55.1: builtin clang compile C source to IR : FAILED! 55.2: builtin clang compile C source to ELF object : Skip
After applying patch:
55: builtin clang support : 55.1: builtin clang compile C source to IR : Ok 55.2: builtin clang compile C source to ELF object : Ok
--- tools/perf/util/c++/clang-test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/c++/clang-test.cpp +1 -1
@@ -41,7 +41,7 @@ int test__clang_to_IR(void) if (!M) return -1; for (llvm::Function& F : *M) - if (F.getName() == "bpf_func__SyS_epoll_wait") + if (F.getName() == "bpf_func__SyS_epoll_pwait") return 0; return -1; }
Signature · 1 line
2.14.3
Quoted 64 lines · Arnaldo Carvalho de Melo
Hi Ingo,
Please consider pulling,
- Arnaldo
Test results at the end of this message, as usual.
The following changes since commit
d1e7e602cd64cf61f87dbf30df07c24df9eb1d99:perf/x86/intel: Move
regs->flagsEXACT bit init (2018-04-05 09:28:40 +0200)are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-urgent-for-mingo-4.17-20180409for you to fetch changes up to
fcbd8fa44664e99a5d8c7ab97f1afdd82472f973:perf tests clang: Fix function name for clang IR test (2018-04-09 11:13:09 -0300)
----------------------------------------------------------------
perf/urgent fixes:. Fix the --stdio2/TUI annotate output to include group details,
be it for a recorded '{a,b,f}' explicit event group or when forcing group display using 'perf report --group' for a set of events not recorded as a group (Arnaldo Carvalho de Melo). Fix display artifacts in the ui browser (base class for the
annotate and main report/top TUI browser) related to the extra title lines work (Arnaldo Carvalho de Melo). perf auxtrace refactorings, leftovers from a previously partially
processed patchset (Adrian Hunter). Fix the builtin clang build (Sandipan Das, Arnaldo Carvalho de Melo)
- Synchronize
i915_drm.h, silencing a perf build warning and in the process automagically adding support for a new ioctl command (Arnaldo Carvalho de Melo)Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Adrian Hunter (2):
perf auxtrace: Makeauxtrace_queues__add_buffer()allocate struct buffer perf auxtrace: Makeauxtrace_queues__add_buffer()do CPU filteringArnaldo Carvalho de Melo (8):
perf annotate: Show group details on the title line
perf annotate browser: Fixup vertical line separating metrics from instructions perf ui browser: Fixup cleaning unused lines at the bottom
perf report: Remove duplicated 'samples' in lost samples warning tools headers uapi: Synchronizei915_drm.h
perf hists browser: Showextra_title_linesin the 'D' debug hotkey perf hists browser: Remove leftover from row returned from refresh perf tools: No need to includenamespaces.hinutil.hSandipan Das (3):
perf tools: Fix perf builds with clang support perf clang: Add support for recent clang versions perf tests clang: Fix function name for clang IR test
Quoted 12 lines
tools/include/uapi/drm/i915_drm.h | 112 +++++++++++++++++++++++++++++++++++-- tools/perf/Makefile.perf | 3 +- tools/perf/ui/browser.c | 4 +- tools/perf/ui/browsers/annotate.c | 2 +- tools/perf/ui/browsers/hists.c | 13 ++--- tools/perf/util/annotate.c | 7 ++- tools/perf/util/auxtrace.c | 72 +++++++++++------------- tools/perf/util/c++/clang-test.cpp | 2 +- tools/perf/util/c++/clang.cpp | 11 +++- tools/perf/util/session.c | 2 +- tools/perf/util/util.h | 4 +- 11 files changed, 169 insertions(+), 63 deletions(-)
Pulled, thanks a lot Arnaldo!
Ingo