summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/perf_event.c
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2012-02-24 16:48:27 -0800
committerTony Lindgren <tony@atomide.com>2012-02-24 16:48:27 -0800
commitffd76d8be36da09f8456c55569c008f5aa93095e (patch)
tree4a5e537edcdd3be9197c5fb7af1b4f7e4780ef77 /arch/powerpc/kernel/perf_event.c
parentbfe9c8ae114009491f51452ec727667d516ee79f (diff)
parentf0e15e2b0c6b3e89daade25a1e9a2d80136c14c3 (diff)
downloadlinux-ffd76d8be36da09f8456c55569c008f5aa93095e.tar.bz2
Merge branch 'for_3.4/dts_updates' of git://git.kernel.org/pub/scm/linux/kernel/git/bcousson/linux-omap-dt into dt
Diffstat (limited to 'arch/powerpc/kernel/perf_event.c')
-rw-r--r--arch/powerpc/kernel/perf_event.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/perf_event.c b/arch/powerpc/kernel/perf_event.c
index 10a140f82cb8..64483fde95c6 100644
--- 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 val;
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);
- 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);