Re: [PATCH v3 3/3] KVM: x86: Move MPK feature detection to common code

From: Jim Mattson
Date: Tue May 12 2020 - 12:58:33 EST


On Tue, May 12, 2020 at 8:12 AM Babu Moger <babu.moger@xxxxxxx> wrote:
>
>
>
> On 5/11/20 6:51 PM, Jim Mattson wrote:
> > On Mon, May 11, 2020 at 4:33 PM Babu Moger <babu.moger@xxxxxxx> wrote:
> >>
> >> Both Intel and AMD support (MPK) Memory Protection Key feature.
> >> Move the feature detection from VMX to the common code. It should
> >> work for both the platforms now.
> >>
> >> Signed-off-by: Babu Moger <babu.moger@xxxxxxx>
> >> ---
> >> arch/x86/kvm/cpuid.c | 4 +++-
> >> arch/x86/kvm/vmx/vmx.c | 4 ----
> >> 2 files changed, 3 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
> >> index 901cd1fdecd9..3da7d6ea7574 100644
> >> --- a/arch/x86/kvm/cpuid.c
> >> +++ b/arch/x86/kvm/cpuid.c
> >> @@ -278,6 +278,8 @@ void kvm_set_cpu_caps(void)
> >> #ifdef CONFIG_X86_64
> >> unsigned int f_gbpages = F(GBPAGES);
> >> unsigned int f_lm = F(LM);
> >> + /* PKU is not yet implemented for shadow paging. */
> >> + unsigned int f_pku = tdp_enabled ? F(PKU) : 0;
> >
> > I think we still want to require that OSPKE be set on the host before
> > exposing PKU to the guest.
> >
>
> Ok I can add this check.
>
> + unsigned int f_pku = tdp_enabled && F(OSPKE)? F(PKU) : 0;

That doesn't do what you think it does. F(OSPKE) is a non-zero
constant, so that conjunct is always true.