Skip to content

Commit 4bcaa59

Browse files
committed
Merge tag 'perf-urgent-2025-05-17' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 perf event fix from Ingo Molnar: "Fix PEBS-via-PT crash" * tag 'perf-urgent-2025-05-17' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf/x86/intel: Fix segfault with PEBS-via-PT with sample_freq
2 parents c586c97 + 99bcd91 commit 4bcaa59

File tree

1 file changed

+5
-4
lines changed
  • arch/x86/events/intel

1 file changed

+5
-4
lines changed

arch/x86/events/intel/ds.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2465,8 +2465,9 @@ static void intel_pmu_drain_pebs_core(struct pt_regs *iregs, struct perf_sample_
24652465
setup_pebs_fixed_sample_data);
24662466
}
24672467

2468-
static void intel_pmu_pebs_event_update_no_drain(struct cpu_hw_events *cpuc, int size)
2468+
static void intel_pmu_pebs_event_update_no_drain(struct cpu_hw_events *cpuc, u64 mask)
24692469
{
2470+
u64 pebs_enabled = cpuc->pebs_enabled & mask;
24702471
struct perf_event *event;
24712472
int bit;
24722473

@@ -2477,7 +2478,7 @@ static void intel_pmu_pebs_event_update_no_drain(struct cpu_hw_events *cpuc, int
24772478
* It needs to call intel_pmu_save_and_restart_reload() to
24782479
* update the event->count for this case.
24792480
*/
2480-
for_each_set_bit(bit, (unsigned long *)&cpuc->pebs_enabled, size) {
2481+
for_each_set_bit(bit, (unsigned long *)&pebs_enabled, X86_PMC_IDX_MAX) {
24812482
event = cpuc->events[bit];
24822483
if (event->hw.flags & PERF_X86_EVENT_AUTO_RELOAD)
24832484
intel_pmu_save_and_restart_reload(event, 0);
@@ -2512,7 +2513,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs *iregs, struct perf_sample_d
25122513
}
25132514

25142515
if (unlikely(base >= top)) {
2515-
intel_pmu_pebs_event_update_no_drain(cpuc, size);
2516+
intel_pmu_pebs_event_update_no_drain(cpuc, mask);
25162517
return;
25172518
}
25182519

@@ -2626,7 +2627,7 @@ static void intel_pmu_drain_pebs_icl(struct pt_regs *iregs, struct perf_sample_d
26262627
(hybrid(cpuc->pmu, fixed_cntr_mask64) << INTEL_PMC_IDX_FIXED);
26272628

26282629
if (unlikely(base >= top)) {
2629-
intel_pmu_pebs_event_update_no_drain(cpuc, X86_PMC_IDX_MAX);
2630+
intel_pmu_pebs_event_update_no_drain(cpuc, mask);
26302631
return;
26312632
}
26322633

0 commit comments

Comments
 (0)