From: Thomas Gleixner <tglx@linutronix.de>
To: Paolo Bonzini <pbonzini@redhat.com>,
"Liu, Jing2" <jing2.liu@intel.com>,
LKML <linux-kernel@vger.kernel.org>
Cc: "x86@kernel.org" <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@vger.kernel.org" <kvm@vger.kernel.org>,
"Nakajima, Jun" <jun.nakajima@intel.com>,
Jing Liu <jing2.liu@linux.intel.com>,
"seanjc@google.com" <seanjc@google.com>,
"Cooper, Andrew" <andrew.cooper3@citrix.com>
Subject: Re: [patch 13/31] x86/fpu: Move KVMs FPU swapping to FPU core
Date: Fri, 15 Oct 2021 11:36:25 +0200 [thread overview]
Message-ID: <87a6ja6352.ffs@tglx> (raw)
In-Reply-To: <87lf2v5shb.ffs@tglx>
Paolo,
On Thu, Oct 14 2021 at 21:14, Thomas Gleixner wrote:
> On Thu, Oct 14 2021 at 17:01, Paolo Bonzini wrote:
>>> vcpu_create()
>>>
>>> fpu_init_fpstate_user(guest_fpu, supported_xcr0)
>>>
>>> That will (it does not today) do:
>>>
>>> guest_fpu::__state_perm = supported_xcr0 & xstate_get_group_perm();
>>>
>>> The you have the information you need right in the guest FPU.
>>
>> Good, I wasn't aware of the APIs that will be there.
>
> Me neither, but that's a pretty obvious consequence of the work I'm
> doing for AMX. So I made it up for you. :)
let me make some more up for you!
If you carefully look at part 2 of the rework, then you might notice
that there is a fundamental change which allows to do a real
simplification for KVM FPU handling:
current->thread.fpu.fpstate
is now a pointer. So you can spare one FPU allocation because we can now
do:
fpu_attach_guest_fpu(supported_xcr0)
{
guest_fpstate = alloc_fpstate(supported_xcr0);
fpu_init_fpstate_user(guest_fpstate, supported_xcr0);
current->thread.fpu.guest_fpstate = guest_fpstate;
}
fpu_swap_kvm_fpu() becomes in the first step:
fpu_swap_kvm_fpu(bool enter_guest)
{
safe_fpregs_to_fpstate(current->thread.fpu.fpstate);
swap(current->thread.fpu.fpstate, current->thread.fpu.guest_fpstate);
restore_fpregs_from_fpstate(current->thread.fpu.fpstate);
}
@enter guest will allow to do some sanity checks
In a second step:
fpu_swap_kvm_fpu(bool enter_guest, u64 guest_needs_features)
{
possibly_reallocate(enter_guest, guest_needs_features);
safe_fpregs_to_fpstate(current->thread.fpu.fpstate);
swap(current->thread.fpu.fpstate, current->thread.fpu.guest_fpstate);
restore_fpregs_from_fpstate(current->thread.fpu.fpstate);
possibly_reallocate(enter_guest, guest_needs_features);
}
@guest_needs_features is the information which you gather via guest XCR0
and guest XFD.
So fpu_swap_kvm_fpu() is going to be the place where reallocation happens
and that's good enough for both cases:
vcpu_run()
fpu_swap_kvm_fpu(); <- 1
while (...)
vmenter();
fpu_swap_kvm_fpu(); <- 2
#1 QEMU user space used feature and has already large fpstate
#2 Guest requires feature but has not used it yet (XCR0/XFD trapping)
See?
It's not only correct, it's also simple and truly beautiful.
Thanks,
tglx
next prev parent reply other threads:[~2021-10-15 9:36 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
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 [this message]
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=87a6ja6352.ffs@tglx \
--to=tglx@linutronix.de \
--cc=andrew.cooper3@citrix.com \
--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=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).