perf/urgent fixes:
- Stop fallbacking to kallsyms for vDSO symbols lookup, this wasn't being really used and is not valid in arches such as Sparc, where user and kernel space don't share the address space, relying only on cpumode to figure out what DSOs to lookup (Arnaldo Carvalho de Melo) - Align cpu map synthesized events properly, fixing SIGBUS in CPUs like Sparc (David Miller) - Fix use of alternatives to find JDIR (Jarod Wilson) - Store ids for events with their own cpus when synthesizing user level event details (scale, unit, etc) events, fixing a crash when recording a PMU event with a cpumask defined (Jiri Olsa) - Fix wrong filter_band* values for uncore Intel vendor events (Jiri Olsa) - Fix detection of tracefs path in systems without tracefs, where that path should be the debugfs mountpoint plus "/tracing/" (Jiri Olsa) - Pass build flags to traceevent build, allowing using alternative flags in distro packages, RPM, for instance (Jiri Olsa) - Fix 'perf report' crash on invalid inline debug information (Milian Wolff) - Synch kvm uapi copies (Arnaldo Carvalho de Melo) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQR2GiIUctdOfX2qHhGyPKLppCJ+JwUCW8eytQAKCRCyPKLppCJ+ Jz94AP9Ra7FFmnMuffimP5pIkUacfqkLXPG3Lymxa8+pm0FH6gD/cWUZCxNdchBN v4zFXT1i9iR2YCKu8/1iijVx2wtpZQw= =Dh50 -----END PGP SIGNATURE----- Merge tag 'perf-urgent-for-mingo-4.19-20181017' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent Pull perf/urgent fixes from Arnaldo Carvalho de Melo: - Stop falling back to kallsyms for vDSO symbols lookup, this wasn't being really used and is not valid in arches such as Sparc, where user and kernel space don't share the address space, relying only on cpumode to figure out what DSOs to lookup (Arnaldo Carvalho de Melo) - Align CPU map synthesized events properly, fixing SIGBUS in CPUs like Sparc (David Miller) - Fix use of alternatives to find JDIR (Jarod Wilson) - Store IDs for events with their own CPUs when synthesizing user level event details (scale, unit, etc) events, fixing a crash when recording a PMU event with a cpumask defined (Jiri Olsa) - Fix wrong filter_band* values for uncore Intel vendor events (Jiri Olsa) - Fix detection of tracefs path in systems without tracefs, where that path should be the debugfs mountpoint plus "/tracing/" (Jiri Olsa) - Pass build flags to traceevent build, allowing using alternative flags in distro packages, RPM, for instance (Jiri Olsa) - Fix 'perf report' crash on invalid inline debug information (Milian Wolff) - Synch KVM UAPI copies (Arnaldo Carvalho de Melo) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
commit
20e8e72d0f
|
@ -377,6 +377,7 @@ struct kvm_sync_regs {
|
|||
|
||||
#define KVM_X86_QUIRK_LINT0_REENABLED (1 << 0)
|
||||
#define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1)
|
||||
#define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2)
|
||||
|
||||
#define KVM_STATE_NESTED_GUEST_MODE 0x00000001
|
||||
#define KVM_STATE_NESTED_RUN_PENDING 0x00000002
|
||||
|
|
|
@ -952,6 +952,7 @@ struct kvm_ppc_resize_hpt {
|
|||
#define KVM_CAP_S390_HPAGE_1M 156
|
||||
#define KVM_CAP_NESTED_STATE 157
|
||||
#define KVM_CAP_ARM_INJECT_SERROR_ESR 158
|
||||
#define KVM_CAP_MSR_PLATFORM_INFO 159
|
||||
|
||||
#ifdef KVM_CAP_IRQ_ROUTING
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ static const char *tracing_path_tracefs_mount(void)
|
|||
|
||||
__tracing_path_set("", mnt);
|
||||
|
||||
return mnt;
|
||||
return tracing_path;
|
||||
}
|
||||
|
||||
static const char *tracing_path_debugfs_mount(void)
|
||||
|
@ -49,7 +49,7 @@ static const char *tracing_path_debugfs_mount(void)
|
|||
|
||||
__tracing_path_set("tracing/", mnt);
|
||||
|
||||
return mnt;
|
||||
return tracing_path;
|
||||
}
|
||||
|
||||
const char *tracing_path_mount(void)
|
||||
|
|
|
@ -833,7 +833,7 @@ ifndef NO_JVMTI
|
|||
JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}')
|
||||
else
|
||||
ifneq (,$(wildcard /usr/sbin/alternatives))
|
||||
JDIR=$(shell alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g')
|
||||
JDIR=$(shell /usr/sbin/alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g')
|
||||
endif
|
||||
endif
|
||||
ifndef JDIR
|
||||
|
|
|
@ -635,7 +635,7 @@ $(LIBPERF_IN): prepare FORCE
|
|||
$(LIB_FILE): $(LIBPERF_IN)
|
||||
$(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIBPERF_IN) $(LIB_OBJS)
|
||||
|
||||
LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ)
|
||||
LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ) 'EXTRA_CFLAGS=$(EXTRA_CFLAGS)' 'LDFLAGS=$(LDFLAGS)'
|
||||
|
||||
$(LIBTRACEEVENT): FORCE
|
||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) $(OUTPUT)libtraceevent.a
|
||||
|
|
|
@ -981,6 +981,7 @@ int cmd_report(int argc, const char **argv)
|
|||
.id_index = perf_event__process_id_index,
|
||||
.auxtrace_info = perf_event__process_auxtrace_info,
|
||||
.auxtrace = perf_event__process_auxtrace,
|
||||
.event_update = perf_event__process_event_update,
|
||||
.feature = process_feature_event,
|
||||
.ordered_events = true,
|
||||
.ordering_requires_timestamps = true,
|
||||
|
|
|
@ -188,7 +188,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xb",
|
||||
"EventName": "UNC_P_FREQ_GE_1200MHZ_CYCLES",
|
||||
"Filter": "filter_band0=1200",
|
||||
"Filter": "filter_band0=12",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_1200MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_1200mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -199,7 +199,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xc",
|
||||
"EventName": "UNC_P_FREQ_GE_2000MHZ_CYCLES",
|
||||
"Filter": "filter_band1=2000",
|
||||
"Filter": "filter_band1=20",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_2000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_2000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -210,7 +210,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xd",
|
||||
"EventName": "UNC_P_FREQ_GE_3000MHZ_CYCLES",
|
||||
"Filter": "filter_band2=3000",
|
||||
"Filter": "filter_band2=30",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_3000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_3000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -221,7 +221,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xe",
|
||||
"EventName": "UNC_P_FREQ_GE_4000MHZ_CYCLES",
|
||||
"Filter": "filter_band3=4000",
|
||||
"Filter": "filter_band3=40",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_4000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_4000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -232,7 +232,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xb",
|
||||
"EventName": "UNC_P_FREQ_GE_1200MHZ_TRANSITIONS",
|
||||
"Filter": "edge=1,filter_band0=1200",
|
||||
"Filter": "edge=1,filter_band0=12",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_1200MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_1200mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -243,7 +243,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xc",
|
||||
"EventName": "UNC_P_FREQ_GE_2000MHZ_TRANSITIONS",
|
||||
"Filter": "edge=1,filter_band1=2000",
|
||||
"Filter": "edge=1,filter_band1=20",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_2000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_2000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -254,7 +254,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xd",
|
||||
"EventName": "UNC_P_FREQ_GE_3000MHZ_TRANSITIONS",
|
||||
"Filter": "edge=1,filter_band2=4000",
|
||||
"Filter": "edge=1,filter_band2=30",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_3000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_3000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -265,7 +265,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xe",
|
||||
"EventName": "UNC_P_FREQ_GE_4000MHZ_TRANSITIONS",
|
||||
"Filter": "edge=1,filter_band3=4000",
|
||||
"Filter": "edge=1,filter_band3=40",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_4000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_4000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
|
|
@ -187,7 +187,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xb",
|
||||
"EventName": "UNC_P_FREQ_GE_1200MHZ_CYCLES",
|
||||
"Filter": "filter_band0=1200",
|
||||
"Filter": "filter_band0=12",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_1200MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_1200mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -198,7 +198,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xc",
|
||||
"EventName": "UNC_P_FREQ_GE_2000MHZ_CYCLES",
|
||||
"Filter": "filter_band1=2000",
|
||||
"Filter": "filter_band1=20",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_2000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_2000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -209,7 +209,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xd",
|
||||
"EventName": "UNC_P_FREQ_GE_3000MHZ_CYCLES",
|
||||
"Filter": "filter_band2=3000",
|
||||
"Filter": "filter_band2=30",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_3000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_3000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -220,7 +220,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xe",
|
||||
"EventName": "UNC_P_FREQ_GE_4000MHZ_CYCLES",
|
||||
"Filter": "filter_band3=4000",
|
||||
"Filter": "filter_band3=40",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_4000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_4000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -231,7 +231,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xb",
|
||||
"EventName": "UNC_P_FREQ_GE_1200MHZ_TRANSITIONS",
|
||||
"Filter": "edge=1,filter_band0=1200",
|
||||
"Filter": "edge=1,filter_band0=12",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_1200MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_1200mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -242,7 +242,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xc",
|
||||
"EventName": "UNC_P_FREQ_GE_2000MHZ_TRANSITIONS",
|
||||
"Filter": "edge=1,filter_band1=2000",
|
||||
"Filter": "edge=1,filter_band1=20",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_2000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_2000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -253,7 +253,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xd",
|
||||
"EventName": "UNC_P_FREQ_GE_3000MHZ_TRANSITIONS",
|
||||
"Filter": "edge=1,filter_band2=4000",
|
||||
"Filter": "edge=1,filter_band2=30",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_3000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_3000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
@ -264,7 +264,7 @@
|
|||
"Counter": "0,1,2,3",
|
||||
"EventCode": "0xe",
|
||||
"EventName": "UNC_P_FREQ_GE_4000MHZ_TRANSITIONS",
|
||||
"Filter": "edge=1,filter_band3=4000",
|
||||
"Filter": "edge=1,filter_band3=40",
|
||||
"MetricExpr": "(UNC_P_FREQ_GE_4000MHZ_CYCLES / UNC_P_CLOCKTICKS) * 100.",
|
||||
"MetricName": "freq_ge_4000mhz_cycles %",
|
||||
"PerPkg": "1",
|
||||
|
|
|
@ -1081,6 +1081,7 @@ void *cpu_map_data__alloc(struct cpu_map *map, size_t *size, u16 *type, int *max
|
|||
}
|
||||
|
||||
*size += sizeof(struct cpu_map_data);
|
||||
*size = PERF_ALIGN(*size, sizeof(u64));
|
||||
return zalloc(*size);
|
||||
}
|
||||
|
||||
|
@ -1560,26 +1561,9 @@ struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr,
|
|||
|
||||
return NULL;
|
||||
}
|
||||
try_again:
|
||||
|
||||
al->map = map_groups__find(mg, al->addr);
|
||||
if (al->map == NULL) {
|
||||
/*
|
||||
* If this is outside of all known maps, and is a negative
|
||||
* address, try to look it up in the kernel dso, as it might be
|
||||
* a vsyscall or vdso (which executes in user-mode).
|
||||
*
|
||||
* XXX This is nasty, we should have a symbol list in the
|
||||
* "[vdso]" dso, but for now lets use the old trick of looking
|
||||
* in the whole kernel symbol list.
|
||||
*/
|
||||
if (cpumode == PERF_RECORD_MISC_USER && machine &&
|
||||
mg != &machine->kmaps &&
|
||||
machine__kernel_ip(machine, al->addr)) {
|
||||
mg = &machine->kmaps;
|
||||
load_map = true;
|
||||
goto try_again;
|
||||
}
|
||||
} else {
|
||||
if (al->map != NULL) {
|
||||
/*
|
||||
* Kernel maps might be changed when loading symbols so loading
|
||||
* must be done prior to using kernel maps.
|
||||
|
|
|
@ -1089,6 +1089,9 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
|
|||
attr->exclude_user = 1;
|
||||
}
|
||||
|
||||
if (evsel->own_cpus)
|
||||
evsel->attr.read_format |= PERF_FORMAT_ID;
|
||||
|
||||
/*
|
||||
* Apply event specific term settings,
|
||||
* it overloads any global configuration.
|
||||
|
|
|
@ -930,13 +930,14 @@ static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v,
|
|||
|
||||
static __u64 pmu_format_max_value(const unsigned long *format)
|
||||
{
|
||||
__u64 w = 0;
|
||||
int fbit;
|
||||
int w;
|
||||
|
||||
for_each_set_bit(fbit, format, PERF_PMU_FORMAT_BITS)
|
||||
w |= (1ULL << fbit);
|
||||
|
||||
return w;
|
||||
w = bitmap_weight(format, PERF_PMU_FORMAT_BITS);
|
||||
if (!w)
|
||||
return 0;
|
||||
if (w < 64)
|
||||
return (1ULL << w) - 1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -85,6 +85,9 @@ static struct symbol *new_inline_sym(struct dso *dso,
|
|||
struct symbol *inline_sym;
|
||||
char *demangled = NULL;
|
||||
|
||||
if (!funcname)
|
||||
funcname = "??";
|
||||
|
||||
if (dso) {
|
||||
demangled = dso__demangle_sym(dso, 0, funcname);
|
||||
if (demangled)
|
||||
|
|
Loading…
Reference in New Issue