From bac1209e66975016bbae50b238ea283325818791 Mon Sep 17 00:00:00 2001 From: Andrew Vagin Date: Mon, 7 Nov 2011 15:54:12 +0300 Subject: [PATCH] --- yaml --- r: 277270 b: refs/heads/master c: 5d81e5cfb37a174e8ddc0413e2e70cdf05807ace h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/events/core.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 8d4f0b11113e..d1a465887184 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9251f904f95175b4a1d8cbc0449e748f9edd7629 +refs/heads/master: 5d81e5cfb37a174e8ddc0413e2e70cdf05807ace diff --git a/trunk/kernel/events/core.c b/trunk/kernel/events/core.c index eadac69265fc..8d9dea56c262 100644 --- a/trunk/kernel/events/core.c +++ b/trunk/kernel/events/core.c @@ -4528,7 +4528,6 @@ static void perf_swevent_overflow(struct perf_event *event, u64 overflow, struct hw_perf_event *hwc = &event->hw; int throttle = 0; - data->period = event->hw.last_period; if (!overflow) overflow = perf_swevent_set_period(event); @@ -4562,6 +4561,12 @@ static void perf_swevent_event(struct perf_event *event, u64 nr, if (!is_sampling_event(event)) return; + if ((event->attr.sample_type & PERF_SAMPLE_PERIOD) && !event->attr.freq) { + data->period = nr; + return perf_swevent_overflow(event, 1, data, regs); + } else + data->period = event->hw.last_period; + if (nr == 1 && hwc->sample_period == 1 && !event->attr.freq) return perf_swevent_overflow(event, 1, data, regs);