perf: qcom_l2: fix column exclusion check
authorNeil Leeder <nleeder@codeaurora.org>
Mon, 24 Jul 2017 21:17:02 +0000 (17:17 -0400)
committerWill Deacon <will.deacon@arm.com>
Wed, 26 Jul 2017 08:27:43 +0000 (09:27 +0100)
The check for column exclusion did not verify that the event being
checked was an L2 event, and not a software event.
Software events should not be checked for column exclusion.
This resulted in a group with both software and L2 events sometimes
incorrectly rejecting the L2 event for column exclusion and
not counting it.

Add a check for PMU type before applying column exclusion logic.

Fixes: 21bdbb7102edeaeb ("perf: add qcom l2 cache perf events driver")
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Neil Leeder <nleeder@codeaurora.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
drivers/perf/qcom_l2_pmu.c

index c259848228b4c337cab8e50ef1d0f6673fcb9b93..b242cce104686944efb68bfb4e8347358ffa135a 100644 (file)
@@ -546,6 +546,7 @@ static int l2_cache_event_init(struct perf_event *event)
        }
 
        if ((event != event->group_leader) &&
+           !is_software_event(event->group_leader) &&
            (L2_EVT_GROUP(event->group_leader->attr.config) ==
             L2_EVT_GROUP(event->attr.config))) {
                dev_dbg_ratelimited(&l2cache_pmu->pdev->dev,
@@ -558,6 +559,7 @@ static int l2_cache_event_init(struct perf_event *event)
        list_for_each_entry(sibling, &event->group_leader->sibling_list,
                            group_entry) {
                if ((sibling != event) &&
+                   !is_software_event(sibling) &&
                    (L2_EVT_GROUP(sibling->attr.config) ==
                     L2_EVT_GROUP(event->attr.config))) {
                        dev_dbg_ratelimited(&l2cache_pmu->pdev->dev,