From ec47a4ca55994b834a2ca1892b9485071e52386e Mon Sep 17 00:00:00 2001 From: James Hogan Date: Wed, 27 Feb 2013 16:16:38 +0000 Subject: [PATCH] --- yaml --- r: 367222 b: refs/heads/master c: 2033dc54e6fffac01f6129c0038c2e78102cf59a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/metag/kernel/perf/perf_event.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index c299f954821b..70ef2279aa77 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c6ac1e6edacc7e1fb0405d61f95a797c6a712411 +refs/heads/master: 2033dc54e6fffac01f6129c0038c2e78102cf59a diff --git a/trunk/arch/metag/kernel/perf/perf_event.c b/trunk/arch/metag/kernel/perf/perf_event.c index 5bf984feaaa1..6210126de78a 100644 --- a/trunk/arch/metag/kernel/perf/perf_event.c +++ b/trunk/arch/metag/kernel/perf/perf_event.c @@ -214,6 +214,7 @@ void metag_pmu_event_update(struct perf_event *event, delta = (new_raw_count - prev_raw_count) & MAX_PERIOD; local64_add(delta, &event->count); + local64_sub(delta, &hwc->period_left); } int metag_pmu_event_set_period(struct perf_event *event, @@ -223,6 +224,10 @@ int metag_pmu_event_set_period(struct perf_event *event, s64 period = hwc->sample_period; int ret = 0; + /* The period may have been changed */ + if (unlikely(period != hwc->last_period)) + left += period - hwc->last_period; + if (unlikely(left <= -period)) { left = period; local64_set(&hwc->period_left, left);