Skip to content

Commit

Permalink
perf/x86/amd/core: Always clear status for idx
Browse files Browse the repository at this point in the history
The variable 'status' (which contains the unhandled overflow bits) is
not being properly masked in some cases, displaying the following
warning:

  WARNING: CPU: 156 PID: 475601 at arch/x86/events/amd/core.c:972 amd_pmu_v2_handle_irq+0x216/0x270

This seems to be happening because the loop is being continued before
the status bit being unset, in case x86_perf_event_set_period()
returns 0. This is also causing an inconsistency because the "handled"
counter is incremented, but the status bit is not cleaned.

Move the bit cleaning together above, together when the "handled"
counter is incremented.

Fixes: 7685665 ("perf/x86/amd/core: Add PerfMonV2 overflow handling")
Signed-off-by: Breno Leitao <leitao@debian.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Sandipan Das <sandipan.das@amd.com>
Link: https://lore.kernel.org/r/20230321113338.1669660-1-leitao@debian.org
  • Loading branch information
Breno Leitao authored and Peter Zijlstra committed Mar 21, 2023
1 parent e8d018d commit 263f5ec
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions arch/x86/events/amd/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -923,6 +923,7 @@ static int amd_pmu_v2_handle_irq(struct pt_regs *regs)

/* Event overflow */
handled++;
status &= ~mask;
perf_sample_data_init(&data, 0, hwc->last_period);

if (!x86_perf_event_set_period(event))
Expand All @@ -933,8 +934,6 @@ static int amd_pmu_v2_handle_irq(struct pt_regs *regs)

if (perf_event_overflow(event, &data, regs))
x86_pmu_stop(event, 0);

status &= ~mask;
}

/*
Expand Down

0 comments on commit 263f5ec

Please sign in to comment.