Skip to content

Commit e424b17

Browse files
rmurphy-armwilldeacon
authored andcommitted
arm64: perf: Refactor PMU init callbacks
The PMU init callbacks are already drowning in boilerplate, so before doubling the number of supported PMU models, give it a sensible refactor to significantly reduce the bloat, both in source and object code. Although nobody uses non-default sysfs attributes today, there's minimal impact to preserving the notion that maybe, some day, somebody might, so we may as well keep up appearances. Acked-by: Mark Rutland <[email protected]> Signed-off-by: Robin Murphy <[email protected]> Signed-off-by: Will Deacon <[email protected]>
1 parent aaa1972 commit e424b17

File tree

1 file changed

+27
-97
lines changed

1 file changed

+27
-97
lines changed

arch/arm64/kernel/perf_event.c

Lines changed: 27 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -953,7 +953,10 @@ static int armv8pmu_probe_pmu(struct arm_pmu *cpu_pmu)
953953
return probe.present ? 0 : -ENODEV;
954954
}
955955

956-
static int armv8_pmu_init(struct arm_pmu *cpu_pmu)
956+
static int armv8_pmu_init(struct arm_pmu *cpu_pmu, char *name,
957+
int (*map_event)(struct perf_event *event),
958+
const struct attribute_group *events,
959+
const struct attribute_group *format)
957960
{
958961
int ret = armv8pmu_probe_pmu(cpu_pmu);
959962
if (ret)
@@ -972,135 +975,62 @@ static int armv8_pmu_init(struct arm_pmu *cpu_pmu)
972975
cpu_pmu->set_event_filter = armv8pmu_set_event_filter;
973976
cpu_pmu->filter_match = armv8pmu_filter_match;
974977

978+
cpu_pmu->name = name;
979+
cpu_pmu->map_event = map_event;
980+
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = events ?
981+
events : &armv8_pmuv3_events_attr_group;
982+
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = format ?
983+
format : &armv8_pmuv3_format_attr_group;
984+
975985
return 0;
976986
}
977987

978988
static int armv8_pmuv3_init(struct arm_pmu *cpu_pmu)
979989
{
980-
int ret = armv8_pmu_init(cpu_pmu);
981-
if (ret)
982-
return ret;
983-
984-
cpu_pmu->name = "armv8_pmuv3";
985-
cpu_pmu->map_event = armv8_pmuv3_map_event;
986-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
987-
&armv8_pmuv3_events_attr_group;
988-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
989-
&armv8_pmuv3_format_attr_group;
990-
991-
return 0;
990+
return armv8_pmu_init(cpu_pmu, "armv8_pmuv3",
991+
armv8_pmuv3_map_event, NULL, NULL);
992992
}
993993

994994
static int armv8_a35_pmu_init(struct arm_pmu *cpu_pmu)
995995
{
996-
int ret = armv8_pmu_init(cpu_pmu);
997-
if (ret)
998-
return ret;
999-
1000-
cpu_pmu->name = "armv8_cortex_a35";
1001-
cpu_pmu->map_event = armv8_a53_map_event;
1002-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
1003-
&armv8_pmuv3_events_attr_group;
1004-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
1005-
&armv8_pmuv3_format_attr_group;
1006-
1007-
return 0;
996+
return armv8_pmu_init(cpu_pmu, "armv8_cortex_a35",
997+
armv8_a53_map_event, NULL, NULL);
1008998
}
1009999

10101000
static int armv8_a53_pmu_init(struct arm_pmu *cpu_pmu)
10111001
{
1012-
int ret = armv8_pmu_init(cpu_pmu);
1013-
if (ret)
1014-
return ret;
1015-
1016-
cpu_pmu->name = "armv8_cortex_a53";
1017-
cpu_pmu->map_event = armv8_a53_map_event;
1018-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
1019-
&armv8_pmuv3_events_attr_group;
1020-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
1021-
&armv8_pmuv3_format_attr_group;
1022-
1023-
return 0;
1002+
return armv8_pmu_init(cpu_pmu, "armv8_cortex_a53",
1003+
armv8_a53_map_event, NULL, NULL);
10241004
}
10251005

10261006
static int armv8_a57_pmu_init(struct arm_pmu *cpu_pmu)
10271007
{
1028-
int ret = armv8_pmu_init(cpu_pmu);
1029-
if (ret)
1030-
return ret;
1031-
1032-
cpu_pmu->name = "armv8_cortex_a57";
1033-
cpu_pmu->map_event = armv8_a57_map_event;
1034-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
1035-
&armv8_pmuv3_events_attr_group;
1036-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
1037-
&armv8_pmuv3_format_attr_group;
1038-
1039-
return 0;
1008+
return armv8_pmu_init(cpu_pmu, "armv8_cortex_a57",
1009+
armv8_a57_map_event, NULL, NULL);
10401010
}
10411011

10421012
static int armv8_a72_pmu_init(struct arm_pmu *cpu_pmu)
10431013
{
1044-
int ret = armv8_pmu_init(cpu_pmu);
1045-
if (ret)
1046-
return ret;
1047-
1048-
cpu_pmu->name = "armv8_cortex_a72";
1049-
cpu_pmu->map_event = armv8_a57_map_event;
1050-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
1051-
&armv8_pmuv3_events_attr_group;
1052-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
1053-
&armv8_pmuv3_format_attr_group;
1054-
1055-
return 0;
1014+
return armv8_pmu_init(cpu_pmu, "armv8_cortex_a72",
1015+
armv8_a57_map_event, NULL, NULL);
10561016
}
10571017

10581018
static int armv8_a73_pmu_init(struct arm_pmu *cpu_pmu)
10591019
{
1060-
int ret = armv8_pmu_init(cpu_pmu);
1061-
if (ret)
1062-
return ret;
1063-
1064-
cpu_pmu->name = "armv8_cortex_a73";
1065-
cpu_pmu->map_event = armv8_a73_map_event;
1066-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
1067-
&armv8_pmuv3_events_attr_group;
1068-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
1069-
&armv8_pmuv3_format_attr_group;
1070-
1071-
return 0;
1020+
return armv8_pmu_init(cpu_pmu, "armv8_cortex_a73",
1021+
armv8_a73_map_event, NULL, NULL);
10721022
}
10731023

10741024
static int armv8_thunder_pmu_init(struct arm_pmu *cpu_pmu)
10751025
{
1076-
int ret = armv8_pmu_init(cpu_pmu);
1077-
if (ret)
1078-
return ret;
1079-
1080-
cpu_pmu->name = "armv8_cavium_thunder";
1081-
cpu_pmu->map_event = armv8_thunder_map_event;
1082-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
1083-
&armv8_pmuv3_events_attr_group;
1084-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
1085-
&armv8_pmuv3_format_attr_group;
1086-
1087-
return 0;
1026+
return armv8_pmu_init(cpu_pmu, "armv8_cavium_thunder",
1027+
armv8_thunder_map_event, NULL, NULL);
10881028
}
10891029

10901030
static int armv8_vulcan_pmu_init(struct arm_pmu *cpu_pmu)
10911031
{
1092-
int ret = armv8_pmu_init(cpu_pmu);
1093-
if (ret)
1094-
return ret;
1095-
1096-
cpu_pmu->name = "armv8_brcm_vulcan";
1097-
cpu_pmu->map_event = armv8_vulcan_map_event;
1098-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
1099-
&armv8_pmuv3_events_attr_group;
1100-
cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
1101-
&armv8_pmuv3_format_attr_group;
1102-
1103-
return 0;
1032+
return armv8_pmu_init(cpu_pmu, "armv8_brcm_vulcan",
1033+
armv8_vulcan_map_event, NULL, NULL);
11041034
}
11051035

11061036
static const struct of_device_id armv8_pmu_of_device_ids[] = {

0 commit comments

Comments
 (0)