diff options
| -rw-r--r-- | arch/x86/events/amd/ibs.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c index 004226b52ac7..32e6456cb5e5 100644 --- a/arch/x86/events/amd/ibs.c +++ b/arch/x86/events/amd/ibs.c @@ -494,6 +494,14 @@ static void perf_ibs_start(struct perf_event *event, int flags) config |= period >> 4; /* + * Reset the IBS_{FETCH|OP}_CTL MSR before updating pcpu->state. + * Doing so prevents a race condition in which an NMI due to other + * source might accidentally activate the event before we enable + * it ourselves. + */ + perf_ibs_disable_event(perf_ibs, hwc, 0); + + /* * Set STARTED before enabling the hardware, such that a subsequent NMI * must observe it. */ |
