Skip to content

Commit ddddf9d

Browse files
committed
Merge tag 'perf-core-2025-05-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf events updates from Ingo Molnar: "Core & generic-arch updates: - Add support for dynamic constraints and propagate it to the Intel driver (Kan Liang) - Fix & enhance driver-specific throttling support (Kan Liang) - Record sample last_period before updating on the x86 and PowerPC platforms (Mark Barnett) - Make perf_pmu_unregister() usable (Peter Zijlstra) - Unify perf_event_free_task() / perf_event_exit_task_context() (Peter Zijlstra) - Simplify perf_event_release_kernel() and perf_event_free_task() (Peter Zijlstra) - Allocate non-contiguous AUX pages by default (Yabin Cui) Uprobes updates: - Add support to emulate NOP instructions (Jiri Olsa) - selftests/bpf: Add 5-byte NOP uprobe trigger benchmark (Jiri Olsa) x86 Intel PMU enhancements: - Support Intel Auto Counter Reload [ACR] (Kan Liang) - Add PMU support for Clearwater Forest (Dapeng Mi) - Arch-PEBS preparatory changes: (Dapeng Mi) - Parse CPUID archPerfmonExt leaves for non-hybrid CPUs - Decouple BTS initialization from PEBS initialization - Introduce pairs of PEBS static calls x86 AMD PMU enhancements: - Use hrtimer for handling overflows in the AMD uncore driver (Sandipan Das) - Prevent UMC counters from saturating (Sandipan Das) Fixes and cleanups: - Fix put_ctx() ordering (Frederic Weisbecker) - Fix irq work dereferencing garbage (Frederic Weisbecker) - Misc fixes and cleanups (Changbin Du, Frederic Weisbecker, Ian Rogers, Ingo Molnar, Kan Liang, Peter Zijlstra, Qing Wang, Sandipan Das, Thorsten Blum)" * tag 'perf-core-2025-05-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (60 commits) perf/headers: Clean up <linux/perf_event.h> a bit perf/uapi: Clean up <uapi/linux/perf_event.h> a bit perf/uapi: Fix PERF_RECORD_SAMPLE comments in <uapi/linux/perf_event.h> mips/perf: Remove driver-specific throttle support xtensa/perf: Remove driver-specific throttle support sparc/perf: Remove driver-specific throttle support loongarch/perf: Remove driver-specific throttle support csky/perf: Remove driver-specific throttle support arc/perf: Remove driver-specific throttle support alpha/perf: Remove driver-specific throttle support perf/apple_m1: Remove driver-specific throttle support perf/arm: Remove driver-specific throttle support s390/perf: Remove driver-specific throttle support powerpc/perf: Remove driver-specific throttle support perf/x86/zhaoxin: Remove driver-specific throttle support perf/x86/amd: Remove driver-specific throttle support perf/x86/intel: Remove driver-specific throttle support perf: Only dump the throttle log for the leader perf: Fix the throttle logic for a group perf/core: Add the is_event_in_freq_mode() helper to simplify the code ...
2 parents eaed94d + e7d952c commit ddddf9d

File tree

44 files changed

+1996
-1210
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1996
-1210
lines changed

arch/alpha/kernel/perf_event.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -852,14 +852,9 @@ static void alpha_perf_event_irq_handler(unsigned long la_ptr,
852852
alpha_perf_event_update(event, hwc, idx, alpha_pmu->pmc_max_period[idx]+1);
853853
perf_sample_data_init(&data, 0, hwc->last_period);
854854

855-
if (alpha_perf_event_set_period(event, hwc, idx)) {
856-
if (perf_event_overflow(event, &data, regs)) {
857-
/* Interrupts coming too quickly; "throttle" the
858-
* counter, i.e., disable it for a little while.
859-
*/
860-
alpha_pmu_stop(event, 0);
861-
}
862-
}
855+
if (alpha_perf_event_set_period(event, hwc, idx))
856+
perf_event_overflow(event, &data, regs);
857+
863858
wrperfmon(PERFMON_CMD_ENABLE, cpuc->idx_mask);
864859

865860
return;

arch/arc/kernel/perf_event.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -599,10 +599,8 @@ static irqreturn_t arc_pmu_intr(int irq, void *dev)
599599

600600
arc_perf_event_update(event, &event->hw, event->hw.idx);
601601
perf_sample_data_init(&data, 0, hwc->last_period);
602-
if (arc_pmu_event_set_period(event)) {
603-
if (perf_event_overflow(event, &data, regs))
604-
arc_pmu_stop(event, 0);
605-
}
602+
if (arc_pmu_event_set_period(event))
603+
perf_event_overflow(event, &data, regs);
606604

607605
active_ints &= ~BIT(idx);
608606
} while (active_ints);

arch/csky/kernel/perf_event.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,8 +1139,7 @@ static irqreturn_t csky_pmu_handle_irq(int irq_num, void *dev)
11391139
perf_sample_data_init(&data, 0, hwc->last_period);
11401140
csky_pmu_event_set_period(event);
11411141

1142-
if (perf_event_overflow(event, &data, regs))
1143-
csky_pmu_stop_event(event);
1142+
perf_event_overflow(event, &data, regs);
11441143
}
11451144

11461145
csky_pmu_enable(&csky_pmu.pmu);

arch/loongarch/kernel/perf_event.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -479,8 +479,7 @@ static void handle_associated_event(struct cpu_hw_events *cpuc, int idx,
479479
if (!loongarch_pmu_event_set_period(event, hwc, idx))
480480
return;
481481

482-
if (perf_event_overflow(event, data, regs))
483-
loongarch_pmu_disable_event(idx);
482+
perf_event_overflow(event, data, regs);
484483
}
485484

486485
static irqreturn_t pmu_handle_irq(int irq, void *dev)

arch/mips/kernel/perf_event_mipsxx.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -791,8 +791,7 @@ static void handle_associated_event(struct cpu_hw_events *cpuc,
791791
if (!mipspmu_event_set_period(event, hwc, idx))
792792
return;
793793

794-
if (perf_event_overflow(event, data, regs))
795-
mipsxx_pmu_disable_event(idx);
794+
perf_event_overflow(event, data, regs);
796795
}
797796

798797

arch/powerpc/perf/core-book3s.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2239,6 +2239,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
22392239
struct pt_regs *regs)
22402240
{
22412241
u64 period = event->hw.sample_period;
2242+
const u64 last_period = event->hw.last_period;
22422243
s64 prev, delta, left;
22432244
int record = 0;
22442245

@@ -2320,7 +2321,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
23202321
if (record) {
23212322
struct perf_sample_data data;
23222323

2323-
perf_sample_data_init(&data, ~0ULL, event->hw.last_period);
2324+
perf_sample_data_init(&data, ~0ULL, last_period);
23242325

23252326
if (event->attr.sample_type & PERF_SAMPLE_ADDR_TYPE)
23262327
perf_get_data_addr(event, regs, &data.addr);
@@ -2343,12 +2344,10 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
23432344
ppmu->get_mem_weight(&data.weight.full, event->attr.sample_type);
23442345
data.sample_flags |= PERF_SAMPLE_WEIGHT_TYPE;
23452346
}
2346-
if (perf_event_overflow(event, &data, regs))
2347-
power_pmu_stop(event, 0);
2347+
perf_event_overflow(event, &data, regs);
23482348
} else if (period) {
23492349
/* Account for interrupt in case of invalid SIAR */
2350-
if (perf_event_account_interrupt(event))
2351-
power_pmu_stop(event, 0);
2350+
perf_event_account_interrupt(event);
23522351
}
23532352
}
23542353

arch/powerpc/perf/core-fsl-emb.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
590590
struct pt_regs *regs)
591591
{
592592
u64 period = event->hw.sample_period;
593+
const u64 last_period = event->hw.last_period;
593594
s64 prev, delta, left;
594595
int record = 0;
595596

@@ -632,10 +633,9 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
632633
if (record) {
633634
struct perf_sample_data data;
634635

635-
perf_sample_data_init(&data, 0, event->hw.last_period);
636+
perf_sample_data_init(&data, 0, last_period);
636637

637-
if (perf_event_overflow(event, &data, regs))
638-
fsl_emb_pmu_stop(event, 0);
638+
perf_event_overflow(event, &data, regs);
639639
}
640640
}
641641

arch/s390/kernel/perf_cpum_cf.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -980,8 +980,6 @@ static int cfdiag_push_sample(struct perf_event *event,
980980
}
981981

982982
overflow = perf_event_overflow(event, &data, &regs);
983-
if (overflow)
984-
event->pmu->stop(event, 0);
985983

986984
perf_event_update_userpage(event);
987985
return overflow;

arch/s390/kernel/perf_cpum_sf.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,10 +1072,7 @@ static int perf_push_sample(struct perf_event *event,
10721072
overflow = 0;
10731073
if (perf_event_exclude(event, &regs, sde_regs))
10741074
goto out;
1075-
if (perf_event_overflow(event, &data, &regs)) {
1076-
overflow = 1;
1077-
event->pmu->stop(event, 0);
1078-
}
1075+
overflow = perf_event_overflow(event, &data, &regs);
10791076
perf_event_update_userpage(event);
10801077
out:
10811078
return overflow;

arch/sparc/kernel/perf_event.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1668,8 +1668,7 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self,
16681668
if (!sparc_perf_event_set_period(event, hwc, idx))
16691669
continue;
16701670

1671-
if (perf_event_overflow(event, &data, regs))
1672-
sparc_pmu_stop(event, 0);
1671+
perf_event_overflow(event, &data, regs);
16731672
}
16741673

16751674
finish_clock = sched_clock();

0 commit comments

Comments
 (0)