Commit abbdd79b authored by Kan Liang's avatar Kan Liang Committed by Namhyung Kim
Browse files

perf mem: Clean up perf_mem_events__name()



Introduce a generic perf_mem_events__name(). Remove the ARCH-specific
one.

The mem_load events may have a different format. Add ldlat and aux_event
in the struct perf_mem_event to indicate the format and the extra aux
event.

Add perf_mem_events_intel_aux[] to support the extra mem_load_aux event.

Rename perf_mem_events__name to perf_pmu__mem_events_name.

Reviewed-by: default avatarIan Rogers <irogers@google.com>
Tested-by: default avatarRavi Bangoria <ravi.bangoria@amd.com>
Tested-by: default avatarLeo Yan <leo.yan@linaro.org>
Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
Cc: james.clark@arm.com
Cc: will@kernel.org
Cc: mike.leach@linaro.org
Cc: renyu.zj@linux.alibaba.com
Cc: yuhaixin.yhx@linux.alibaba.com
Cc: tmricht@linux.ibm.com
Cc: atrajeev@linux.vnet.ibm.com
Cc: linux-arm-kernel@lists.infradead.org
Cc: john.g.garry@oracle.com
Link: https://lore.kernel.org/r/20240123185036.3461837-4-kan.liang@linux.intel.com


Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
parent a30450e6
Loading
Loading
Loading
Loading
+4 −22
Original line number Diff line number Diff line
@@ -3,28 +3,10 @@
#include "util/mem-events.h"
#include "mem-events.h"

#define E(t, n, s) { .tag = t, .name = n, .sysfs_name = s }
#define E(t, n, s, l, a) { .tag = t, .name = n, .sysfs_name = s, .ldlat = l, .aux_event = a }

struct perf_mem_event perf_mem_events_arm[PERF_MEM_EVENTS__MAX] = {
	E("spe-load",	"arm_spe_0/ts_enable=1,pa_enable=1,load_filter=1,store_filter=0,min_latency=%u/",	"arm_spe_0"),
	E("spe-store",	"arm_spe_0/ts_enable=1,pa_enable=1,load_filter=0,store_filter=1/",			"arm_spe_0"),
	E("spe-ldst",	"arm_spe_0/ts_enable=1,pa_enable=1,load_filter=1,store_filter=1,min_latency=%u/",	"arm_spe_0"),
	E("spe-load",	"%s/ts_enable=1,pa_enable=1,load_filter=1,store_filter=0,min_latency=%u/",	"arm_spe_0",	true,	0),
	E("spe-store",	"%s/ts_enable=1,pa_enable=1,load_filter=0,store_filter=1/",			"arm_spe_0",	false,	0),
	E("spe-ldst",	"%s/ts_enable=1,pa_enable=1,load_filter=1,store_filter=1,min_latency=%u/",	"arm_spe_0",	true,	0),
};

static char mem_ev_name[100];

const char *perf_mem_events__name(int i, const char *pmu_name __maybe_unused)
{
	struct perf_mem_event *e = &perf_mem_events_arm[i];

	if (i >= PERF_MEM_EVENTS__MAX)
		return NULL;

	if (i == PERF_MEM_EVENTS__LOAD || i == PERF_MEM_EVENTS__LOAD_STORE)
		scnprintf(mem_ev_name, sizeof(mem_ev_name),
			  e->name, perf_mem_events__loads_ldlat);
	else /* PERF_MEM_EVENTS__STORE */
		scnprintf(mem_ev_name, sizeof(mem_ev_name), e->name);

	return mem_ev_name;
}
+1 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ perf-y += header.o
perf-$(CONFIG_LIBTRACEEVENT) += kvm-stat.o
perf-y += perf_regs.o
perf-y += mem-events.o
perf-y += pmu.o
perf-y += sym-handling.o
perf-y += evsel.o
perf-y += event.o
+8 −8
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
#include "map_symbol.h"
#include "util/map_symbol.h"
#include "util/mem-events.h"
#include "mem-events.h"

/* PowerPC does not support 'ldlat' parameter. */
const char *perf_mem_events__name(int i, const char *pmu_name __maybe_unused)
{
	if (i == PERF_MEM_EVENTS__LOAD)
		return "cpu/mem-loads/";
#define E(t, n, s, l, a) { .tag = t, .name = n, .sysfs_name = s, .ldlat = l, .aux_event = a }

	return "cpu/mem-stores/";
}
struct perf_mem_event perf_mem_events_power[PERF_MEM_EVENTS__MAX] = {
	E("ldlat-loads",	"%s/mem-loads/",	"cpu/events/mem-loads",		false,	0),
	E("ldlat-stores",	"%s/mem-stores/",	"cpu/events/mem-stores",	false,	0),
	E(NULL,			NULL,			NULL,				false,	0),
};
+7 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _POWER_MEM_EVENTS_H
#define _POWER_MEM_EVENTS_H

extern struct perf_mem_event perf_mem_events_power[PERF_MEM_EVENTS__MAX];

#endif /* _POWER_MEM_EVENTS_H */
+12 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0

#include <string.h>

#include "../../../util/pmu.h"
#include "mem-events.h"

void perf_pmu__arch_init(struct perf_pmu *pmu)
{
	if (pmu->is_core)
		pmu->mem_events = perf_mem_events_power;
}
Loading