]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drivers/perf: hisi: Extract the event filter check of L3C PMU
authorYicong Yang <yangyicong@hisilicon.com>
Fri, 29 Aug 2025 10:14:22 +0000 (18:14 +0800)
committerWill Deacon <will@kernel.org>
Mon, 22 Sep 2025 12:14:37 +0000 (13:14 +0100)
L3C PMU has 4 filter options which are sharing perf_event_attr::config1.
Driver will check config1 to see whether a certain event has a filter
setting. It'll be incorrect if we make use of other bits in config1
for non-filter options. So check whether each filter options are set
directly in a separate function instead.

Acked-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>
Signed-off-by: Yushan Wang <wangyushan12@huawei.com>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Signed-off-by: Will Deacon <will@kernel.org>
drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c

index db683dd7375c79eb8be0b16f773cafac57c976e6..a372dd2c07b5de5dba8c91d5e94f801bac99c4cf 100644 (file)
@@ -204,9 +204,15 @@ static void hisi_l3c_pmu_clear_core_tracetag(struct perf_event *event)
        }
 }
 
+static bool hisi_l3c_pmu_have_filter(struct perf_event *event)
+{
+       return hisi_get_tt_req(event) || hisi_get_tt_core(event) ||
+              hisi_get_datasrc_cfg(event) || hisi_get_datasrc_skt(event);
+}
+
 static void hisi_l3c_pmu_enable_filter(struct perf_event *event)
 {
-       if (event->attr.config1 != 0x0) {
+       if (hisi_l3c_pmu_have_filter(event)) {
                hisi_l3c_pmu_config_req_tracetag(event);
                hisi_l3c_pmu_config_core_tracetag(event);
                hisi_l3c_pmu_config_ds(event);
@@ -215,7 +221,7 @@ static void hisi_l3c_pmu_enable_filter(struct perf_event *event)
 
 static void hisi_l3c_pmu_disable_filter(struct perf_event *event)
 {
-       if (event->attr.config1 != 0x0) {
+       if (hisi_l3c_pmu_have_filter(event)) {
                hisi_l3c_pmu_clear_ds(event);
                hisi_l3c_pmu_clear_core_tracetag(event);
                hisi_l3c_pmu_clear_req_tracetag(event);