perf/core fixes
Arnaldo Carvalho de Melo
maintainerHi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit 93472aff802fd7b61f2209335207e9bd793012f7:
perf/x86: Fix 'active_events' imbalance (2015-06-30 13:08:46 +0200)
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 5ef7bbb09f7b91ef06524c72e1ab1fc48e0d6682:
perf tools: Allow to specify custom linker command (2015-07-01 17:53:50 -0300)
----------------------------------------------------------------
perf/core fixes:
Build fixes:
- Create config.detected into OUTPUT directory, fixing parallel builds sharing the same source directory (Aaro Kiskinen)
- Allow to specify custom linker command, fixing some MIPS64 builds. (Aaro Kiskinen)
Infrastructure:
- Add missing break for PERF_RECORD_ITRACE_START, which caused those events samples to be parsed as well as PERF_RECORD_LOST_SAMPLES. ITRACE_START only appears when Intel PT or BTS are present, so (Jiri Olsa)
- Call the perf_session destructor when bailing out in the inject, kmem, report, kvm and mem tools (Taeung Song)
----------------------------------------------------------------
Aaro Koskinen (2):
perf tools: Create config.detected into OUTPUT directory perf tools: Allow to specify custom linker command
Jiri Olsa (1):
perf tools: Add missing break for PERF_RECORD_ITRACE_START
Taeung Song (5):
perf inject: Fill in the missing session freeing after an error occurs perf kmem: Fill in the missing session freeing after an error occurs perf report: Fill in the missing session freeing after an error occurs perf kvm: Fill in the missing session freeing after an error occurs perf mem: Fill in the missing session freeing after an error occurs
tools/build/Makefile.build | 2 +- tools/perf/Makefile.perf | 4 ++-- tools/perf/builtin-inject.c | 7 ++++--- tools/perf/builtin-kmem.c | 4 ++-- tools/perf/builtin-kvm.c | 14 ++++++++++---- tools/perf/builtin-mem.c | 16 ++++++---------- tools/perf/builtin-report.c | 6 ++++-- tools/perf/config/Makefile | 6 +++--- tools/perf/util/machine.c | 3 +-- 9 files changed, 33 insertions(+), 29 deletions(-)
Arnaldo Carvalho de Melo
maintainerPATCH 1/8 perf tools: Add missing break for PERF_RECORD_ITRACE_START
From: Jiri Olsa <[email protected]>
Missing switch break since introduction of new event:
c4937a91ea56 perf tools: handle PERF_RECORD_LOST_SAMPLES
Also removing unneeded break for PERF_RECORD_LOST_SAMPLES.
--- tools/perf/util/machine.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
tools/perf/util/machine.c +1 -2
@@ -1448,10 +1448,9 @@ int machine__process_event(struct machine *machine, union perf_event *event,case PERF_RECORD_AUX : ret =machine__process_aux_event (machine, event);break ;case PERF_RECORD_ITRACE_START : - ret =machine__process_itrace_start_event (machine, event); + ret =machine__process_itrace_start_event (machine, event);break ;case PERF_RECORD_LOST_SAMPLES : ret =machine__process_lost_samples_event (machine, event, sample);break ; -break ;default : ret =-1 ;break ;
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 2/8 perf inject: Fill in the missing session freeing after an error occurs
In reply to Arnaldo Carvalho de MeloFrom: Taeung Song <[email protected]>
When an error occur an error value is just returned without freeing the session. So allocating and freeing session have to be matched as a pair even if an error occurs.
--- tools/perf/builtin-inject.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
tools/perf/builtin-inject.c +4 -3
@@ -630,12 +630,13 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused)if (inject.session ==NULL )return -1 ; -if (symbol__init (&inject.session->header.env) <0 ) -return -1 ; + ret =symbol__init (&inject.session->header.env); +if (ret <0 ) + goto out_delete; ret =__cmd_inject (&inject); +out_delete:perf_session__delete (inject.session); -return ret; }
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 3/8 perf kmem: Fill in the missing session freeing after an error occurs
In reply to Arnaldo Carvalho de MeloFrom: Taeung Song <[email protected]>
When an error occurs an error value is just returned without freeing the session. So allocating and freeing session have to be matched as a pair even if an error occurs.
--- tools/perf/builtin-kmem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/builtin-kmem.c +2 -2
@@ -1916,7 +1916,7 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused)if (!perf_evlist__find_tracepoint_by_name (session->evlist,"kmem:kmalloc" )) {pr_err (errmsg,"slab" ,"slab" ); -return -1 ; + goto out_delete; } }
@@ -1927,7 +1927,7 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused) "kmem:mm_page_alloc");if (evsel ==NULL ) {pr_err (errmsg,"page" ,"page" ); -return -1 ; + goto out_delete; } kmem_page_size =pevent_get_page_size (evsel->tp_format->pevent);
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 4/8 perf report: Fill in the missing session freeing after an error occurs
In reply to Arnaldo Carvalho de MeloFrom: Taeung Song <[email protected]>
When an error occurs an error value is just returned without freeing the session. So allocating and freeing session have to be matched as a pair even if an error occurs.
--- tools/perf/builtin-report.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
tools/perf/builtin-report.c +4 -2
@@ -839,8 +839,10 @@ repeat:if (report.header || report.header_only) {perf_session__fprintf_info (session, stdout, report.show_full_info); -if (report.header_only) -return 0 ; +if (report.header_only) { + ret =0 ; + goto error; + } }else if (use_browser ==0 ) {fputs ("# To display the perf.data header info, please use --header/--header-only options.\n#\n" , stdout);
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 5/8 perf kvm: Fill in the missing session freeing after an error occurs
In reply to Arnaldo Carvalho de MeloFrom: Taeung Song <[email protected]>
When an error occurs an error value is just returned without freeing the session. So allocating and freeing session have to be matched as a pair even if an error occurs.
--- tools/perf/builtin-kvm.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
tools/perf/builtin-kvm.c +10 -4
@@ -1061,8 +1061,10 @@ static int read_events(struct perf_kvm_stat *kvm)symbol__init (&kvm->session->header.env); -if (!perf_session__has_traces (kvm->session,"kvm record" )) -return -EINVAL ; +if (!perf_session__has_traces (kvm->session,"kvm record" )) { + ret = -EINVAL ; + goto out_delete; + }/* * Do not use 'isa' recorded in kvm_exit tracepoint since it is not
@@ -1070,9 +1072,13 @@ static int read_events(struct perf_kvm_stat *kvm)*/ ret =cpu_isa_config (kvm);if (ret <0 ) -return ret; + goto out_delete; -return perf_session__process_events (kvm->session); + ret =perf_session__process_events (kvm->session); + +out_delete: +perf_session__delete (kvm->session); +return ret; }static int parse_target_str (struct perf_kvm_stat *kvm)
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 6/8 perf mem: Fill in the missing session freeing after an error occurs
In reply to Arnaldo Carvalho de MeloFrom: Taeung Song <[email protected]>
When an error occurs an error value is just returned without freeing the session. So allocating and freeing session have to be matched as a pair even if an error occurs.
--- tools/perf/builtin-mem.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)
tools/perf/builtin-mem.c +6 -10
@@ -124,7 +124,6 @@ static int report_raw_events(struct perf_mem *mem) .mode = PERF_DATA_MODE_READ, .force = mem->force, }; -int err = -EINVAL ;int ret;struct perf_session *session =perf_session__new (&file, false, &mem->tool);
@@ -135,24 +134,21 @@ static int report_raw_events(struct perf_mem *mem)if (mem->cpu_list) { ret =perf_session__cpu_bitmap (session, mem->cpu_list, mem->cpu_bitmap); -if (ret) +if (ret <0 ) goto out_delete; } -if (symbol__init (&session->header.env) <0 ) -return -1 ; + ret =symbol__init (&session->header.env); +if (ret <0 ) + goto out_delete;printf ("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n" ); - err =perf_session__process_events (session); -if (err) -return err; - -return 0 ; + ret =perf_session__process_events (session); out_delete:perf_session__delete (session); -return err; +return ret; }static int report_events (int argc,const char **argv,struct perf_mem *mem)
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 7/8 perf tools: Create config.detected into OUTPUT directory
In reply to Arnaldo Carvalho de MeloFrom: Aaro Koskinen <[email protected]>
Create config.detected into OUTPUT directory instead of source directory.
This fixes parallel builds that share the same source directory.
--- tools/build/Makefile.build | 2 +- tools/perf/Makefile.perf | 2 +- tools/perf/config/Makefile | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-)
tools/build/Makefile.build +1 -1
@@ -25,7 +25,7 @@ build-dir := $(srctree)/tools/build include $(build-dir)/Build.include # do not force detected configuration --include .config-detected +-include $(OUTPUT).config-detected # Init all relevant variables used in build files so # 1) they have correct type
tools/perf/Makefile.perf +1 -1
@@ -545,7 +545,7 @@ config-clean: clean: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean config-clean $(call QUIET_CLEAN, core-objs) $(RM) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(LANG_BINDINGS) $(Q)find . -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete - $(Q)$(RM) .config-detected + $(Q)$(RM) $(OUTPUT).config-detected $(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32 $(call QUIET_CLEAN, core-gen) $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)FEATURE-DUMP $(OUTPUT)util/*-bison* $(OUTPUT)util/*-flex* $(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean
tools/perf/config/Makefile +3 -3
@@ -11,9 +11,9 @@ ifneq ($(obj-perf),) obj-perf := $(abspath $(obj-perf))/ endif -$(shell echo -n > .config-detected) -detected = $(shell echo "$(1)=y" >> .config-detected) -detected_var = $(shell echo "$(1)=$($(1))" >> .config-detected) +$(shell echo -n > $(OUTPUT).config-detected) +detected = $(shell echo "$(1)=y" >> $(OUTPUT).config-detected) +detected_var = $(shell echo "$(1)=$($(1))" >> $(OUTPUT).config-detected) CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 8/8 perf tools: Allow to specify custom linker command
In reply to Arnaldo Carvalho de MeloFrom: Aaro Koskinen <[email protected]>
Allow to specify custom linker command. This fixes MIPS64 builds for 64-bit userspace as it will allow to pass a linker using the correct linker flags for 64-bit ABI (by default GNU binutils ld will assume N32).
--- tools/perf/Makefile.perf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/Makefile.perf +1 -1
@@ -110,7 +110,7 @@ $(OUTPUT)PERF-VERSION-FILE: ../../.git/HEAD $(Q)touch $(OUTPUT)PERF-VERSION-FILE CC = $(CROSS_COMPILE)gcc -LD = $(CROSS_COMPILE)ld +LD ?= $(CROSS_COMPILE)ld AR = $(CROSS_COMPILE)ar PKG_CONFIG = $(CROSS_COMPILE)pkg-config
Signature · 1 line
2.1.0
Quoted 55 lines · Arnaldo Carvalho de Melo
Hi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit
93472aff802fd7b61f2209335207e9bd793012f7:perf/x86: Fix '
active_events' imbalance (2015-06-30 13:08:46 +0200)are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-core-for-mingofor you to fetch changes up to
5ef7bbb09f7b91ef06524c72e1ab1fc48e0d6682:perf tools: Allow to specify custom linker command (2015-07-01 17:53:50 -0300)
----------------------------------------------------------------
perf/core fixes:Build fixes:
- Create config.detected into OUTPUT directory, fixing parallel builds sharing the same source directory (Aaro Kiskinen)
- Allow to specify custom linker command, fixing some MIPS64 builds. (Aaro Kiskinen)
Infrastructure:
- Add missing break for
PERF_RECORD_ITRACE_START, which caused those events samples to be parsed as well asPERF_RECORD_LOST_SAMPLES.ITRACE_STARTonly appears when Intel PT or BTS are present, so (Jiri Olsa)- Call the
perf_sessiondestructor when bailing out in the inject, kmem, report, kvm and mem tools (Taeung Song)Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Aaro Koskinen (2):
perf tools: Create config.detected into OUTPUT directory perf tools: Allow to specify custom linker commandJiri Olsa (1):
perf tools: Add missing break forPERF_RECORD_ITRACE_STARTTaeung Song (5):
perf inject: Fill in the missing session freeing after an error occurs perf kmem: Fill in the missing session freeing after an error occurs perf report: Fill in the missing session freeing after an error occurs perf kvm: Fill in the missing session freeing after an error occurs perf mem: Fill in the missing session freeing after an error occurs
Quoted 10 lines
tools/build/Makefile.build | 2 +- tools/perf/Makefile.perf | 4 ++-- tools/perf/builtin-inject.c | 7 ++++--- tools/perf/builtin-kmem.c | 4 ++-- tools/perf/builtin-kvm.c | 14 ++++++++++---- tools/perf/builtin-mem.c | 16 ++++++---------- tools/perf/builtin-report.c | 6 ++++-- tools/perf/config/Makefile | 6 +++--- tools/perf/util/machine.c | 3 +-- 9 files changed, 33 insertions(+), 29 deletions(-)
Pulled, thanks a lot Arnaldo!
Ingo
Hm, had to unpull it, due to:
make[3]: *** No rule to make target 'util/intel-pt.h', needed by 'util/auxtrace.o'. Stop. /home/mingo/tip/tools/build/Makefile.build:107: recipe for target 'util' failed make[2]: *** [util] Error 2
Makefile.perf:373: recipe for target 'libperf-in.o' failed
make[1]: *** [libperf-in.o] Error 2
Makefile:87: recipe for target 'install' failed
make: *** [install] Error 2
Thanks,
Ingo
Quoted 5 lines · Ingo Molnar
Hm, had to unpull it, due to:
make[3]: *** No rule to make target '
util/intel-pt.h', needed by 'util/auxtrace.o'. Stop./home/mingo/tip/tools/build/Makefile.build:107: recipe for target 'util' failed
Any chance this is leftover from previous intel pt pull/revert?
And 'util/intel-pt.h' dependency stayed in the util/.auxtrace.o.cmd file? Removing the util/.auxtrace.o.cmd file should fix that.
I'm looking at this issue currently.. need somehow to check the dependency validity, need to check how kbuild deal with this ;-)
jirka
Quoted 9 lines
make[2]: *** [util] Error 2
Makefile.perf:373: recipe for target 'libperf-in.o' failed make[1]: *** [libperf-in.o] Error 2
Makefile:87: recipe for target 'install' failed
make: *** [install] Error 2Thanks,
Ingo
Quoted 7 lines · Jiri Olsa
Quoted 5 lines · Ingo Molnar
Hm, had to unpull it, due to:
make[3]: *** No rule to make target '
util/intel-pt.h', needed by 'util/auxtrace.o'. Stop./home/mingo/tip/tools/build/Makefile.build:107: recipe for target 'util' failed
Quoted 7 lines
Any chance this is leftover from previous intel pt pull/revert?
And '
util/intel-pt.h' dependency stayed in the util/.auxtrace.o.cmd file? Removing the util/.auxtrace.o.cmd file should fix that.I'm looking at this issue currently.. need somehow to check the dependency validity, need to check how kbuild deal with this ;-)
That's exactly what happened - it now builds fine so I restored the pull, thanks Jiri!
Ingo