projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
powerpc/perf: power_pmu_start restores incorrect values, breaking frequency events
[deliverable/linux.git]
/
arch
/
powerpc
/
kernel
/
perf_event.c
diff --git
a/arch/powerpc/kernel/perf_event.c
b/arch/powerpc/kernel/perf_event.c
index 10a140f82cb87db296859f57ce18edfbb10f2ace..64483fde95c62cfa0cc5411e2c2cc6fce5cab453 100644
(file)
--- a/
arch/powerpc/kernel/perf_event.c
+++ b/
arch/powerpc/kernel/perf_event.c
@@
-865,6
+865,7
@@
static void power_pmu_start(struct perf_event *event, int ef_flags)
{
unsigned long flags;
s64 left;
{
unsigned long flags;
s64 left;
+ unsigned long val;
if (!event->hw.idx || !event->hw.sample_period)
return;
if (!event->hw.idx || !event->hw.sample_period)
return;
@@
-880,7
+881,12
@@
static void power_pmu_start(struct perf_event *event, int ef_flags)
event->hw.state = 0;
left = local64_read(&event->hw.period_left);
event->hw.state = 0;
left = local64_read(&event->hw.period_left);
- write_pmc(event->hw.idx, left);
+
+ val = 0;
+ if (left < 0x80000000L)
+ val = 0x80000000L - left;
+
+ write_pmc(event->hw.idx, val);
perf_event_update_userpage(event);
perf_pmu_enable(event->pmu);
perf_event_update_userpage(event);
perf_pmu_enable(event->pmu);
This page took
0.028683 seconds
and
5
git commands to generate.