diff options
author | Robert Richter <robert.richter@amd.com> | 2012-04-02 14:19:08 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2012-05-09 09:23:12 -0400 |
commit | fd0d000b2c34aa43d4e92dcf0dfaeda7e123008a (patch) | |
tree | 8b81831cf37f1be6dd3cc9be772952d5c835a550 /kernel/events/core.c | |
parent | c75841a398d667d9968245b9519d93cedbfb4780 (diff) |
perf: Pass last sampling period to perf_sample_data_init()
We always need to pass the last sample period to
perf_sample_data_init(), otherwise the event distribution will be
wrong. Thus, modifiyng the function interface with the required period
as argument. So basically a pattern like this:
perf_sample_data_init(&data, ~0ULL);
data.period = event->hw.last_period;
will now be like that:
perf_sample_data_init(&data, ~0ULL, event->hw.last_period);
Avoids unininitialized data.period and simplifies code.
Signed-off-by: Robert Richter <robert.richter@amd.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1333390758-10893-3-git-send-email-robert.richter@amd.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/events/core.c')
-rw-r--r-- | kernel/events/core.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index 9789a56b7d54..00c58df9f4e2 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
@@ -4957,7 +4957,7 @@ void __perf_sw_event(u32 event_id, u64 nr, struct pt_regs *regs, u64 addr) | |||
4957 | if (rctx < 0) | 4957 | if (rctx < 0) |
4958 | return; | 4958 | return; |
4959 | 4959 | ||
4960 | perf_sample_data_init(&data, addr); | 4960 | perf_sample_data_init(&data, addr, 0); |
4961 | 4961 | ||
4962 | do_perf_sw_event(PERF_TYPE_SOFTWARE, event_id, nr, &data, regs); | 4962 | do_perf_sw_event(PERF_TYPE_SOFTWARE, event_id, nr, &data, regs); |
4963 | 4963 | ||
@@ -5215,7 +5215,7 @@ void perf_tp_event(u64 addr, u64 count, void *record, int entry_size, | |||
5215 | .data = record, | 5215 | .data = record, |
5216 | }; | 5216 | }; |
5217 | 5217 | ||
5218 | perf_sample_data_init(&data, addr); | 5218 | perf_sample_data_init(&data, addr, 0); |
5219 | data.raw = &raw; | 5219 | data.raw = &raw; |
5220 | 5220 | ||
5221 | hlist_for_each_entry_rcu(event, node, head, hlist_entry) { | 5221 | hlist_for_each_entry_rcu(event, node, head, hlist_entry) { |
@@ -5318,7 +5318,7 @@ void perf_bp_event(struct perf_event *bp, void *data) | |||
5318 | struct perf_sample_data sample; | 5318 | struct perf_sample_data sample; |
5319 | struct pt_regs *regs = data; | 5319 | struct pt_regs *regs = data; |
5320 | 5320 | ||
5321 | perf_sample_data_init(&sample, bp->attr.bp_addr); | 5321 | perf_sample_data_init(&sample, bp->attr.bp_addr, 0); |
5322 | 5322 | ||
5323 | if (!bp->hw.state && !perf_exclude_event(bp, regs)) | 5323 | if (!bp->hw.state && !perf_exclude_event(bp, regs)) |
5324 | perf_swevent_event(bp, 1, &sample, regs); | 5324 | perf_swevent_event(bp, 1, &sample, regs); |
@@ -5344,8 +5344,7 @@ static enum hrtimer_restart perf_swevent_hrtimer(struct hrtimer *hrtimer) | |||
5344 | 5344 | ||
5345 | event->pmu->read(event); | 5345 | event->pmu->read(event); |
5346 | 5346 | ||
5347 | perf_sample_data_init(&data, 0); | 5347 | perf_sample_data_init(&data, 0, event->hw.last_period); |
5348 | data.period = event->hw.last_period; | ||
5349 | regs = get_irq_regs(); | 5348 | regs = get_irq_regs(); |
5350 | 5349 | ||
5351 | if (regs && !perf_exclude_event(event, regs)) { | 5350 | if (regs && !perf_exclude_event(event, regs)) { |