Commit 5a982132 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

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/core

Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:

 * Add missing 'finished_round' event forwarding in 'perf inject', from Adrian Hunter.

 * Assorted tidy ups, from Adrian Hunter.

 * Fall back to sysfs event names when parsing fails, from Andi Kleen.

 * List pmu events in perf list, from Andi Kleen.

 * Cleanup some memory allocation/freeing uses, from David Ahern.

 * Add option to collapse undesired parts of call graph, from Greg Price.

 * Prep work for multi perf data file storage, from Jiri Olsa.

 * Add support for more than two files comparision in 'perf diff', from Jiri Olsa

 * A few more 'perf test' improvements, from Jiri Olsa

 * libtraceevent cleanups, from Namhyung Kim.

 * Remove odd build stall in 'perf sched' by moving a large struct initialization
   from a local variable to a global one, from Namhyung Kim.

 * Add support for callchains in the gtk UI, from Namhyung Kim.

 * Do not apply symfs for an absolute vmlinux path, fix from Namhyung Kim.

 * Use default include path notation for libtraceevent, from Robert Richter.

 * Fix 'make tools/perf', from Robert Richter.

 * Make Power7 events available, from Runzhen Wang.

 * Add --objdump option to 'perf top', from Sukadev Bhattiprolu.

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents e43fff2b 2a08c3ec
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -142,11 +142,11 @@ extern ssize_t power_events_sysfs_show(struct device *dev,
#define	EVENT_PTR(_id, _suffix)		&EVENT_VAR(_id, _suffix).attr.attr

#define	EVENT_ATTR(_name, _id, _suffix)					\
	PMU_EVENT_ATTR(_name, EVENT_VAR(_id, _suffix), PME_PM_##_id,	\
	PMU_EVENT_ATTR(_name, EVENT_VAR(_id, _suffix), PME_##_id,	\
			power_events_sysfs_show)

#define	GENERIC_EVENT_ATTR(_name, _id)	EVENT_ATTR(_name, _id, _g)
#define	GENERIC_EVENT_PTR(_id)		EVENT_PTR(_id, _g)

#define	POWER_EVENT_ATTR(_name, _id)	EVENT_ATTR(PM_##_name, _id, _p)
#define	POWER_EVENT_ATTR(_name, _id)	EVENT_ATTR(_name, _id, _p)
#define	POWER_EVENT_PTR(_id)		EVENT_PTR(_id, _p)
+548 −0

File added.

Preview size limit exceeded, changes collapsed.

+32 −116
Original line number Diff line number Diff line
@@ -53,37 +53,13 @@
/*
 * Power7 event codes.
 */
#define	PME_PM_CYC			0x1e
#define	PME_PM_GCT_NOSLOT_CYC		0x100f8
#define	PME_PM_CMPLU_STALL		0x4000a
#define	PME_PM_INST_CMPL		0x2
#define	PME_PM_LD_REF_L1		0xc880
#define	PME_PM_LD_MISS_L1		0x400f0
#define	PME_PM_BRU_FIN			0x10068
#define	PME_PM_BR_MPRED			0x400f6

#define PME_PM_CMPLU_STALL_FXU			0x20014
#define PME_PM_CMPLU_STALL_DIV			0x40014
#define PME_PM_CMPLU_STALL_SCALAR		0x40012
#define PME_PM_CMPLU_STALL_SCALAR_LONG		0x20018
#define PME_PM_CMPLU_STALL_VECTOR		0x2001c
#define PME_PM_CMPLU_STALL_VECTOR_LONG		0x4004a
#define PME_PM_CMPLU_STALL_LSU			0x20012
#define PME_PM_CMPLU_STALL_REJECT		0x40016
#define PME_PM_CMPLU_STALL_ERAT_MISS		0x40018
#define PME_PM_CMPLU_STALL_DCACHE_MISS		0x20016
#define PME_PM_CMPLU_STALL_STORE		0x2004a
#define PME_PM_CMPLU_STALL_THRD			0x1001c
#define PME_PM_CMPLU_STALL_IFU			0x4004c
#define PME_PM_CMPLU_STALL_BRU			0x4004e
#define PME_PM_GCT_NOSLOT_IC_MISS		0x2001a
#define PME_PM_GCT_NOSLOT_BR_MPRED		0x4001a
#define PME_PM_GCT_NOSLOT_BR_MPRED_IC_MISS	0x4001c
#define PME_PM_GRP_CMPL				0x30004
#define PME_PM_1PLUS_PPC_CMPL			0x100f2
#define PME_PM_CMPLU_STALL_DFU			0x2003c
#define PME_PM_RUN_CYC				0x200f4
#define PME_PM_RUN_INST_CMPL			0x400fa
#define EVENT(_name, _code) \
	PME_##_name = _code,

enum {
#include "power7-events-list.h"
};
#undef EVENT

/*
 * Layout of constraint bits:
@@ -398,96 +374,36 @@ static int power7_cache_events[C(MAX)][C(OP_MAX)][C(RESULT_MAX)] = {
};


GENERIC_EVENT_ATTR(cpu-cycles,			CYC);
GENERIC_EVENT_ATTR(stalled-cycles-frontend,	GCT_NOSLOT_CYC);
GENERIC_EVENT_ATTR(stalled-cycles-backend,	CMPLU_STALL);
GENERIC_EVENT_ATTR(instructions,		INST_CMPL);
GENERIC_EVENT_ATTR(cache-references,		LD_REF_L1);
GENERIC_EVENT_ATTR(cache-misses,		LD_MISS_L1);
GENERIC_EVENT_ATTR(branch-instructions,		BRU_FIN);
GENERIC_EVENT_ATTR(branch-misses,		BR_MPRED);

POWER_EVENT_ATTR(CYC,				CYC);
POWER_EVENT_ATTR(GCT_NOSLOT_CYC,		GCT_NOSLOT_CYC);
POWER_EVENT_ATTR(CMPLU_STALL,			CMPLU_STALL);
POWER_EVENT_ATTR(INST_CMPL,			INST_CMPL);
POWER_EVENT_ATTR(LD_REF_L1,			LD_REF_L1);
POWER_EVENT_ATTR(LD_MISS_L1,			LD_MISS_L1);
POWER_EVENT_ATTR(BRU_FIN,			BRU_FIN)
POWER_EVENT_ATTR(BR_MPRED,			BR_MPRED);

POWER_EVENT_ATTR(CMPLU_STALL_FXU,		CMPLU_STALL_FXU);
POWER_EVENT_ATTR(CMPLU_STALL_DIV,		CMPLU_STALL_DIV);
POWER_EVENT_ATTR(CMPLU_STALL_SCALAR,		CMPLU_STALL_SCALAR);
POWER_EVENT_ATTR(CMPLU_STALL_SCALAR_LONG,	CMPLU_STALL_SCALAR_LONG);
POWER_EVENT_ATTR(CMPLU_STALL_VECTOR,		CMPLU_STALL_VECTOR);
POWER_EVENT_ATTR(CMPLU_STALL_VECTOR_LONG,	CMPLU_STALL_VECTOR_LONG);
POWER_EVENT_ATTR(CMPLU_STALL_LSU,		CMPLU_STALL_LSU);
POWER_EVENT_ATTR(CMPLU_STALL_REJECT,		CMPLU_STALL_REJECT);

POWER_EVENT_ATTR(CMPLU_STALL_ERAT_MISS,		CMPLU_STALL_ERAT_MISS);
POWER_EVENT_ATTR(CMPLU_STALL_DCACHE_MISS,	CMPLU_STALL_DCACHE_MISS);
POWER_EVENT_ATTR(CMPLU_STALL_STORE,		CMPLU_STALL_STORE);
POWER_EVENT_ATTR(CMPLU_STALL_THRD,		CMPLU_STALL_THRD);
POWER_EVENT_ATTR(CMPLU_STALL_IFU,		CMPLU_STALL_IFU);
POWER_EVENT_ATTR(CMPLU_STALL_BRU,		CMPLU_STALL_BRU);
POWER_EVENT_ATTR(GCT_NOSLOT_IC_MISS,		GCT_NOSLOT_IC_MISS);

POWER_EVENT_ATTR(GCT_NOSLOT_BR_MPRED,		GCT_NOSLOT_BR_MPRED);
POWER_EVENT_ATTR(GCT_NOSLOT_BR_MPRED_IC_MISS,	GCT_NOSLOT_BR_MPRED_IC_MISS);
POWER_EVENT_ATTR(GRP_CMPL,			GRP_CMPL);
POWER_EVENT_ATTR(1PLUS_PPC_CMPL,		1PLUS_PPC_CMPL);
POWER_EVENT_ATTR(CMPLU_STALL_DFU,		CMPLU_STALL_DFU);
POWER_EVENT_ATTR(RUN_CYC,			RUN_CYC);
POWER_EVENT_ATTR(RUN_INST_CMPL,			RUN_INST_CMPL);
GENERIC_EVENT_ATTR(cpu-cycles,			PM_CYC);
GENERIC_EVENT_ATTR(stalled-cycles-frontend,	PM_GCT_NOSLOT_CYC);
GENERIC_EVENT_ATTR(stalled-cycles-backend,	PM_CMPLU_STALL);
GENERIC_EVENT_ATTR(instructions,		PM_INST_CMPL);
GENERIC_EVENT_ATTR(cache-references,		PM_LD_REF_L1);
GENERIC_EVENT_ATTR(cache-misses,		PM_LD_MISS_L1);
GENERIC_EVENT_ATTR(branch-instructions,		PM_BRU_FIN);
GENERIC_EVENT_ATTR(branch-misses,		PM_BR_MPRED);

#define EVENT(_name, _code)     POWER_EVENT_ATTR(_name, _name);
#include "power7-events-list.h"
#undef EVENT

#define EVENT(_name, _code)     POWER_EVENT_PTR(_name),

static struct attribute *power7_events_attr[] = {
	GENERIC_EVENT_PTR(CYC),
	GENERIC_EVENT_PTR(GCT_NOSLOT_CYC),
	GENERIC_EVENT_PTR(CMPLU_STALL),
	GENERIC_EVENT_PTR(INST_CMPL),
	GENERIC_EVENT_PTR(LD_REF_L1),
	GENERIC_EVENT_PTR(LD_MISS_L1),
	GENERIC_EVENT_PTR(BRU_FIN),
	GENERIC_EVENT_PTR(BR_MPRED),

	POWER_EVENT_PTR(CYC),
	POWER_EVENT_PTR(GCT_NOSLOT_CYC),
	POWER_EVENT_PTR(CMPLU_STALL),
	POWER_EVENT_PTR(INST_CMPL),
	POWER_EVENT_PTR(LD_REF_L1),
	POWER_EVENT_PTR(LD_MISS_L1),
	POWER_EVENT_PTR(BRU_FIN),
	POWER_EVENT_PTR(BR_MPRED),

	POWER_EVENT_PTR(CMPLU_STALL_FXU),
	POWER_EVENT_PTR(CMPLU_STALL_DIV),
	POWER_EVENT_PTR(CMPLU_STALL_SCALAR),
	POWER_EVENT_PTR(CMPLU_STALL_SCALAR_LONG),
	POWER_EVENT_PTR(CMPLU_STALL_VECTOR),
	POWER_EVENT_PTR(CMPLU_STALL_VECTOR_LONG),
	POWER_EVENT_PTR(CMPLU_STALL_LSU),
	POWER_EVENT_PTR(CMPLU_STALL_REJECT),

	POWER_EVENT_PTR(CMPLU_STALL_ERAT_MISS),
	POWER_EVENT_PTR(CMPLU_STALL_DCACHE_MISS),
	POWER_EVENT_PTR(CMPLU_STALL_STORE),
	POWER_EVENT_PTR(CMPLU_STALL_THRD),
	POWER_EVENT_PTR(CMPLU_STALL_IFU),
	POWER_EVENT_PTR(CMPLU_STALL_BRU),
	POWER_EVENT_PTR(GCT_NOSLOT_IC_MISS),
	POWER_EVENT_PTR(GCT_NOSLOT_BR_MPRED),

	POWER_EVENT_PTR(GCT_NOSLOT_BR_MPRED_IC_MISS),
	POWER_EVENT_PTR(GRP_CMPL),
	POWER_EVENT_PTR(1PLUS_PPC_CMPL),
	POWER_EVENT_PTR(CMPLU_STALL_DFU),
	POWER_EVENT_PTR(RUN_CYC),
	POWER_EVENT_PTR(RUN_INST_CMPL),
	GENERIC_EVENT_PTR(PM_CYC),
	GENERIC_EVENT_PTR(PM_GCT_NOSLOT_CYC),
	GENERIC_EVENT_PTR(PM_CMPLU_STALL),
	GENERIC_EVENT_PTR(PM_INST_CMPL),
	GENERIC_EVENT_PTR(PM_LD_REF_L1),
	GENERIC_EVENT_PTR(PM_LD_MISS_L1),
	GENERIC_EVENT_PTR(PM_BRU_FIN),
	GENERIC_EVENT_PTR(PM_BR_MPRED),

	#include "power7-events-list.h"
	#undef EVENT
	NULL
};


static struct attribute_group power7_pmu_events_group = {
	.name = "events",
	.attrs = power7_events_attr,
+4 −14
Original line number Diff line number Diff line
@@ -39,13 +39,8 @@ bindir_relative = bin
bindir = $(prefix)/$(bindir_relative)
man_dir = $(prefix)/share/man
man_dir_SQ = '$(subst ','\'',$(man_dir))'
html_install = $(prefix)/share/kernelshark/html
html_install_SQ = '$(subst ','\'',$(html_install))'
img_install = $(prefix)/share/kernelshark/html/images
img_install_SQ = '$(subst ','\'',$(img_install))'

export man_dir man_dir_SQ html_install html_install_SQ INSTALL
export img_install img_install_SQ
export man_dir man_dir_SQ INSTALL
export DESTDIR DESTDIR_SQ

# copy a bit from Linux kbuild
@@ -76,10 +71,7 @@ $(if $(BUILD_OUTPUT),, \

all: sub-make

gui: force
	$(call build_output, all_cmd)

$(filter-out gui,$(MAKECMDGOALS)): sub-make
$(MAKECMDGOALS): sub-make

sub-make: force
	$(call build_output, $(MAKECMDGOALS))
@@ -189,6 +181,7 @@ $(obj)/%.o: $(src)/%.c
	$(Q)$(call do_compile)

PEVENT_LIB_OBJS = event-parse.o trace-seq.o parse-filter.o parse-utils.o
PEVENT_LIB_OBJS += kbuffer-parse.o

ALL_OBJS = $(PEVENT_LIB_OBJS)

@@ -258,9 +251,6 @@ define check_deps
		$(RM) $@.$$$$
endef

$(gui_deps): ks_version.h
$(non_gui_deps): tc_version.h

$(all_deps): .%.d: $(src)/%.c
	$(Q)$(call check_deps)

@@ -300,7 +290,7 @@ define do_install
	$(INSTALL) $1 '$(DESTDIR_SQ)$2'
endef

install_lib: all_cmd install_plugins install_python
install_lib: all_cmd
	$(Q)$(call do_install,$(LIB_FILE),$(bindir_SQ))

install: install_lib
+3 −4
Original line number Diff line number Diff line
@@ -5450,10 +5450,9 @@ int pevent_register_print_function(struct pevent *pevent,
 * If @id is >= 0, then it is used to find the event.
 * else @sys_name and @event_name are used.
 */
int pevent_register_event_handler(struct pevent *pevent,
				  int id, char *sys_name, char *event_name,
				  pevent_event_handler_func func,
				  void *context)
int pevent_register_event_handler(struct pevent *pevent, int id,
				  const char *sys_name, const char *event_name,
				  pevent_event_handler_func func, void *context)
{
	struct event_format *event;
	struct event_handler *handle;
Loading