[PATCH 15/19] perf: Simplify group validation
Robin Murphy
robin.murphy at arm.com
Wed Aug 13 17:01:07 UTC 2025
All of these drivers copy a pattern of actively policing cross-PMU
groups, which is redundant since commit bf480f938566 ("perf/core: Don't
allow grouping events from different hw pmus"). Clean up these checks to
simplfy matters, especially for thunderx2 which can reduce right down to
trivial counting.
Signed-off-by: Robin Murphy <robin.murphy at arm.com>
---
drivers/perf/arm_cspmu/arm_cspmu.c | 7 ++-----
drivers/perf/arm_dsu_pmu.c | 6 ++----
drivers/perf/arm_pmu.c | 11 ++---------
drivers/perf/thunderx2_pmu.c | 30 +++++++-----------------------
4 files changed, 13 insertions(+), 41 deletions(-)
diff --git a/drivers/perf/arm_cspmu/arm_cspmu.c b/drivers/perf/arm_cspmu/arm_cspmu.c
index efa9b229e701..7f5ea749b85c 100644
--- a/drivers/perf/arm_cspmu/arm_cspmu.c
+++ b/drivers/perf/arm_cspmu/arm_cspmu.c
@@ -561,12 +561,9 @@ static bool arm_cspmu_validate_event(struct pmu *pmu,
struct arm_cspmu_hw_events *hw_events,
struct perf_event *event)
{
- if (is_software_event(event))
- return true;
-
- /* Reject groups spanning multiple HW PMUs. */
+ /* Ignore grouped events that aren't ours */
if (event->pmu != pmu)
- return false;
+ return true;
return (arm_cspmu_get_event_idx(hw_events, event) >= 0);
}
diff --git a/drivers/perf/arm_dsu_pmu.c b/drivers/perf/arm_dsu_pmu.c
index cb4fb59fe04b..7480fd6fe377 100644
--- a/drivers/perf/arm_dsu_pmu.c
+++ b/drivers/perf/arm_dsu_pmu.c
@@ -492,11 +492,9 @@ static bool dsu_pmu_validate_event(struct pmu *pmu,
struct dsu_hw_events *hw_events,
struct perf_event *event)
{
- if (is_software_event(event))
- return true;
- /* Reject groups spanning multiple HW PMUs. */
+ /* Ignore grouped events that aren't ours */
if (event->pmu != pmu)
- return false;
+ return true;
return dsu_pmu_get_event_idx(hw_events, event) >= 0;
}
diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c
index e8a3c8e99da0..2c1af3a0207c 100644
--- a/drivers/perf/arm_pmu.c
+++ b/drivers/perf/arm_pmu.c
@@ -375,16 +375,9 @@ validate_event(struct pmu *pmu, struct pmu_hw_events *hw_events,
{
struct arm_pmu *armpmu;
- if (is_software_event(event))
- return 1;
-
- /*
- * Reject groups spanning multiple HW PMUs (e.g. CPU + CCI). The
- * core perf code won't check that the pmu->ctx == leader->ctx
- * until after pmu->event_init(event).
- */
+ /* Ignore grouped events that aren't ours */
if (event->pmu != pmu)
- return 0;
+ return 1;
armpmu = to_arm_pmu(event->pmu);
return armpmu->get_event_idx(hw_events, event) >= 0;
diff --git a/drivers/perf/thunderx2_pmu.c b/drivers/perf/thunderx2_pmu.c
index 6ed4707bd6bb..472eb4494fd1 100644
--- a/drivers/perf/thunderx2_pmu.c
+++ b/drivers/perf/thunderx2_pmu.c
@@ -519,19 +519,6 @@ static enum tx2_uncore_type get_tx2_pmu_type(struct acpi_device *adev)
return (enum tx2_uncore_type)id->driver_data;
}
-static bool tx2_uncore_validate_event(struct pmu *pmu,
- struct perf_event *event, int *counters)
-{
- if (is_software_event(event))
- return true;
- /* Reject groups spanning multiple HW PMUs. */
- if (event->pmu != pmu)
- return false;
-
- *counters = *counters + 1;
- return true;
-}
-
/*
* Make sure the group of events can be scheduled at once
* on the PMU.
@@ -539,23 +526,20 @@ static bool tx2_uncore_validate_event(struct pmu *pmu,
static bool tx2_uncore_validate_event_group(struct perf_event *event,
int max_counters)
{
- struct perf_event *sibling, *leader = event->group_leader;
- int counters = 0;
+ struct perf_event *sibling;
+ int counters = 1;
if (event->group_leader == event)
return true;
- if (!tx2_uncore_validate_event(event->pmu, leader, &counters))
- return false;
+ if (event->group_leader->pmu == event->pmu)
+ ++counters;
- for_each_sibling_event(sibling, leader) {
- if (!tx2_uncore_validate_event(event->pmu, sibling, &counters))
- return false;
+ for_each_sibling_event(sibling, event->group_leader) {
+ if (sibling->pmu == event->pmu)
+ ++counters;
}
- if (!tx2_uncore_validate_event(event->pmu, event, &counters))
- return false;
-
/*
* If the group requires more counters than the HW has,
* it cannot ever be scheduled.
--
2.39.2.101.g768bb238c484.dirty
More information about the Intel-xe
mailing list