From: "Andy Lutomirski" <luto@kernel.org>
To: "Paolo Bonzini" <pbonzini@redhat.com>,
"Liu, Jing2" <jing2.liu@intel.com>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>
Cc: "the arch/x86 maintainers" <x86@kernel.org>,
"Bae, Chang Seok" <chang.seok.bae@intel.com>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
"Arjan van de Ven" <arjan@linux.intel.com>,
"kvm list" <kvm@vger.kernel.org>,
"Nakajima, Jun" <jun.nakajima@intel.com>,
"Jing Liu" <jing2.liu@linux.intel.com>,
"Sean Christopherson" <seanjc@google.com>
Subject: Re: [patch 13/31] x86/fpu: Move KVMs FPU swapping to FPU core
Date: Wed, 13 Oct 2021 07:59:26 -0700 [thread overview]
Message-ID: <10a8868e-eb85-4043-a5ad-96c03d9b0abb@www.fastmail.com> (raw)
In-Reply-To: <df3af1c2-fe93-ea21-56e5-4d70d08e55f2@redhat.com>
On Wed, Oct 13, 2021, at 5:26 AM, Paolo Bonzini wrote:
> On 13/10/21 12:14, Andy Lutomirski wrote:
>>> I think it's simpler to always wait for #NM, it will only happen
>>> once per vCPU. In other words, even if the guest clears XFD before
>>> it generates #NM, the guest_fpu's XFD remains nonzero and an #NM
>>> vmexit is possible. After #NM the guest_fpu's XFD is zero; then
>>> passthrough can happen and the #NM vmexit trap can be disabled.
>>
>> This will stop being at all optimal when Intel inevitably adds
>> another feature that uses XFD. In the potentially infinite window in
>> which the guest manages XFD and #NM on behalf of its userspace and
>> when the guest allocates the other hypothetical feature, all the #NMs
>> will have to be trapped by KVM.
>
> The reason is that it's quite common to simply let the guest see all
> CPUID bits that KVM knows about. But it's not unlikely that most guests
> will not ever use any XFD feature, and therefore will not ever see an
> #NM. I wouldn't have any problem with allocating _all_ of the dynamic
> state space on the first #NM.
>
> Thinking more about it, #NM only has to be trapped if XCR0 enables a
> dynamic feature. In other words, the guest value of XFD can be limited
> to (host_XFD|guest_XFD) & guest_XCR0. This avoids that KVM
> unnecessarily traps for old guests that use CR0.TS.
>
You could simplify this by allocating the state the first time XCR0 enables the feature in question.
(This is how regular non-virt userspace *should* work too, but it looks like I’ve probably been outvoted on that front…)
> Paolo
>
>> Is it really worthwhile for KVM to use XFD at all instead of
>> preallocating the state and being done with it? KVM would still have
>> to avoid data loss if the guest sets XFD with non-init state, but #NM
>> could always pass through.
>>
next prev parent reply other threads:[~2021-10-13 14:59 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-11 23:59 [patch 00/31] x86/fpu: Preparatory cleanups for AMX support (part 1) Thomas Gleixner
2021-10-11 23:59 ` [patch 01/31] x86/fpu: Remove pointless argument from switch_fpu_finish() Thomas Gleixner
2021-10-12 0:00 ` [patch 02/31] x86/fpu: Update stale comments Thomas Gleixner
2021-10-12 0:00 ` [patch 03/31] x86/pkru: Remove useless include Thomas Gleixner
2021-10-12 0:00 ` [patch 04/31] x86/fpu: Restrict xsaves()/xrstors() to independent states Thomas Gleixner
2021-10-12 14:24 ` Borislav Petkov
2021-10-12 0:00 ` [patch 05/31] x86/fpu: Cleanup the on_boot_cpu clutter Thomas Gleixner
2021-10-12 0:00 ` [patch 06/31] x86/fpu: Remove pointless memset in fpu_clone() Thomas Gleixner
2021-10-12 0:00 ` [patch 07/31] x86/process: Clone FPU in copy_thread() Thomas Gleixner
2021-10-12 0:00 ` [patch 08/31] x86/fpu: Do not inherit FPU context for kernel and IO worker threads Thomas Gleixner
2021-10-12 0:00 ` [patch 09/31] x86/fpu: Do not inherit FPU context for CLONE_THREAD Thomas Gleixner
2021-10-12 16:10 ` Borislav Petkov
2021-10-12 18:52 ` Thomas Gleixner
2021-10-12 19:01 ` Thomas Gleixner
2021-10-12 0:00 ` [patch 10/31] x86/fpu: Cleanup xstate xcomp_bv initialization Thomas Gleixner
2021-10-12 0:00 ` [patch 11/31] x86/fpu/xstate: Provide and use for_each_xfeature() Thomas Gleixner
2021-10-12 16:45 ` Borislav Petkov
2021-10-12 0:00 ` [patch 12/31] x86/fpu/xstate: Mark all init only functions __init Thomas Gleixner
2021-10-12 0:00 ` [patch 13/31] x86/fpu: Move KVMs FPU swapping to FPU core Thomas Gleixner
2021-10-12 16:53 ` Borislav Petkov
2021-10-12 18:25 ` Thomas Gleixner
2021-10-12 18:26 ` Thomas Gleixner
2021-10-12 17:22 ` Paolo Bonzini
2021-10-13 6:15 ` Liu, Jing2
2021-10-13 6:26 ` Paolo Bonzini
2021-10-13 7:46 ` Liu, Jing2
2021-10-13 8:42 ` Paolo Bonzini
2021-10-13 10:14 ` Andy Lutomirski
2021-10-13 12:26 ` Paolo Bonzini
2021-10-13 14:14 ` Thomas Gleixner
2021-10-13 14:24 ` Thomas Gleixner
2021-10-13 14:59 ` Andy Lutomirski [this message]
2021-10-13 15:05 ` Paolo Bonzini
2021-10-13 10:25 ` Liu, Jing2
2021-10-13 12:37 ` Paolo Bonzini
2021-10-13 14:06 ` Thomas Gleixner
2021-10-14 6:50 ` Paolo Bonzini
2021-10-14 8:02 ` Liu, Jing2
2021-10-14 9:01 ` Paolo Bonzini
2021-10-14 11:21 ` Liu, Jing2
2021-10-14 11:33 ` Paolo Bonzini
2021-10-14 11:30 ` Liu, Jing2
2021-10-14 11:39 ` Paolo Bonzini
2021-11-22 8:50 ` Liu, Jing2
2021-10-14 14:09 ` Thomas Gleixner
2021-10-14 14:37 ` Thomas Gleixner
2021-10-14 15:01 ` Paolo Bonzini
2021-10-14 19:14 ` Thomas Gleixner
2021-10-15 9:20 ` Liu, Jing2
2021-10-15 9:36 ` Thomas Gleixner
2021-10-15 14:24 ` Liu, Jing2
2021-10-15 15:53 ` Paolo Bonzini
2021-10-16 14:45 ` Thomas Gleixner
2021-10-15 9:00 ` Liu, Jing2
2021-10-15 10:50 ` Thomas Gleixner
2021-10-15 11:17 ` Paolo Bonzini
2021-10-15 13:01 ` Liu, Jing2
2021-10-14 12:23 ` Thomas Gleixner
2021-10-14 12:26 ` Paolo Bonzini
2021-10-14 14:23 ` Thomas Gleixner
2021-10-13 15:12 ` Thomas Gleixner
2021-10-14 8:21 ` Liu, Jing2
2021-10-14 13:08 ` Thomas Gleixner
2021-10-12 0:00 ` [patch 14/31] x86/fpu: Replace KVMs homebrewn FPU copy from user Thomas Gleixner
2021-10-12 17:00 ` Borislav Petkov
2021-10-13 14:57 ` Sean Christopherson
2021-10-13 15:12 ` Paolo Bonzini
2021-10-13 15:16 ` Thomas Gleixner
2021-10-12 17:30 ` Paolo Bonzini
2021-10-12 0:00 ` [patch 15/31] x86/fpu: Rework copy_xstate_to_uabi_buf() Thomas Gleixner
2021-10-12 17:30 ` Paolo Bonzini
2021-10-12 0:00 ` [patch 16/31] x86/fpu: Replace KVMs homebrewn FPU copy to user Thomas Gleixner
2021-10-12 17:10 ` Borislav Petkov
2021-10-12 17:36 ` Paolo Bonzini
2021-10-12 17:47 ` Thomas Gleixner
2021-10-12 18:40 ` [patch V2 16/31] x86/fpu: Replace KVMs home brewed " Thomas Gleixner
2021-10-13 5:34 ` [patch 16/31] x86/fpu: Replace KVMs homebrewn " Paolo Bonzini
2021-10-12 0:00 ` [patch 17/31] x86/fpu: Mark fpu__init_prepare_fx_sw_frame() as __init Thomas Gleixner
2021-10-12 0:00 ` [patch 18/31] x86/fpu: Move context switch and exit to user inlines into sched.h Thomas Gleixner
2021-10-12 0:00 ` [patch 19/31] x86/fpu: Clean up cpu feature tests Thomas Gleixner
2021-10-12 0:00 ` [patch 20/31] x86/fpu: Make os_xrstor_booting() private Thomas Gleixner
2021-10-12 0:00 ` [patch 21/31] x86/fpu: Move os_xsave() and os_xrstor() to core Thomas Gleixner
2021-10-12 0:00 ` [patch 22/31] x86/fpu: Move legacy ASM wrappers " Thomas Gleixner
2021-10-12 0:00 ` [patch 23/31] x86/fpu: Make WARN_ON_FPU() private Thomas Gleixner
2021-10-12 0:00 ` [patch 24/31] x86/fpu: Move fpregs_restore_userregs() to core Thomas Gleixner
2021-10-12 17:32 ` Borislav Petkov
2021-10-12 0:00 ` [patch 25/31] x86/fpu: Move mxcsr related code " Thomas Gleixner
2021-10-12 0:00 ` [patch 26/31] x86/fpu: Move fpstate functions to api.h Thomas Gleixner
2021-10-12 17:46 ` Borislav Petkov
2021-10-12 0:00 ` [patch 27/31] x86/fpu: Remove internal.h dependency from fpu/signal.h Thomas Gleixner
2021-10-12 0:00 ` [patch 28/31] x86/sev: Include fpu/xcr.h Thomas Gleixner
2021-10-12 7:24 ` Xiaoyao Li
2021-10-12 0:00 ` [patch 29/31] x86/fpu: Mop up the internal.h leftovers Thomas Gleixner
2021-10-12 0:00 ` [patch 30/31] x86/fpu: Replace the includes of fpu/internal.h Thomas Gleixner
2021-10-12 0:00 ` [patch 31/31] x86/fpu: Provide a proper function for ex_handler_fprestore() Thomas Gleixner
2021-10-12 21:15 ` [patch 00/31] x86/fpu: Preparatory cleanups for AMX support (part 1) Thomas Gleixner
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=10a8868e-eb85-4043-a5ad-96c03d9b0abb@www.fastmail.com \
--to=luto@kernel.org \
--cc=arjan@linux.intel.com \
--cc=chang.seok.bae@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=jing2.liu@intel.com \
--cc=jing2.liu@linux.intel.com \
--cc=jun.nakajima@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--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;
as well as URLs for NNTP newsgroup(s).