From: Liam Merwick <liam.merwick@oracle.com>
To: Dongli Si <kvmx86@gmail.com>, peterz@infradead.org, joerg.roedel@amd.com
Cc: kim.phillips@amd.com, mingo@kernel.org, acme@kernel.org,
mark.rutland@arm.com, alexander.shishkin@linux.intel.com,
jolsa@kernel.org, namhyung@kernel.org, tglx@linutronix.de,
bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
hpa@zytor.com, linux-perf-users@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] perf/x86/amd: Don't touch the Host-only bit inside the guest hypervisor
Date: Fri, 11 Mar 2022 22:25:59 +0000 [thread overview]
Message-ID: <3508496a-59ea-2004-2917-2ffe712cc187@oracle.com> (raw)
In-Reply-To: <20220310183404.1291725-1-sidongli1997@gmail.com>
On 10/03/2022 18:34, Dongli Si wrote:
> From: Dongli Si <sidongli1997@gmail.com>
>
> With nested virtualization, when the guest hypervisor runs a nested guest
> and if uses "perf record" in an AMD Milan guest hypervisor, the guest
> hypervisor dmesg will reports the following warning message:
I think it might be clearer with L0/L1/L2 terminology. Maybe something
like the following?
"With nested virtualization on AMD Milan, if "perf record" is run in an
L1 hypervisor with an L2 guest, the following warning is emitted in
the L1 guest."
>
> [] unchecked MSR access error: WRMSR to 0xc0010200 (tried to write 0x0000020000510076)
> at rIP: 0xffffffff81003a50 (x86_pmu_enable_all+0x60/0x100)
> [] Call Trace:
> [] <IRQ>
> [] ? x86_pmu_enable+0x146/0x300
> [] __perf_install_in_context+0x150/0x170
>
> The AMD64_EVENTSEL_HOSTONLY bit is defined and used on the host, while
> the guest hypervisor performance monitor unit should avoid such use.
"The AMD64_EVENTSEL_HOSTONLY bit is defined and used on the host (L0),
while the L1 hypervisor Performance Monitor Unit should avoid such use."
>
> Fixes: 1018faa6cf23 ("perf/x86/kvm: Fix Host-Only/Guest-Only counting with SVM disabled")
> Signed-off-by: Dongli Si <sidongli1997@gmail.com>
Tested-by: Liam Merwick <liam.merwick@oracle.com>
Reviewed-by: Liam Merwick <liam.merwick@oracle.com>
> ---
> v2: Add run_as_host function and improve description
> v1: https://lore.kernel.org/all/20220227132640.3-1-sidongli1997@gmail.com/
>
> arch/x86/events/amd/core.c | 4 +++-
> arch/x86/include/asm/hypervisor.h | 10 ++++++++++
> 2 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/events/amd/core.c b/arch/x86/events/amd/core.c
> index 9687a8aef01c..14cd079243a4 100644
> --- a/arch/x86/events/amd/core.c
> +++ b/arch/x86/events/amd/core.c
> @@ -8,6 +8,7 @@
> #include <linux/jiffies.h>
> #include <asm/apicdef.h>
> #include <asm/nmi.h>
> +#include <asm/hypervisor.h>
>
> #include "../perf_event.h"
>
> @@ -1027,7 +1028,8 @@ void amd_pmu_enable_virt(void)
> {
> struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
>
> - cpuc->perf_ctr_virt_mask = 0;
> + if (run_as_host())
> + cpuc->perf_ctr_virt_mask = 0;
>
> /* Reload all events */
> amd_pmu_disable_all();
> diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h
> index e41cbf2ec41d..fcc66c23cc72 100644
> --- a/arch/x86/include/asm/hypervisor.h
> +++ b/arch/x86/include/asm/hypervisor.h
> @@ -73,11 +73,21 @@ static inline bool hypervisor_is_type(enum x86_hypervisor_type type)
> {
> return x86_hyper_type == type;
> }
> +
> +static inline bool run_as_host(void)
> +{
> + return hypervisor_is_type(X86_HYPER_NATIVE);
> +}
> #else
> static inline void init_hypervisor_platform(void) { }
> static inline bool hypervisor_is_type(enum x86_hypervisor_type type)
> {
> return type == X86_HYPER_NATIVE;
> }
> +
> +static inline bool run_as_host(void)
> +{
> + return true;
> +}
> #endif /* CONFIG_HYPERVISOR_GUEST */
> #endif /* _ASM_X86_HYPERVISOR_H */
next prev parent reply other threads:[~2022-03-11 22:52 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-10 18:34 Dongli Si
2022-03-11 22:25 ` Liam Merwick [this message]
2022-03-14 4:19 ` Dongli Si
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3508496a-59ea-2004-2917-2ffe712cc187@oracle.com \
--to=liam.merwick@oracle.com \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=hpa@zytor.com \
--cc=joerg.roedel@amd.com \
--cc=jolsa@kernel.org \
--cc=kim.phillips@amd.com \
--cc=kvmx86@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®