mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-03 23:37:40 -04:00
Merge tag 'perf-urgent-2026-03-22' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar: - Fix a PMU driver crash on AMD EPYC systems, caused by a race condition in x86_pmu_enable() - Fix a possible counter-initialization bug in x86_pmu_enable() - Fix a counter inheritance bug in inherit_event() and __perf_event_read() - Fix an Intel PMU driver branch constraints handling bug found by UBSAN - Fix the Intel PMU driver's new Off-Module Response (OMR) support code for Diamond Rapids / Nova lake, to fix a snoop information parsing bug * tag 'perf-urgent-2026-03-22' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf/x86/intel: Fix OMR snoop information parsing issues perf/x86/intel: Add missing branch counters constraint apply perf: Make sure to use pmu_ctx->pmu for groups x86/perf: Make sure to program the counter value for stopped events on migration perf/x86: Move event pointer setup earlier in x86_pmu_enable()
This commit is contained in:
@@ -4813,7 +4813,7 @@ static void __perf_event_read(void *info)
|
||||
struct perf_event *sub, *event = data->event;
|
||||
struct perf_event_context *ctx = event->ctx;
|
||||
struct perf_cpu_context *cpuctx = this_cpu_ptr(&perf_cpu_context);
|
||||
struct pmu *pmu = event->pmu;
|
||||
struct pmu *pmu;
|
||||
|
||||
/*
|
||||
* If this is a task context, we need to check whether it is
|
||||
@@ -4825,7 +4825,7 @@ static void __perf_event_read(void *info)
|
||||
if (ctx->task && cpuctx->task_ctx != ctx)
|
||||
return;
|
||||
|
||||
raw_spin_lock(&ctx->lock);
|
||||
guard(raw_spinlock)(&ctx->lock);
|
||||
ctx_time_update_event(ctx, event);
|
||||
|
||||
perf_event_update_time(event);
|
||||
@@ -4833,25 +4833,22 @@ static void __perf_event_read(void *info)
|
||||
perf_event_update_sibling_time(event);
|
||||
|
||||
if (event->state != PERF_EVENT_STATE_ACTIVE)
|
||||
goto unlock;
|
||||
return;
|
||||
|
||||
if (!data->group) {
|
||||
pmu->read(event);
|
||||
perf_pmu_read(event);
|
||||
data->ret = 0;
|
||||
goto unlock;
|
||||
return;
|
||||
}
|
||||
|
||||
pmu = event->pmu_ctx->pmu;
|
||||
pmu->start_txn(pmu, PERF_PMU_TXN_READ);
|
||||
|
||||
pmu->read(event);
|
||||
|
||||
perf_pmu_read(event);
|
||||
for_each_sibling_event(sub, event)
|
||||
perf_pmu_read(sub);
|
||||
|
||||
data->ret = pmu->commit_txn(pmu);
|
||||
|
||||
unlock:
|
||||
raw_spin_unlock(&ctx->lock);
|
||||
}
|
||||
|
||||
static inline u64 perf_event_count(struct perf_event *event, bool self)
|
||||
@@ -14744,7 +14741,7 @@ inherit_event(struct perf_event *parent_event,
|
||||
get_ctx(child_ctx);
|
||||
child_event->ctx = child_ctx;
|
||||
|
||||
pmu_ctx = find_get_pmu_context(child_event->pmu, child_ctx, child_event);
|
||||
pmu_ctx = find_get_pmu_context(parent_event->pmu_ctx->pmu, child_ctx, child_event);
|
||||
if (IS_ERR(pmu_ctx)) {
|
||||
free_event(child_event);
|
||||
return ERR_CAST(pmu_ctx);
|
||||
|
||||
Reference in New Issue
Block a user