forked from Minki/linux
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Thomas Gleixner: "Three fixes for the perf user space side: - Fix the probing of precise_ip level, which got broken recently for x86. - Unbreak the ARCH=x86_64 build - Report module before trying to unwind into the module code, which avoids broken stack frames displayed" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf unwind: Report module before querying isactivation in dwfl unwind perf tools: Fix build with ARCH=x86_64 perf evsel: Fix probing of precise_ip level for default cycles event
This commit is contained in:
commit
a1ff31d746
@ -19,18 +19,18 @@ CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
|
||||
|
||||
include $(srctree)/tools/scripts/Makefile.arch
|
||||
|
||||
$(call detected_var,ARCH)
|
||||
$(call detected_var,SRCARCH)
|
||||
|
||||
NO_PERF_REGS := 1
|
||||
|
||||
# Additional ARCH settings for ppc
|
||||
ifeq ($(ARCH),powerpc)
|
||||
ifeq ($(SRCARCH),powerpc)
|
||||
NO_PERF_REGS := 0
|
||||
LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
|
||||
endif
|
||||
|
||||
# Additional ARCH settings for x86
|
||||
ifeq ($(ARCH),x86)
|
||||
ifeq ($(SRCARCH),x86)
|
||||
$(call detected,CONFIG_X86)
|
||||
ifeq (${IS_64_BIT}, 1)
|
||||
CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -DHAVE_SYSCALL_TABLE -I$(OUTPUT)arch/x86/include/generated
|
||||
@ -43,12 +43,12 @@ ifeq ($(ARCH),x86)
|
||||
NO_PERF_REGS := 0
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),arm)
|
||||
ifeq ($(SRCARCH),arm)
|
||||
NO_PERF_REGS := 0
|
||||
LIBUNWIND_LIBS = -lunwind -lunwind-arm
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),arm64)
|
||||
ifeq ($(SRCARCH),arm64)
|
||||
NO_PERF_REGS := 0
|
||||
LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
|
||||
endif
|
||||
@ -61,7 +61,7 @@ endif
|
||||
# Disable it on all other architectures in case libdw unwind
|
||||
# support is detected in system. Add supported architectures
|
||||
# to the check.
|
||||
ifneq ($(ARCH),$(filter $(ARCH),x86 arm))
|
||||
ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm))
|
||||
NO_LIBDW_DWARF_UNWIND := 1
|
||||
endif
|
||||
|
||||
@ -115,9 +115,9 @@ endif
|
||||
FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
|
||||
FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
|
||||
|
||||
FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi
|
||||
FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi -I$(srctree)/tools/include/uapi
|
||||
# include ARCH specific config
|
||||
-include $(src-perf)/arch/$(ARCH)/Makefile
|
||||
-include $(src-perf)/arch/$(SRCARCH)/Makefile
|
||||
|
||||
ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
|
||||
CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
|
||||
@ -228,12 +228,12 @@ ifeq ($(DEBUG),0)
|
||||
endif
|
||||
|
||||
INC_FLAGS += -I$(src-perf)/util/include
|
||||
INC_FLAGS += -I$(src-perf)/arch/$(ARCH)/include
|
||||
INC_FLAGS += -I$(src-perf)/arch/$(SRCARCH)/include
|
||||
INC_FLAGS += -I$(srctree)/tools/include/uapi
|
||||
INC_FLAGS += -I$(srctree)/tools/include/
|
||||
INC_FLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/uapi
|
||||
INC_FLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/
|
||||
INC_FLAGS += -I$(srctree)/tools/arch/$(ARCH)/
|
||||
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi
|
||||
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/
|
||||
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/
|
||||
|
||||
# $(obj-perf) for generated common-cmds.h
|
||||
# $(obj-perf)/util for generated bison/flex headers
|
||||
@ -355,7 +355,7 @@ ifndef NO_LIBELF
|
||||
|
||||
ifndef NO_DWARF
|
||||
ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
|
||||
msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
|
||||
msg := $(warning DWARF register mappings have not been defined for architecture $(SRCARCH), DWARF support disabled);
|
||||
NO_DWARF := 1
|
||||
else
|
||||
CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
|
||||
@ -380,7 +380,7 @@ ifndef NO_LIBELF
|
||||
CFLAGS += -DHAVE_BPF_PROLOGUE
|
||||
$(call detected,CONFIG_BPF_PROLOGUE)
|
||||
else
|
||||
msg := $(warning BPF prologue is not supported by architecture $(ARCH), missing regs_query_register_offset());
|
||||
msg := $(warning BPF prologue is not supported by architecture $(SRCARCH), missing regs_query_register_offset());
|
||||
endif
|
||||
else
|
||||
msg := $(warning DWARF support is off, BPF prologue is disabled);
|
||||
@ -406,7 +406,7 @@ ifdef PERF_HAVE_JITDUMP
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),powerpc)
|
||||
ifeq ($(SRCARCH),powerpc)
|
||||
ifndef NO_DWARF
|
||||
CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
|
||||
endif
|
||||
@ -487,7 +487,7 @@ else
|
||||
endif
|
||||
|
||||
ifndef NO_LOCAL_LIBUNWIND
|
||||
ifeq ($(ARCH),$(filter $(ARCH),arm arm64))
|
||||
ifeq ($(SRCARCH),$(filter $(SRCARCH),arm arm64))
|
||||
$(call feature_check,libunwind-debug-frame)
|
||||
ifneq ($(feature-libunwind-debug-frame), 1)
|
||||
msg := $(warning No debug_frame support found in libunwind);
|
||||
@ -740,7 +740,7 @@ ifeq (${IS_64_BIT}, 1)
|
||||
NO_PERF_READ_VDSO32 := 1
|
||||
endif
|
||||
endif
|
||||
ifneq ($(ARCH), x86)
|
||||
ifneq ($(SRCARCH), x86)
|
||||
NO_PERF_READ_VDSOX32 := 1
|
||||
endif
|
||||
ifndef NO_PERF_READ_VDSOX32
|
||||
@ -769,7 +769,7 @@ ifdef LIBBABELTRACE
|
||||
endif
|
||||
|
||||
ifndef NO_AUXTRACE
|
||||
ifeq ($(ARCH),x86)
|
||||
ifeq ($(SRCARCH),x86)
|
||||
ifeq ($(feature-get_cpuid), 0)
|
||||
msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc);
|
||||
NO_AUXTRACE := 1
|
||||
@ -872,7 +872,7 @@ sysconfdir = $(prefix)/etc
|
||||
ETC_PERFCONFIG = etc/perfconfig
|
||||
endif
|
||||
ifndef lib
|
||||
ifeq ($(ARCH)$(IS_64_BIT), x861)
|
||||
ifeq ($(SRCARCH)$(IS_64_BIT), x861)
|
||||
lib = lib64
|
||||
else
|
||||
lib = lib
|
||||
|
@ -226,7 +226,7 @@ endif
|
||||
|
||||
ifeq ($(config),0)
|
||||
include $(srctree)/tools/scripts/Makefile.arch
|
||||
-include arch/$(ARCH)/Makefile
|
||||
-include arch/$(SRCARCH)/Makefile
|
||||
endif
|
||||
|
||||
# The FEATURE_DUMP_EXPORT holds location of the actual
|
||||
|
@ -1,2 +1,2 @@
|
||||
libperf-y += common.o
|
||||
libperf-y += $(ARCH)/
|
||||
libperf-y += $(SRCARCH)/
|
||||
|
@ -2,7 +2,7 @@ hostprogs := jevents
|
||||
|
||||
jevents-y += json.o jsmn.o jevents.o
|
||||
pmu-events-y += pmu-events.o
|
||||
JDIR = pmu-events/arch/$(ARCH)
|
||||
JDIR = pmu-events/arch/$(SRCARCH)
|
||||
JSON = $(shell [ -d $(JDIR) ] && \
|
||||
find $(JDIR) -name '*.json' -o -name 'mapfile.csv')
|
||||
#
|
||||
@ -10,4 +10,4 @@ JSON = $(shell [ -d $(JDIR) ] && \
|
||||
# directory and create tables in pmu-events.c.
|
||||
#
|
||||
$(OUTPUT)pmu-events/pmu-events.c: $(JSON) $(JEVENTS)
|
||||
$(Q)$(call echo-cmd,gen)$(JEVENTS) $(ARCH) pmu-events/arch $(OUTPUT)pmu-events/pmu-events.c $(V)
|
||||
$(Q)$(call echo-cmd,gen)$(JEVENTS) $(SRCARCH) pmu-events/arch $(OUTPUT)pmu-events/pmu-events.c $(V)
|
||||
|
@ -75,7 +75,7 @@ $(OUTPUT)tests/llvm-src-relocation.c: tests/bpf-script-test-relocation.c tests/B
|
||||
$(Q)sed -e 's/"/\\"/g' -e 's/\(.*\)/"\1\\n"/g' $< >> $@
|
||||
$(Q)echo ';' >> $@
|
||||
|
||||
ifeq ($(ARCH),$(filter $(ARCH),x86 arm arm64 powerpc))
|
||||
ifeq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc))
|
||||
perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
|
||||
endif
|
||||
|
||||
|
@ -83,7 +83,7 @@ int test__task_exit(int subtest __maybe_unused)
|
||||
|
||||
evsel = perf_evlist__first(evlist);
|
||||
evsel->attr.task = 1;
|
||||
evsel->attr.sample_freq = 0;
|
||||
evsel->attr.sample_freq = 1;
|
||||
evsel->attr.inherit = 0;
|
||||
evsel->attr.watermark = 0;
|
||||
evsel->attr.wakeup_events = 1;
|
||||
|
@ -273,8 +273,20 @@ struct perf_evsel *perf_evsel__new_cycles(void)
|
||||
struct perf_evsel *evsel;
|
||||
|
||||
event_attr_init(&attr);
|
||||
/*
|
||||
* Unnamed union member, not supported as struct member named
|
||||
* initializer in older compilers such as gcc 4.4.7
|
||||
*
|
||||
* Just for probing the precise_ip:
|
||||
*/
|
||||
attr.sample_period = 1;
|
||||
|
||||
perf_event_attr__set_max_precise_ip(&attr);
|
||||
/*
|
||||
* Now let the usual logic to set up the perf_event_attr defaults
|
||||
* to kick in when we return and before perf_evsel__open() is called.
|
||||
*/
|
||||
attr.sample_period = 0;
|
||||
|
||||
evsel = perf_evsel__new(&attr);
|
||||
if (evsel == NULL)
|
||||
|
@ -841,7 +841,7 @@ static int write_group_desc(int fd, struct perf_header *h __maybe_unused,
|
||||
|
||||
/*
|
||||
* default get_cpuid(): nothing gets recorded
|
||||
* actual implementation must be in arch/$(ARCH)/util/header.c
|
||||
* actual implementation must be in arch/$(SRCARCH)/util/header.c
|
||||
*/
|
||||
int __weak get_cpuid(char *buffer __maybe_unused, size_t sz __maybe_unused)
|
||||
{
|
||||
|
@ -178,6 +178,14 @@ frame_callback(Dwfl_Frame *state, void *arg)
|
||||
Dwarf_Addr pc;
|
||||
bool isactivation;
|
||||
|
||||
if (!dwfl_frame_pc(state, &pc, NULL)) {
|
||||
pr_err("%s", dwfl_errmsg(-1));
|
||||
return DWARF_CB_ABORT;
|
||||
}
|
||||
|
||||
// report the module before we query for isactivation
|
||||
report_module(pc, ui);
|
||||
|
||||
if (!dwfl_frame_pc(state, &pc, &isactivation)) {
|
||||
pr_err("%s", dwfl_errmsg(-1));
|
||||
return DWARF_CB_ABORT;
|
||||
|
Loading…
Reference in New Issue
Block a user