]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf/arm_cspmu: Add callback to reset filter config
authorBesar Wicaksono <bwicaksono@nvidia.com>
Tue, 30 Sep 2025 00:26:01 +0000 (00:26 +0000)
committerWill Deacon <will@kernel.org>
Mon, 3 Nov 2025 13:35:07 +0000 (13:35 +0000)
Implementer may need to reset a filter config when
stopping a counter, thus adding a callback for this.

Reviewed-by: Ilkka Koskinen <ilkka@os.amperecomputing.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Besar Wicaksono <bwicaksono@nvidia.com>
Signed-off-by: Will Deacon <will@kernel.org>
drivers/perf/arm_cspmu/arm_cspmu.c
drivers/perf/arm_cspmu/arm_cspmu.h

index efa9b229e7012ea218337b54fb2a86af867df1de..82d7ed6202f182e748ada2b5b43d1db63f5b868f 100644 (file)
@@ -815,6 +815,10 @@ static void arm_cspmu_stop(struct perf_event *event, int pmu_flags)
                return;
 
        arm_cspmu_disable_counter(cspmu, hwc->idx);
+
+       if (cspmu->impl.ops.reset_ev_filter)
+               cspmu->impl.ops.reset_ev_filter(cspmu, event);
+
        arm_cspmu_event_update(event);
 
        hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE;
index 19684b76bd969b84b5a9815b92fb8c70f9ce1edc..23bfc4a58064b98646ffc28b49973124cb1f2da3 100644 (file)
@@ -152,11 +152,13 @@ struct arm_cspmu_impl_ops {
        bool (*is_cycle_counter_event)(const struct perf_event *event);
        /* Decode event type/id from configs */
        u32 (*event_type)(const struct perf_event *event);
-       /* Set event filters */
+       /* Set/reset event filters */
        void (*set_cc_filter)(struct arm_cspmu *cspmu,
                              const struct perf_event *event);
        void (*set_ev_filter)(struct arm_cspmu *cspmu,
                              const struct perf_event *event);
+       void (*reset_ev_filter)(struct arm_cspmu *cspmu,
+                               const struct perf_event *event);
        /* Implementation specific event validation */
        int (*validate_event)(struct arm_cspmu *cspmu,
                              struct perf_event *event);