perf/x86/amd: Avoid taking branches before disabling LBR
authorAndrii Nakryiko <andrii@kernel.org>
Tue, 2 Apr 2024 02:21:16 +0000 (19:21 -0700)
committerIngo Molnar <mingo@kernel.org>
Wed, 3 Apr 2024 07:14:26 +0000 (09:14 +0200)
commit1eddf187e5d087de4560ec7c3baa2f8283920710
tree3fc5fae843d0c8451ec27610c3f5e2b7225110d8
parent0dbf66fa7e80024629f816c2ec7a9f3d39637822
perf/x86/amd: Avoid taking branches before disabling LBR

In the following patches we will enable LBR capture on AMD CPUs at
arbitrary point in time, which means that LBR recording won't be frozen
by hardware automatically as part of hardware overflow event. So we need
to take care to minimize amount of branches and function calls/returns
on the path to freezing LBR, minimizing LBR snapshot altering as much as
possible.

As such, split out LBR disabling logic from the sanity checking logic
inside amd_pmu_lbr_disable_all(). This will ensure that no branches are
taken before LBR is frozen in the functionality added in the next patch.
Use __always_inline to also eliminate any possible function calls.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Sandipan Das <sandipan.das@amd.com>
Link: https://lore.kernel.org/r/20240402022118.1046049-3-andrii@kernel.org
arch/x86/events/amd/lbr.c
arch/x86/events/perf_event.h