2021-11-05 08:48:39

by Wanpeng Li

[permalink] [raw]
Subject: [PATCH] perf/x86/lbr: Reset LBR_SELECT during vlbr reset

From: Wanpeng Li <[email protected]>

lbr_select in kvm guest has residual data even if kvm guest is poweroff.
We can get residual data in the next boot. Because lbr_select is not
reset during kvm vlbr release. Let's reset LBR_SELECT during vlbr reset.

Cc: Like Xu <[email protected]>
Signed-off-by: Wanpeng Li <[email protected]>
---
arch/x86/events/intel/lbr.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c
index 9e6d6eaeb4cb..1076de93a2f5 100644
--- a/arch/x86/events/intel/lbr.c
+++ b/arch/x86/events/intel/lbr.c
@@ -279,6 +279,8 @@ void intel_pmu_lbr_reset(void)

cpuc->last_task_ctx = NULL;
cpuc->last_log_id = 0;
+ if (!static_cpu_has(X86_FEATURE_ARCH_LBR) && cpuc->lbr_select)
+ wrmsrl(MSR_LBR_SELECT, 0);
}

/*
--
2.25.1


2021-11-05 08:51:46

by Like Xu

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/lbr: Reset LBR_SELECT during vlbr reset

On 5/11/2021 3:20 pm, Wanpeng Li wrote:
> From: Wanpeng Li <[email protected]>
>
> lbr_select in kvm guest has residual data even if kvm guest is poweroff.
> We can get residual data in the next boot. Because lbr_select is not
> reset during kvm vlbr release. Let's reset LBR_SELECT during vlbr reset.

This is because when a new vlbr event is first scheduled in the current CPU,
the lbr_select is not reset, which causes the previous lbr_select value
to be visible to the next vcpu.

Considering that the requested lbr_select will be reconfigured
when the event is enabled. It is trivial, but a valid fix. Thanks.

>
> Cc: Like Xu <[email protected]>
> Signed-off-by: Wanpeng Li <[email protected]>
> ---
> arch/x86/events/intel/lbr.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c
> index 9e6d6eaeb4cb..1076de93a2f5 100644
> --- a/arch/x86/events/intel/lbr.c
> +++ b/arch/x86/events/intel/lbr.c
> @@ -279,6 +279,8 @@ void intel_pmu_lbr_reset(void)
>
> cpuc->last_task_ctx = NULL;
> cpuc->last_log_id = 0;
> + if (!static_cpu_has(X86_FEATURE_ARCH_LBR) && cpuc->lbr_select)
> + wrmsrl(MSR_LBR_SELECT, 0);
> }
>
> /*
>

2021-11-11 12:22:23

by tip-bot2 for Jacob Pan

[permalink] [raw]
Subject: [tip: perf/urgent] perf/x86/lbr: Reset LBR_SELECT during vlbr reset

The following commit has been merged into the perf/urgent branch of tip:

Commit-ID: 0fe39a3929ac7af980347814d552a734b51adacf
Gitweb: https://git.kernel.org/tip/0fe39a3929ac7af980347814d552a734b51adacf
Author: Wanpeng Li <[email protected]>
AuthorDate: Fri, 05 Nov 2021 00:20:51 -07:00
Committer: Peter Zijlstra <[email protected]>
CommitterDate: Thu, 11 Nov 2021 13:09:34 +01:00

perf/x86/lbr: Reset LBR_SELECT during vlbr reset

lbr_select in kvm guest has residual data even if kvm guest is poweroff.
We can get residual data in the next boot. Because lbr_select is not
reset during kvm vlbr release. Let's reset LBR_SELECT during vlbr reset.

Signed-off-by: Wanpeng Li <[email protected]>
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Link: https://lkml.kernel.org/r/[email protected]
---
arch/x86/events/intel/lbr.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/arch/x86/events/intel/lbr.c b/arch/x86/events/intel/lbr.c
index 6b72e9b..8043213 100644
--- a/arch/x86/events/intel/lbr.c
+++ b/arch/x86/events/intel/lbr.c
@@ -265,6 +265,8 @@ void intel_pmu_lbr_reset(void)

cpuc->last_task_ctx = NULL;
cpuc->last_log_id = 0;
+ if (!static_cpu_has(X86_FEATURE_ARCH_LBR) && cpuc->lbr_select)
+ wrmsrl(MSR_LBR_SELECT, 0);
}

/*