mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-20 16:08:55 +07:00
perf: Fix reading in perf_event_read()
It is quite possible for the event to have been disabled between perf_event_read() sending the IPI and the CPU servicing the IPI and calling __perf_event_read(), hence revalidate the state. Reported-by: Stephane Eranian <eranian@google.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <new-submission> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
9ffdc6c37d
commit
542e72fc90
@ -1901,11 +1901,12 @@ static void __perf_event_read(void *info)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
raw_spin_lock(&ctx->lock);
|
raw_spin_lock(&ctx->lock);
|
||||||
update_context_time(ctx);
|
if (ctx->is_active)
|
||||||
|
update_context_time(ctx);
|
||||||
update_event_times(event);
|
update_event_times(event);
|
||||||
|
if (event->state == PERF_EVENT_STATE_ACTIVE)
|
||||||
|
event->pmu->read(event);
|
||||||
raw_spin_unlock(&ctx->lock);
|
raw_spin_unlock(&ctx->lock);
|
||||||
|
|
||||||
event->pmu->read(event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u64 perf_event_count(struct perf_event *event)
|
static inline u64 perf_event_count(struct perf_event *event)
|
||||||
|
Loading…
Reference in New Issue
Block a user