2023-10-13 04:03:35

by Anshuman Khandual

[permalink] [raw]
Subject: [PATCH V2] drivers: perf: arm_pmuv3: Drop some unused arguments from armv8_pmu_init()

There is just a single call site remaining for armv8_pmu_init(), passing on
NULL pointers for all custom 'struct attribute_group's. These arguments are
not really getting used, and hence can be dropped. Afterwards the function
armv8_pmu_init_nogroups() itself becomes redundant, and can also be dropped
as well.

The commit e424b1798526 ("arm64: perf: Refactor PMU init callbacks") wanted
to preserve the notion that non-default sysfs attributes could be used some
time in the future and hence armv8_pmu_init_nogroups() stayed on but now it
can be dropped to remove some redundant indirection, simplifying the code.

CC: James Clark <[email protected]>
Cc: Robin Murphy <[email protected]>
Cc: Will Deacon <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Anshuman Khandual <[email protected]>
---
This applies on v6.6-rc5

Changes in V2:

- Dropped the helper armv8_pmu_init_nogroups()
- Updated the commit message

Changes in V1:

https://lore.kernel.org/all/[email protected]/

drivers/perf/arm_pmuv3.c | 44 +++++++++++-----------------------------
1 file changed, 12 insertions(+), 32 deletions(-)

diff --git a/drivers/perf/arm_pmuv3.c b/drivers/perf/arm_pmuv3.c
index 8fcaa26f0f8a..c093b6e823f6 100644
--- a/drivers/perf/arm_pmuv3.c
+++ b/drivers/perf/arm_pmuv3.c
@@ -1187,10 +1187,7 @@ static void armv8_pmu_register_sysctl_table(void)
}

static int armv8_pmu_init(struct arm_pmu *cpu_pmu, char *name,
- int (*map_event)(struct perf_event *event),
- const struct attribute_group *events,
- const struct attribute_group *format,
- const struct attribute_group *caps)
+ int (*map_event)(struct perf_event *event))
{
int ret = armv8pmu_probe_pmu(cpu_pmu);
if (ret)
@@ -1212,27 +1209,17 @@ static int armv8_pmu_init(struct arm_pmu *cpu_pmu, char *name,

cpu_pmu->name = name;
cpu_pmu->map_event = map_event;
- cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = events ?
- events : &armv8_pmuv3_events_attr_group;
- cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = format ?
- format : &armv8_pmuv3_format_attr_group;
- cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_CAPS] = caps ?
- caps : &armv8_pmuv3_caps_attr_group;
-
+ cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = &armv8_pmuv3_events_attr_group;
+ cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = &armv8_pmuv3_format_attr_group;
+ cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_CAPS] = &armv8_pmuv3_caps_attr_group;
armv8_pmu_register_sysctl_table();
return 0;
}

-static int armv8_pmu_init_nogroups(struct arm_pmu *cpu_pmu, char *name,
- int (*map_event)(struct perf_event *event))
-{
- return armv8_pmu_init(cpu_pmu, name, map_event, NULL, NULL, NULL);
-}
-
#define PMUV3_INIT_SIMPLE(name) \
static int name##_pmu_init(struct arm_pmu *cpu_pmu) \
{ \
- return armv8_pmu_init_nogroups(cpu_pmu, #name, armv8_pmuv3_map_event);\
+ return armv8_pmu_init(cpu_pmu, #name, armv8_pmuv3_map_event); \
}

PMUV3_INIT_SIMPLE(armv8_pmuv3)
@@ -1263,44 +1250,37 @@ PMUV3_INIT_SIMPLE(armv8_nvidia_denver)

static int armv8_a35_pmu_init(struct arm_pmu *cpu_pmu)
{
- return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a35",
- armv8_a53_map_event);
+ return armv8_pmu_init(cpu_pmu, "armv8_cortex_a35", armv8_a53_map_event);
}

static int armv8_a53_pmu_init(struct arm_pmu *cpu_pmu)
{
- return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a53",
- armv8_a53_map_event);
+ return armv8_pmu_init(cpu_pmu, "armv8_cortex_a53", armv8_a53_map_event);
}

static int armv8_a57_pmu_init(struct arm_pmu *cpu_pmu)
{
- return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a57",
- armv8_a57_map_event);
+ return armv8_pmu_init(cpu_pmu, "armv8_cortex_a57", armv8_a57_map_event);
}

static int armv8_a72_pmu_init(struct arm_pmu *cpu_pmu)
{
- return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a72",
- armv8_a57_map_event);
+ return armv8_pmu_init(cpu_pmu, "armv8_cortex_a72", armv8_a57_map_event);
}

static int armv8_a73_pmu_init(struct arm_pmu *cpu_pmu)
{
- return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a73",
- armv8_a73_map_event);
+ return armv8_pmu_init(cpu_pmu, "armv8_cortex_a73", armv8_a73_map_event);
}

static int armv8_thunder_pmu_init(struct arm_pmu *cpu_pmu)
{
- return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cavium_thunder",
- armv8_thunder_map_event);
+ return armv8_pmu_init(cpu_pmu, "armv8_cavium_thunder", armv8_thunder_map_event);
}

static int armv8_vulcan_pmu_init(struct arm_pmu *cpu_pmu)
{
- return armv8_pmu_init_nogroups(cpu_pmu, "armv8_brcm_vulcan",
- armv8_vulcan_map_event);
+ return armv8_pmu_init(cpu_pmu, "armv8_brcm_vulcan", armv8_vulcan_map_event);
}

static const struct of_device_id armv8_pmu_of_device_ids[] = {
--
2.25.1


2023-10-13 11:08:50

by Mark Rutland

[permalink] [raw]
Subject: Re: [PATCH V2] drivers: perf: arm_pmuv3: Drop some unused arguments from armv8_pmu_init()

On Fri, Oct 13, 2023 at 09:33:07AM +0530, Anshuman Khandual wrote:
> There is just a single call site remaining for armv8_pmu_init(), passing on
> NULL pointers for all custom 'struct attribute_group's. These arguments are
> not really getting used, and hence can be dropped. Afterwards the function
> armv8_pmu_init_nogroups() itself becomes redundant, and can also be dropped
> as well.
>
> The commit e424b1798526 ("arm64: perf: Refactor PMU init callbacks") wanted
> to preserve the notion that non-default sysfs attributes could be used some
> time in the future and hence armv8_pmu_init_nogroups() stayed on but now it
> can be dropped to remove some redundant indirection, simplifying the code.

If you can make that commit message:

| All the PMU init functions want the default sysfs attribute groups, and so
| these all call armv8_pmu_init_nogroups(), with none calling armv8_pmu_init()
| directly. When we introduced armv8_pmu_init_nogroups() in commit:
|
| e424b1798526 ("arm64: perf: Refactor PMU init callbacks")
|
| ... we thought that we might need custom attribute groups in future, but as we
| evidently haven't, we can remove the option.
|
| This patch folds armv8_pmu_init_nogroups() into armv8_pmu_init(), removing the
| ability to use custome attribute groups and simplifying the code.

Then:

Acked-by: Mark Rutland <[email protected]>

Mark.

> CC: James Clark <[email protected]>
> Cc: Robin Murphy <[email protected]>
> Cc: Will Deacon <[email protected]>
> Cc: Mark Rutland <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Signed-off-by: Anshuman Khandual <[email protected]>
> ---
> This applies on v6.6-rc5
>
> Changes in V2:
>
> - Dropped the helper armv8_pmu_init_nogroups()
> - Updated the commit message
>
> Changes in V1:
>
> https://lore.kernel.org/all/[email protected]/
>
> drivers/perf/arm_pmuv3.c | 44 +++++++++++-----------------------------
> 1 file changed, 12 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/perf/arm_pmuv3.c b/drivers/perf/arm_pmuv3.c
> index 8fcaa26f0f8a..c093b6e823f6 100644
> --- a/drivers/perf/arm_pmuv3.c
> +++ b/drivers/perf/arm_pmuv3.c
> @@ -1187,10 +1187,7 @@ static void armv8_pmu_register_sysctl_table(void)
> }
>
> static int armv8_pmu_init(struct arm_pmu *cpu_pmu, char *name,
> - int (*map_event)(struct perf_event *event),
> - const struct attribute_group *events,
> - const struct attribute_group *format,
> - const struct attribute_group *caps)
> + int (*map_event)(struct perf_event *event))
> {
> int ret = armv8pmu_probe_pmu(cpu_pmu);
> if (ret)
> @@ -1212,27 +1209,17 @@ static int armv8_pmu_init(struct arm_pmu *cpu_pmu, char *name,
>
> cpu_pmu->name = name;
> cpu_pmu->map_event = map_event;
> - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = events ?
> - events : &armv8_pmuv3_events_attr_group;
> - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = format ?
> - format : &armv8_pmuv3_format_attr_group;
> - cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_CAPS] = caps ?
> - caps : &armv8_pmuv3_caps_attr_group;
> -
> + cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = &armv8_pmuv3_events_attr_group;
> + cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = &armv8_pmuv3_format_attr_group;
> + cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_CAPS] = &armv8_pmuv3_caps_attr_group;
> armv8_pmu_register_sysctl_table();
> return 0;
> }
>
> -static int armv8_pmu_init_nogroups(struct arm_pmu *cpu_pmu, char *name,
> - int (*map_event)(struct perf_event *event))
> -{
> - return armv8_pmu_init(cpu_pmu, name, map_event, NULL, NULL, NULL);
> -}
> -
> #define PMUV3_INIT_SIMPLE(name) \
> static int name##_pmu_init(struct arm_pmu *cpu_pmu) \
> { \
> - return armv8_pmu_init_nogroups(cpu_pmu, #name, armv8_pmuv3_map_event);\
> + return armv8_pmu_init(cpu_pmu, #name, armv8_pmuv3_map_event); \
> }
>
> PMUV3_INIT_SIMPLE(armv8_pmuv3)
> @@ -1263,44 +1250,37 @@ PMUV3_INIT_SIMPLE(armv8_nvidia_denver)
>
> static int armv8_a35_pmu_init(struct arm_pmu *cpu_pmu)
> {
> - return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a35",
> - armv8_a53_map_event);
> + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a35", armv8_a53_map_event);
> }
>
> static int armv8_a53_pmu_init(struct arm_pmu *cpu_pmu)
> {
> - return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a53",
> - armv8_a53_map_event);
> + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a53", armv8_a53_map_event);
> }
>
> static int armv8_a57_pmu_init(struct arm_pmu *cpu_pmu)
> {
> - return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a57",
> - armv8_a57_map_event);
> + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a57", armv8_a57_map_event);
> }
>
> static int armv8_a72_pmu_init(struct arm_pmu *cpu_pmu)
> {
> - return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a72",
> - armv8_a57_map_event);
> + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a72", armv8_a57_map_event);
> }
>
> static int armv8_a73_pmu_init(struct arm_pmu *cpu_pmu)
> {
> - return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cortex_a73",
> - armv8_a73_map_event);
> + return armv8_pmu_init(cpu_pmu, "armv8_cortex_a73", armv8_a73_map_event);
> }
>
> static int armv8_thunder_pmu_init(struct arm_pmu *cpu_pmu)
> {
> - return armv8_pmu_init_nogroups(cpu_pmu, "armv8_cavium_thunder",
> - armv8_thunder_map_event);
> + return armv8_pmu_init(cpu_pmu, "armv8_cavium_thunder", armv8_thunder_map_event);
> }
>
> static int armv8_vulcan_pmu_init(struct arm_pmu *cpu_pmu)
> {
> - return armv8_pmu_init_nogroups(cpu_pmu, "armv8_brcm_vulcan",
> - armv8_vulcan_map_event);
> + return armv8_pmu_init(cpu_pmu, "armv8_brcm_vulcan", armv8_vulcan_map_event);
> }
>
> static const struct of_device_id armv8_pmu_of_device_ids[] = {
> --
> 2.25.1
>