perf, x86: Fix LBR enable/disable vs cpuc->enabled
[deliverable/linux.git] / arch / x86 / kernel / cpu / perf_event_intel_lbr.c
index dcec765f8188e283e6b0dc22a06e956a59593628..0145f99f7a35513d65f6f0f960f6fb710840e167 100644 (file)
@@ -69,7 +69,7 @@ static void intel_pmu_lbr_enable(struct perf_event *event)
        if (!x86_pmu.lbr_nr)
                return;
 
-       WARN_ON(cpuc->enabled);
+       WARN_ON_ONCE(cpuc->enabled);
 
        /*
         * Reset the LBR stack if this is the first LBR user or
@@ -93,9 +93,10 @@ static void intel_pmu_lbr_disable(struct perf_event *event)
                return;
 
        cpuc->lbr_users--;
-
        BUG_ON(cpuc->lbr_users < 0);
-       WARN_ON(cpuc->enabled);
+
+       if (cpuc->enabled && !cpuc->lbr_users)
+               __intel_pmu_lbr_disable();
 }
 
 static void intel_pmu_lbr_enable_all(void)
This page took 0.026752 seconds and 5 git commands to generate.