]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf/arm-cmn: Permit more exhaustive groups
authorRobin Murphy <robin.murphy@arm.com>
Wed, 11 Dec 2024 19:04:58 +0000 (19:04 +0000)
committerWill Deacon <will@kernel.org>
Thu, 19 Dec 2024 15:33:42 +0000 (15:33 +0000)
The group validation logic still somewhat assumes the original CMN-600
case of events counting globally, such that if one tries to group 9
events where the first 8 target a single DTC domain, the 9th will be
rejected because *a* DTC domain is full, even though it might only
target other non-overlapping domains and thus still be schedulable.
Improve matters by only counting the DTCs that the new event actually
needs (as arm_cmn_val_add_event() was already clever enough to do).

Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Reviewed-and-tested-by: Ilkka Koskinen <ilkka@os.amperecomputing.com>
Link: https://lore.kernel.org/r/bdfd1e58dac449e407c5cacfd6bf8577dc0a5899.1733943898.git.robin.murphy@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
drivers/perf/arm-cmn.c

index b20fa600e510c54ff73ff8aff9c036f0e444092b..ef959e66db7c33e33b46bbf18a277ba651e4a076 100644 (file)
@@ -1713,8 +1713,8 @@ static int arm_cmn_validate_group(struct arm_cmn *cmn, struct perf_event *event)
                goto done;
        }
 
-       for (i = 0; i < CMN_MAX_DTCS; i++)
-               if (val->dtc_count[i] == CMN_DT_NUM_COUNTERS)
+       for_each_hw_dtc_idx(hw, dtc, idx)
+               if (val->dtc_count[dtc] == CMN_DT_NUM_COUNTERS)
                        goto done;
 
        for_each_hw_dn(hw, dn, i) {