Commit 5c7474b5 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'perf-urgent-2025-03-21' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 perf events fixes from Ingo Molnar:
 "Two fixes: an RAPL PMU driver error handling fix, and an AMD IBS
  software filter fix"

* tag 'perf-urgent-2025-03-21' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf/x86/rapl: Fix error handling in init_rapl_pmus()
  perf/x86: Check data address for IBS software filter
parents cb90c8df 7e512f5a
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -1128,8 +1128,13 @@ static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs)
		regs.flags |= PERF_EFLAGS_EXACT;
	}

	if (perf_ibs == &perf_ibs_op)
		perf_ibs_parse_ld_st_data(event->attr.sample_type, &ibs_data, &data);

	if ((event->attr.config2 & IBS_SW_FILTER_MASK) &&
	    perf_exclude_event(event, &regs)) {
	    (perf_exclude_event(event, &regs) ||
	     ((data.sample_flags & PERF_SAMPLE_ADDR) &&
	      event->attr.exclude_kernel && kernel_ip(data.addr)))) {
		throttle = perf_event_account_interrupt(event);
		goto out;
	}
@@ -1144,9 +1149,6 @@ static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs)
		perf_sample_save_raw_data(&data, event, &raw);
	}

	if (perf_ibs == &perf_ibs_op)
		perf_ibs_parse_ld_st_data(event->attr.sample_type, &ibs_data, &data);

	/*
	 * rip recorded by IbsOpRip will not be consistent with rsp and rbp
	 * recorded as part of interrupt regs. Thus we need to use rip from
+6 −1
Original line number Diff line number Diff line
@@ -730,6 +730,7 @@ static int __init init_rapl_pmus(struct rapl_pmus **rapl_pmus_ptr, int rapl_pmu_
{
	int nr_rapl_pmu = topology_max_packages();
	struct rapl_pmus *rapl_pmus;
	int ret;

	/*
	 * rapl_pmu_scope must be either PKG, DIE or CORE
@@ -761,7 +762,11 @@ static int __init init_rapl_pmus(struct rapl_pmus **rapl_pmus_ptr, int rapl_pmu_
	rapl_pmus->pmu.module		= THIS_MODULE;
	rapl_pmus->pmu.capabilities	= PERF_PMU_CAP_NO_EXCLUDE;

	return init_rapl_pmu(rapl_pmus);
	ret = init_rapl_pmu(rapl_pmus);
	if (ret)
		kfree(rapl_pmus);

	return ret;
}

static struct rapl_model model_snb = {