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 | |
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>
-rw-r--r-- | arch/alpha/kernel/perf_event.c | 3 | ||||
-rw-r--r-- | arch/arm/kernel/perf_event_v6.c | 4 | ||||
-rw-r--r-- | arch/arm/kernel/perf_event_v7.c | 4 | ||||
-rw-r--r-- | arch/arm/kernel/perf_event_xscale.c | 8 | ||||
-rw-r--r-- | arch/mips/kernel/perf_event_mipsxx.c | 2 | ||||
-rw-r--r-- | arch/powerpc/perf/core-book3s.c | 3 | ||||
-rw-r--r-- | arch/powerpc/perf/core-fsl-emb.c | 3 | ||||
-rw-r--r-- | arch/sparc/kernel/perf_event.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_amd_ibs.c | 3 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_intel_ds.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/perf_event_p4.c | 6 | ||||
-rw-r--r-- | include/linux/perf_event.h | 5 | ||||
-rw-r--r-- | kernel/events/core.c | 9 |
15 files changed, 25 insertions, 43 deletions
diff --git a/arch/alpha/kernel/perf_event.c b/arch/alpha/kernel/perf_event.c index 0dae252f7a33..d821b17047e0 100644 --- a/arch/alpha/kernel/perf_event.c +++ b/arch/alpha/kernel/perf_event.c | |||
@@ -824,7 +824,6 @@ static void alpha_perf_event_irq_handler(unsigned long la_ptr, | |||
824 | 824 | ||
825 | idx = la_ptr; | 825 | idx = la_ptr; |
826 | 826 | ||
827 | perf_sample_data_init(&data, 0); | ||
828 | for (j = 0; j < cpuc->n_events; j++) { | 827 | for (j = 0; j < cpuc->n_events; j++) { |
829 | if (cpuc->current_idx[j] == idx) | 828 | if (cpuc->current_idx[j] == idx) |
830 | break; | 829 | break; |
@@ -848,7 +847,7 @@ static void alpha_perf_event_irq_handler(unsigned long la_ptr, | |||
848 | 847 | ||
849 | hwc = &event->hw; | 848 | hwc = &event->hw; |
850 | alpha_perf_event_update(event, hwc, idx, alpha_pmu->pmc_max_period[idx]+1); | 849 | alpha_perf_event_update(event, hwc, idx, alpha_pmu->pmc_max_period[idx]+1); |
851 | data.period = event->hw.last_period; | 850 | perf_sample_data_init(&data, 0, hwc->last_period); |
852 | 851 | ||
853 | if (alpha_perf_event_set_period(event, hwc, idx)) { | 852 | if (alpha_perf_event_set_period(event, hwc, idx)) { |
854 | if (perf_event_overflow(event, &data, regs)) { | 853 | if (perf_event_overflow(event, &data, regs)) { |
diff --git a/arch/arm/kernel/perf_event_v6.c b/arch/arm/kernel/perf_event_v6.c index b78af0cc6ef3..ab627a740fa3 100644 --- a/arch/arm/kernel/perf_event_v6.c +++ b/arch/arm/kernel/perf_event_v6.c | |||
@@ -489,8 +489,6 @@ armv6pmu_handle_irq(int irq_num, | |||
489 | */ | 489 | */ |
490 | armv6_pmcr_write(pmcr); | 490 | armv6_pmcr_write(pmcr); |
491 | 491 | ||
492 | perf_sample_data_init(&data, 0); | ||
493 | |||
494 | cpuc = &__get_cpu_var(cpu_hw_events); | 492 | cpuc = &__get_cpu_var(cpu_hw_events); |
495 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { | 493 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { |
496 | struct perf_event *event = cpuc->events[idx]; | 494 | struct perf_event *event = cpuc->events[idx]; |
@@ -509,7 +507,7 @@ armv6pmu_handle_irq(int irq_num, | |||
509 | 507 | ||
510 | hwc = &event->hw; | 508 | hwc = &event->hw; |
511 | armpmu_event_update(event, hwc, idx); | 509 | armpmu_event_update(event, hwc, idx); |
512 | data.period = event->hw.last_period; | 510 | perf_sample_data_init(&data, 0, hwc->last_period); |
513 | if (!armpmu_event_set_period(event, hwc, idx)) | 511 | if (!armpmu_event_set_period(event, hwc, idx)) |
514 | continue; | 512 | continue; |
515 | 513 | ||
diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c index 00755d82e2f2..d3c536068162 100644 --- a/arch/arm/kernel/perf_event_v7.c +++ b/arch/arm/kernel/perf_event_v7.c | |||
@@ -1077,8 +1077,6 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) | |||
1077 | */ | 1077 | */ |
1078 | regs = get_irq_regs(); | 1078 | regs = get_irq_regs(); |
1079 | 1079 | ||
1080 | perf_sample_data_init(&data, 0); | ||
1081 | |||
1082 | cpuc = &__get_cpu_var(cpu_hw_events); | 1080 | cpuc = &__get_cpu_var(cpu_hw_events); |
1083 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { | 1081 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { |
1084 | struct perf_event *event = cpuc->events[idx]; | 1082 | struct perf_event *event = cpuc->events[idx]; |
@@ -1097,7 +1095,7 @@ static irqreturn_t armv7pmu_handle_irq(int irq_num, void *dev) | |||
1097 | 1095 | ||
1098 | hwc = &event->hw; | 1096 | hwc = &event->hw; |
1099 | armpmu_event_update(event, hwc, idx); | 1097 | armpmu_event_update(event, hwc, idx); |
1100 | data.period = event->hw.last_period; | 1098 | perf_sample_data_init(&data, 0, hwc->last_period); |
1101 | if (!armpmu_event_set_period(event, hwc, idx)) | 1099 | if (!armpmu_event_set_period(event, hwc, idx)) |
1102 | continue; | 1100 | continue; |
1103 | 1101 | ||
diff --git a/arch/arm/kernel/perf_event_xscale.c b/arch/arm/kernel/perf_event_xscale.c index 71a21e6712f5..e34e7254e652 100644 --- a/arch/arm/kernel/perf_event_xscale.c +++ b/arch/arm/kernel/perf_event_xscale.c | |||
@@ -248,8 +248,6 @@ xscale1pmu_handle_irq(int irq_num, void *dev) | |||
248 | 248 | ||
249 | regs = get_irq_regs(); | 249 | regs = get_irq_regs(); |
250 | 250 | ||
251 | perf_sample_data_init(&data, 0); | ||
252 | |||
253 | cpuc = &__get_cpu_var(cpu_hw_events); | 251 | cpuc = &__get_cpu_var(cpu_hw_events); |
254 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { | 252 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { |
255 | struct perf_event *event = cpuc->events[idx]; | 253 | struct perf_event *event = cpuc->events[idx]; |
@@ -263,7 +261,7 @@ xscale1pmu_handle_irq(int irq_num, void *dev) | |||
263 | 261 | ||
264 | hwc = &event->hw; | 262 | hwc = &event->hw; |
265 | armpmu_event_update(event, hwc, idx); | 263 | armpmu_event_update(event, hwc, idx); |
266 | data.period = event->hw.last_period; | 264 | perf_sample_data_init(&data, 0, hwc->last_period); |
267 | if (!armpmu_event_set_period(event, hwc, idx)) | 265 | if (!armpmu_event_set_period(event, hwc, idx)) |
268 | continue; | 266 | continue; |
269 | 267 | ||
@@ -588,8 +586,6 @@ xscale2pmu_handle_irq(int irq_num, void *dev) | |||
588 | 586 | ||
589 | regs = get_irq_regs(); | 587 | regs = get_irq_regs(); |
590 | 588 | ||
591 | perf_sample_data_init(&data, 0); | ||
592 | |||
593 | cpuc = &__get_cpu_var(cpu_hw_events); | 589 | cpuc = &__get_cpu_var(cpu_hw_events); |
594 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { | 590 | for (idx = 0; idx < cpu_pmu->num_events; ++idx) { |
595 | struct perf_event *event = cpuc->events[idx]; | 591 | struct perf_event *event = cpuc->events[idx]; |
@@ -603,7 +599,7 @@ xscale2pmu_handle_irq(int irq_num, void *dev) | |||
603 | 599 | ||
604 | hwc = &event->hw; | 600 | hwc = &event->hw; |
605 | armpmu_event_update(event, hwc, idx); | 601 | armpmu_event_update(event, hwc, idx); |
606 | data.period = event->hw.last_period; | 602 | perf_sample_data_init(&data, 0, hwc->last_period); |
607 | if (!armpmu_event_set_period(event, hwc, idx)) | 603 | if (!armpmu_event_set_period(event, hwc, idx)) |
608 | continue; | 604 | continue; |
609 | 605 | ||
diff --git a/arch/mips/kernel/perf_event_mipsxx.c b/arch/mips/kernel/perf_event_mipsxx.c index 811084f4e422..ab73fa2fb9b5 100644 --- a/arch/mips/kernel/perf_event_mipsxx.c +++ b/arch/mips/kernel/perf_event_mipsxx.c | |||
@@ -1325,7 +1325,7 @@ static int mipsxx_pmu_handle_shared_irq(void) | |||
1325 | 1325 | ||
1326 | regs = get_irq_regs(); | 1326 | regs = get_irq_regs(); |
1327 | 1327 | ||
1328 | perf_sample_data_init(&data, 0); | 1328 | perf_sample_data_init(&data, 0, 0); |
1329 | 1329 | ||
1330 | switch (counters) { | 1330 | switch (counters) { |
1331 | #define HANDLE_COUNTER(n) \ | 1331 | #define HANDLE_COUNTER(n) \ |
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 02aee03e713c..8f84bcba18da 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c | |||
@@ -1299,8 +1299,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val, | |||
1299 | if (record) { | 1299 | if (record) { |
1300 | struct perf_sample_data data; | 1300 | struct perf_sample_data data; |
1301 | 1301 | ||
1302 | perf_sample_data_init(&data, ~0ULL); | 1302 | perf_sample_data_init(&data, ~0ULL, event->hw.last_period); |
1303 | data.period = event->hw.last_period; | ||
1304 | 1303 | ||
1305 | if (event->attr.sample_type & PERF_SAMPLE_ADDR) | 1304 | if (event->attr.sample_type & PERF_SAMPLE_ADDR) |
1306 | perf_get_data_addr(regs, &data.addr); | 1305 | perf_get_data_addr(regs, &data.addr); |
diff --git a/arch/powerpc/perf/core-fsl-emb.c b/arch/powerpc/perf/core-fsl-emb.c index 0a6d2a9d569c..106c53354675 100644 --- a/arch/powerpc/perf/core-fsl-emb.c +++ b/arch/powerpc/perf/core-fsl-emb.c | |||
@@ -613,8 +613,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val, | |||
613 | if (record) { | 613 | if (record) { |
614 | struct perf_sample_data data; | 614 | struct perf_sample_data data; |
615 | 615 | ||
616 | perf_sample_data_init(&data, 0); | 616 | perf_sample_data_init(&data, 0, event->hw.last_period); |
617 | data.period = event->hw.last_period; | ||
618 | 617 | ||
619 | if (perf_event_overflow(event, &data, regs)) | 618 | if (perf_event_overflow(event, &data, regs)) |
620 | fsl_emb_pmu_stop(event, 0); | 619 | fsl_emb_pmu_stop(event, 0); |
diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c index 28559ce5eeb5..5713957dcb8a 100644 --- a/arch/sparc/kernel/perf_event.c +++ b/arch/sparc/kernel/perf_event.c | |||
@@ -1296,8 +1296,6 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self, | |||
1296 | 1296 | ||
1297 | regs = args->regs; | 1297 | regs = args->regs; |
1298 | 1298 | ||
1299 | perf_sample_data_init(&data, 0); | ||
1300 | |||
1301 | cpuc = &__get_cpu_var(cpu_hw_events); | 1299 | cpuc = &__get_cpu_var(cpu_hw_events); |
1302 | 1300 | ||
1303 | /* If the PMU has the TOE IRQ enable bits, we need to do a | 1301 | /* If the PMU has the TOE IRQ enable bits, we need to do a |
@@ -1321,7 +1319,7 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self, | |||
1321 | if (val & (1ULL << 31)) | 1319 | if (val & (1ULL << 31)) |
1322 | continue; | 1320 | continue; |
1323 | 1321 | ||
1324 | data.period = event->hw.last_period; | 1322 | perf_sample_data_init(&data, 0, hwc->last_period); |
1325 | if (!sparc_perf_event_set_period(event, hwc, idx)) | 1323 | if (!sparc_perf_event_set_period(event, hwc, idx)) |
1326 | continue; | 1324 | continue; |
1327 | 1325 | ||
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index e33e9cf160eb..e049d6da0183 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c | |||
@@ -1183,8 +1183,6 @@ int x86_pmu_handle_irq(struct pt_regs *regs) | |||
1183 | int idx, handled = 0; | 1183 | int idx, handled = 0; |
1184 | u64 val; | 1184 | u64 val; |
1185 | 1185 | ||
1186 | perf_sample_data_init(&data, 0); | ||
1187 | |||
1188 | cpuc = &__get_cpu_var(cpu_hw_events); | 1186 | cpuc = &__get_cpu_var(cpu_hw_events); |
1189 | 1187 | ||
1190 | /* | 1188 | /* |
@@ -1219,7 +1217,7 @@ int x86_pmu_handle_irq(struct pt_regs *regs) | |||
1219 | * event overflow | 1217 | * event overflow |
1220 | */ | 1218 | */ |
1221 | handled++; | 1219 | handled++; |
1222 | data.period = event->hw.last_period; | 1220 | perf_sample_data_init(&data, 0, event->hw.last_period); |
1223 | 1221 | ||
1224 | if (!x86_perf_event_set_period(event)) | 1222 | if (!x86_perf_event_set_period(event)) |
1225 | continue; | 1223 | continue; |
diff --git a/arch/x86/kernel/cpu/perf_event_amd_ibs.c b/arch/x86/kernel/cpu/perf_event_amd_ibs.c index c8f69bea6624..2317228b5299 100644 --- a/arch/x86/kernel/cpu/perf_event_amd_ibs.c +++ b/arch/x86/kernel/cpu/perf_event_amd_ibs.c | |||
@@ -398,8 +398,7 @@ static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs) | |||
398 | } | 398 | } |
399 | 399 | ||
400 | perf_ibs_event_update(perf_ibs, event, config); | 400 | perf_ibs_event_update(perf_ibs, event, config); |
401 | perf_sample_data_init(&data, 0); | 401 | perf_sample_data_init(&data, 0, hwc->last_period); |
402 | data.period = event->hw.last_period; | ||
403 | 402 | ||
404 | if (event->attr.sample_type & PERF_SAMPLE_RAW) { | 403 | if (event->attr.sample_type & PERF_SAMPLE_RAW) { |
405 | ibs_data.caps = ibs_caps; | 404 | ibs_data.caps = ibs_caps; |
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 26b3e2fef104..166546ec6aef 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
@@ -1027,8 +1027,6 @@ static int intel_pmu_handle_irq(struct pt_regs *regs) | |||
1027 | u64 status; | 1027 | u64 status; |
1028 | int handled; | 1028 | int handled; |
1029 | 1029 | ||
1030 | perf_sample_data_init(&data, 0); | ||
1031 | |||
1032 | cpuc = &__get_cpu_var(cpu_hw_events); | 1030 | cpuc = &__get_cpu_var(cpu_hw_events); |
1033 | 1031 | ||
1034 | /* | 1032 | /* |
@@ -1082,7 +1080,7 @@ again: | |||
1082 | if (!intel_pmu_save_and_restart(event)) | 1080 | if (!intel_pmu_save_and_restart(event)) |
1083 | continue; | 1081 | continue; |
1084 | 1082 | ||
1085 | data.period = event->hw.last_period; | 1083 | perf_sample_data_init(&data, 0, event->hw.last_period); |
1086 | 1084 | ||
1087 | if (has_branch_stack(event)) | 1085 | if (has_branch_stack(event)) |
1088 | data.br_stack = &cpuc->lbr_stack; | 1086 | data.br_stack = &cpuc->lbr_stack; |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c index 7f64df19e7dd..5a3edc27f6e5 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c | |||
@@ -316,8 +316,7 @@ int intel_pmu_drain_bts_buffer(void) | |||
316 | 316 | ||
317 | ds->bts_index = ds->bts_buffer_base; | 317 | ds->bts_index = ds->bts_buffer_base; |
318 | 318 | ||
319 | perf_sample_data_init(&data, 0); | 319 | perf_sample_data_init(&data, 0, event->hw.last_period); |
320 | data.period = event->hw.last_period; | ||
321 | regs.ip = 0; | 320 | regs.ip = 0; |
322 | 321 | ||
323 | /* | 322 | /* |
@@ -564,8 +563,7 @@ static void __intel_pmu_pebs_event(struct perf_event *event, | |||
564 | if (!intel_pmu_save_and_restart(event)) | 563 | if (!intel_pmu_save_and_restart(event)) |
565 | return; | 564 | return; |
566 | 565 | ||
567 | perf_sample_data_init(&data, 0); | 566 | perf_sample_data_init(&data, 0, event->hw.last_period); |
568 | data.period = event->hw.last_period; | ||
569 | 567 | ||
570 | /* | 568 | /* |
571 | * We use the interrupt regs as a base because the PEBS record | 569 | * We use the interrupt regs as a base because the PEBS record |
diff --git a/arch/x86/kernel/cpu/perf_event_p4.c b/arch/x86/kernel/cpu/perf_event_p4.c index a2dfacfd7103..47124a73dd73 100644 --- a/arch/x86/kernel/cpu/perf_event_p4.c +++ b/arch/x86/kernel/cpu/perf_event_p4.c | |||
@@ -1005,8 +1005,6 @@ static int p4_pmu_handle_irq(struct pt_regs *regs) | |||
1005 | int idx, handled = 0; | 1005 | int idx, handled = 0; |
1006 | u64 val; | 1006 | u64 val; |
1007 | 1007 | ||
1008 | perf_sample_data_init(&data, 0); | ||
1009 | |||
1010 | cpuc = &__get_cpu_var(cpu_hw_events); | 1008 | cpuc = &__get_cpu_var(cpu_hw_events); |
1011 | 1009 | ||
1012 | for (idx = 0; idx < x86_pmu.num_counters; idx++) { | 1010 | for (idx = 0; idx < x86_pmu.num_counters; idx++) { |
@@ -1034,10 +1032,12 @@ static int p4_pmu_handle_irq(struct pt_regs *regs) | |||
1034 | handled += overflow; | 1032 | handled += overflow; |
1035 | 1033 | ||
1036 | /* event overflow for sure */ | 1034 | /* event overflow for sure */ |
1037 | data.period = event->hw.last_period; | 1035 | perf_sample_data_init(&data, 0, hwc->last_period); |
1038 | 1036 | ||
1039 | if (!x86_perf_event_set_period(event)) | 1037 | if (!x86_perf_event_set_period(event)) |
1040 | continue; | 1038 | continue; |
1039 | |||
1040 | |||
1041 | if (perf_event_overflow(event, &data, regs)) | 1041 | if (perf_event_overflow(event, &data, regs)) |
1042 | x86_pmu_stop(event, 0); | 1042 | x86_pmu_stop(event, 0); |
1043 | } | 1043 | } |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index ddbb6a901f65..f32578634d9d 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
@@ -1132,11 +1132,14 @@ struct perf_sample_data { | |||
1132 | struct perf_branch_stack *br_stack; | 1132 | struct perf_branch_stack *br_stack; |
1133 | }; | 1133 | }; |
1134 | 1134 | ||
1135 | static inline void perf_sample_data_init(struct perf_sample_data *data, u64 addr) | 1135 | static inline void perf_sample_data_init(struct perf_sample_data *data, |
1136 | u64 addr, u64 period) | ||
1136 | { | 1137 | { |
1138 | /* remaining struct members initialized in perf_prepare_sample() */ | ||
1137 | data->addr = addr; | 1139 | data->addr = addr; |
1138 | data->raw = NULL; | 1140 | data->raw = NULL; |
1139 | data->br_stack = NULL; | 1141 | data->br_stack = NULL; |
1142 | data->period = period; | ||
1140 | } | 1143 | } |
1141 | 1144 | ||
1142 | extern void perf_output_sample(struct perf_output_handle *handle, | 1145 | extern void perf_output_sample(struct perf_output_handle *handle, |
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)) { |