Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp384767pxj; Fri, 7 May 2021 10:41:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxi90bVtQyvO1xr2ujeBDcc0PT5vgxkmLqPMEGjHjv00t0yj+8kBhsxJoiPCG32JtfW6426 X-Received: by 2002:a17:907:161e:: with SMTP id hb30mr10854393ejc.360.1620409265797; Fri, 07 May 2021 10:41:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620409265; cv=none; d=google.com; s=arc-20160816; b=qUt5xBsvnPBq9BaOZYsLoHJDI+Dg2OKx9D6fTEzYlrVHnPiT2CHWGd5QRxt0y4gi/s ubl2l6ue2N12oZS4LtLnHZ+M18V1Tihjvu3SQyoj7eGIi7uBTe0NDfJQVTvZDe+hv+o0 dzP3viGiyt2c4hv1WD1GwpinZKaD89J7CS7019/j4hu6zLr+N0jUKilpmUkIoR+xY8r6 0+DcIypNlhEvdeF+S+ccOTzpUNWACQzMcztWCUi/lwE0R/5CtBMZgoJxxFiFSTub/QRc v16WfdcdGDrBEfRvQoUIwddwYYW/0lAfDGO7dB+bYxV6IrIg5yB9v3y3ihX2v082WURI C0VQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=h+S8doMBTdYelFV+sS7BmEZ8OEDR2ZNO9i+PaJSM0AA=; b=Dbbjr72QdNBP29sMUfMsbkvrK9wiWKsedEWbT031wdEKuGNjWmg/Qls4EmVT40wHC9 eGzgPJIb+MdCeaj2LLoy9SbFnMJ+SdrX+85YUaz1/g9IbySsFbY6JtC0EPpimKsqdATj CXisoKzRyIATuTxcKTBekTjbz+ZGASiTH8+Zolgi5EAacfykglt08lkdPalYb78PIxU6 HJnSroRpibZm0gAXBsph0vARm6baSDBLB4B0BjZGc1HDnpNV0vvdJTeL/wa88EiFluTT hN/J22Z3ohMYV5zdGQrrsKh4AovPWnJMNu63Qoe8conO7bcBTvrZ+PgitZVLDfBqdxw7 ckhQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=CneR1B49; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id qh17si5465424ejb.127.2021.05.07.10.40.41; Fri, 07 May 2021 10:41:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=CneR1B49; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238424AbhEGQxU (ORCPT + 99 others); Fri, 7 May 2021 12:53:20 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:50533 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236947AbhEGQxS (ORCPT ); Fri, 7 May 2021 12:53:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1620406337; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=h+S8doMBTdYelFV+sS7BmEZ8OEDR2ZNO9i+PaJSM0AA=; b=CneR1B49BjclH6XNs1j487ddELgcvC6svCreXqoi8ijzV18nrCb0q7gAtiY8SVUEi3rUpQ 3zUMfYwZPpiynSgfOUFEbeHXpSdmMUxIiYPctlperjPT1G6vYhBQ9YsrMJIWX6qcx57mdF Ecmzujcv85OKpp7KxRP5su9BlWC6vUI= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-373-E-PZRCstOwCmXICTd7RUAQ-1; Fri, 07 May 2021 12:52:15 -0400 X-MC-Unique: E-PZRCstOwCmXICTd7RUAQ-1 Received: by mail-wr1-f70.google.com with SMTP id j33-20020adf91240000b029010e4009d2ffso1378595wrj.0 for ; Fri, 07 May 2021 09:52:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=h+S8doMBTdYelFV+sS7BmEZ8OEDR2ZNO9i+PaJSM0AA=; b=O+iaHZsIuMVo3QR6MGo48z2I280warAMdyjejEcR3/Gk9xxH90qqjIp35gipaXJPTd VHQP4jhFZL9lh8tBWqbRJrrxxUItPFFVxO1dRxF5KpR5MIcjjW5TS5sIjfbG7Al/E3al tXizHFK62+gLFF7YYMFkUzM/uHUAFRy8NWyXWREJjBkLwuhUsdeye/jaeENIKnAngA2R iRKl/ZwKfFKLDdIz+zZs1s03WDWciFm/ojmdRNKCi1Rq/EkI71PmxGely7JxliFXC6pu i2ab+AIwGV19B8UtXfvnM8YMmOwyaLU7yPtGVSm5pZ1oBRObW1t4ncKWFjB4Bi0PnPH4 jXCw== X-Gm-Message-State: AOAM532c2PZ0SKZT7hOflWWcpHYmJdJiINR9O6cRuhK54WO9VIX+oxSE SAOfdbSibkXu8g6LRysOpOnuqC01yx9HOnERzUDzLSlSsQnmLcnWur/07a2WZ6NKEooxMJonuHD BqSdm42Z5vH09UW1EqumXYuGk X-Received: by 2002:adf:f2ce:: with SMTP id d14mr8283530wrp.384.1620406334697; Fri, 07 May 2021 09:52:14 -0700 (PDT) X-Received: by 2002:adf:f2ce:: with SMTP id d14mr8283517wrp.384.1620406334515; Fri, 07 May 2021 09:52:14 -0700 (PDT) Received: from ?IPv6:2001:b07:6468:f312:c8dd:75d4:99ab:290a? ([2001:b07:6468:f312:c8dd:75d4:99ab:290a]) by smtp.gmail.com with ESMTPSA id f3sm8460641wrp.7.2021.05.07.09.52.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 07 May 2021 09:52:13 -0700 (PDT) Subject: Re: [PATCH] KVM: x86: add hint to skip hidden rdpkru under kvm_load_host_xsave_state To: Jon Kohler Cc: Babu Moger , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Dave Hansen , Fenghua Yu , Yu-cheng Yu , Tony Luck , Uros Bizjak , Petteri Aimonen , Kan Liang , Andrew Morton , Mike Rapoport , Benjamin Thiel , Fan Yang , Juergen Gross , Dave Jiang , "Peter Zijlstra (Intel)" , Ricardo Neri , Arvind Sankar , linux-kernel@vger.kernel.org, kvm@vger.kernel.org References: <20210507164456.1033-1-jon@nutanix.com> From: Paolo Bonzini Message-ID: <16af038e-5b30-2509-4e3b-3b3ed9d4b81e@redhat.com> Date: Fri, 7 May 2021 18:52:11 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <20210507164456.1033-1-jon@nutanix.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Nice one. The patch can be made simpler though (I think). On 07/05/21 18:44, Jon Kohler wrote: @@ -122,7 +124,7 @@ static inline u32 rdpkru(void) > return 0; > } > > -static inline void __write_pkru(u32 pkru) > +static inline void __write_pkru(u32 pkru, bool skip_comparison) > { > } > #endif > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index cebdaa1e3cf5..cd95adbd140c 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -912,10 +912,10 @@ void kvm_load_guest_xsave_state(struct kvm_vcpu *vcpu) > } > > if (static_cpu_has(X86_FEATURE_PKU) && > - (kvm_read_cr4_bits(vcpu, X86_CR4_PKE) || > - (vcpu->arch.xcr0 & XFEATURE_MASK_PKRU)) && > - vcpu->arch.pkru != vcpu->arch.host_pkru) > - __write_pkru(vcpu->arch.pkru); > + vcpu->arch.pkru != vcpu->arch.host_pkru && > + ((vcpu->arch.xcr0 & XFEATURE_MASK_PKRU) || > + kvm_read_cr4_bits(vcpu, X86_CR4_PKE))) > + __write_pkru(vcpu->arch.pkru, false); This can be optimized as well, can't it? This means that the only case that needs the rdpkru is in switch_fpu_finish, and __write_pkru can be removed completely: - do the rdpkru+wrpkru in switch_fpu_finish - just use wrpkru in KVM Paolo > } > EXPORT_SYMBOL_GPL(kvm_load_guest_xsave_state); > > @@ -925,11 +925,11 @@ void kvm_load_host_xsave_state(struct kvm_vcpu *vcpu) > return; > > if (static_cpu_has(X86_FEATURE_PKU) && > - (kvm_read_cr4_bits(vcpu, X86_CR4_PKE) || > - (vcpu->arch.xcr0 & XFEATURE_MASK_PKRU))) { > + ((vcpu->arch.xcr0 & XFEATURE_MASK_PKRU) || > + kvm_read_cr4_bits(vcpu, X86_CR4_PKE))) { > vcpu->arch.pkru = rdpkru(); > if (vcpu->arch.pkru != vcpu->arch.host_pkru) > - __write_pkru(vcpu->arch.host_pkru); > + __write_pkru(vcpu->arch.host_pkru, true); > } > > if (kvm_read_cr4_bits(vcpu, X86_CR4_OSXSAVE)) { > -- > 2.30.1 (Apple Git-130) >