Commit b9df84fd authored by Ingo Molnar's avatar Ingo Molnar

Merge tag 'perf-core-for-mingo' of...

Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent

Pull perf/core fixes from Arnaldo Carvalho de Melo:

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 fixes:

  - 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)
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 93472aff 5ef7bbb0
...@@ -25,7 +25,7 @@ build-dir := $(srctree)/tools/build ...@@ -25,7 +25,7 @@ build-dir := $(srctree)/tools/build
include $(build-dir)/Build.include include $(build-dir)/Build.include
# do not force detected configuration # do not force detected configuration
-include .config-detected -include $(OUTPUT).config-detected
# Init all relevant variables used in build files so # Init all relevant variables used in build files so
# 1) they have correct type # 1) they have correct type
......
...@@ -110,7 +110,7 @@ $(OUTPUT)PERF-VERSION-FILE: ../../.git/HEAD ...@@ -110,7 +110,7 @@ $(OUTPUT)PERF-VERSION-FILE: ../../.git/HEAD
$(Q)touch $(OUTPUT)PERF-VERSION-FILE $(Q)touch $(OUTPUT)PERF-VERSION-FILE
CC = $(CROSS_COMPILE)gcc CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld LD ?= $(CROSS_COMPILE)ld
AR = $(CROSS_COMPILE)ar AR = $(CROSS_COMPILE)ar
PKG_CONFIG = $(CROSS_COMPILE)pkg-config PKG_CONFIG = $(CROSS_COMPILE)pkg-config
...@@ -545,7 +545,7 @@ config-clean: ...@@ -545,7 +545,7 @@ config-clean:
clean: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean 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) $(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)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-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* $(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 $(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean
......
...@@ -630,12 +630,13 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -630,12 +630,13 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused)
if (inject.session == NULL) if (inject.session == NULL)
return -1; return -1;
if (symbol__init(&inject.session->header.env) < 0) ret = symbol__init(&inject.session->header.env);
return -1; if (ret < 0)
goto out_delete;
ret = __cmd_inject(&inject); ret = __cmd_inject(&inject);
out_delete:
perf_session__delete(inject.session); perf_session__delete(inject.session);
return ret; return ret;
} }
...@@ -1916,7 +1916,7 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -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, if (!perf_evlist__find_tracepoint_by_name(session->evlist,
"kmem:kmalloc")) { "kmem:kmalloc")) {
pr_err(errmsg, "slab", "slab"); 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) ...@@ -1927,7 +1927,7 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused)
"kmem:mm_page_alloc"); "kmem:mm_page_alloc");
if (evsel == NULL) { if (evsel == NULL) {
pr_err(errmsg, "page", "page"); pr_err(errmsg, "page", "page");
return -1; goto out_delete;
} }
kmem_page_size = pevent_get_page_size(evsel->tp_format->pevent); kmem_page_size = pevent_get_page_size(evsel->tp_format->pevent);
......
...@@ -1061,8 +1061,10 @@ static int read_events(struct perf_kvm_stat *kvm) ...@@ -1061,8 +1061,10 @@ static int read_events(struct perf_kvm_stat *kvm)
symbol__init(&kvm->session->header.env); symbol__init(&kvm->session->header.env);
if (!perf_session__has_traces(kvm->session, "kvm record")) if (!perf_session__has_traces(kvm->session, "kvm record")) {
return -EINVAL; ret = -EINVAL;
goto out_delete;
}
/* /*
* Do not use 'isa' recorded in kvm_exit tracepoint since it is not * 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) ...@@ -1070,9 +1072,13 @@ static int read_events(struct perf_kvm_stat *kvm)
*/ */
ret = cpu_isa_config(kvm); ret = cpu_isa_config(kvm);
if (ret < 0) 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) static int parse_target_str(struct perf_kvm_stat *kvm)
......
...@@ -124,7 +124,6 @@ static int report_raw_events(struct perf_mem *mem) ...@@ -124,7 +124,6 @@ static int report_raw_events(struct perf_mem *mem)
.mode = PERF_DATA_MODE_READ, .mode = PERF_DATA_MODE_READ,
.force = mem->force, .force = mem->force,
}; };
int err = -EINVAL;
int ret; int ret;
struct perf_session *session = perf_session__new(&file, false, struct perf_session *session = perf_session__new(&file, false,
&mem->tool); &mem->tool);
...@@ -135,24 +134,21 @@ static int report_raw_events(struct perf_mem *mem) ...@@ -135,24 +134,21 @@ static int report_raw_events(struct perf_mem *mem)
if (mem->cpu_list) { if (mem->cpu_list) {
ret = perf_session__cpu_bitmap(session, mem->cpu_list, ret = perf_session__cpu_bitmap(session, mem->cpu_list,
mem->cpu_bitmap); mem->cpu_bitmap);
if (ret) if (ret < 0)
goto out_delete; goto out_delete;
} }
if (symbol__init(&session->header.env) < 0) ret = symbol__init(&session->header.env);
return -1; if (ret < 0)
goto out_delete;
printf("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n"); printf("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n");
err = perf_session__process_events(session); ret = perf_session__process_events(session);
if (err)
return err;
return 0;
out_delete: out_delete:
perf_session__delete(session); perf_session__delete(session);
return err; return ret;
} }
static int report_events(int argc, const char **argv, struct perf_mem *mem) static int report_events(int argc, const char **argv, struct perf_mem *mem)
......
...@@ -839,8 +839,10 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -839,8 +839,10 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
if (report.header || report.header_only) { if (report.header || report.header_only) {
perf_session__fprintf_info(session, stdout, perf_session__fprintf_info(session, stdout,
report.show_full_info); report.show_full_info);
if (report.header_only) if (report.header_only) {
return 0; ret = 0;
goto error;
}
} else if (use_browser == 0) { } else if (use_browser == 0) {
fputs("# To display the perf.data header info, please use --header/--header-only options.\n#\n", fputs("# To display the perf.data header info, please use --header/--header-only options.\n#\n",
stdout); stdout);
......
...@@ -11,9 +11,9 @@ ifneq ($(obj-perf),) ...@@ -11,9 +11,9 @@ ifneq ($(obj-perf),)
obj-perf := $(abspath $(obj-perf))/ obj-perf := $(abspath $(obj-perf))/
endif endif
$(shell echo -n > .config-detected) $(shell echo -n > $(OUTPUT).config-detected)
detected = $(shell echo "$(1)=y" >> .config-detected) detected = $(shell echo "$(1)=y" >> $(OUTPUT).config-detected)
detected_var = $(shell echo "$(1)=$($(1))" >> .config-detected) detected_var = $(shell echo "$(1)=$($(1))" >> $(OUTPUT).config-detected)
CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS) CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
......
...@@ -1448,10 +1448,9 @@ int machine__process_event(struct machine *machine, union perf_event *event, ...@@ -1448,10 +1448,9 @@ int machine__process_event(struct machine *machine, union perf_event *event,
case PERF_RECORD_AUX: case PERF_RECORD_AUX:
ret = machine__process_aux_event(machine, event); break; ret = machine__process_aux_event(machine, event); break;
case PERF_RECORD_ITRACE_START: 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: case PERF_RECORD_LOST_SAMPLES:
ret = machine__process_lost_samples_event(machine, event, sample); break; ret = machine__process_lost_samples_event(machine, event, sample); break;
break;
default: default:
ret = -1; ret = -1;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment