git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
perf, x86: Fix LBR enable/disable vs cpuc->enabled
[safe/jmp/linux-2.6]
/
arch
/
x86
/
kernel
/
cpu
/
perf_event_intel_lbr.c
diff --git
a/arch/x86/kernel/cpu/perf_event_intel_lbr.c
b/arch/x86/kernel/cpu/perf_event_intel_lbr.c
index
dcec765
..
0145f99
100644
(file)
--- a/
arch/x86/kernel/cpu/perf_event_intel_lbr.c
+++ b/
arch/x86/kernel/cpu/perf_event_intel_lbr.c
@@
-69,7
+69,7
@@
static void intel_pmu_lbr_enable(struct perf_event *event)
if (!x86_pmu.lbr_nr)
return;
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
/*
* 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--;
return;
cpuc->lbr_users--;
-
BUG_ON(cpuc->lbr_users < 0);
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)
}
static void intel_pmu_lbr_enable_all(void)