From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753355AbdAZPQt (ORCPT ); Thu, 26 Jan 2017 10:16:49 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:36527 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753092AbdAZPQr (ORCPT ); Thu, 26 Jan 2017 10:16:47 -0500 Date: Thu, 26 Jan 2017 16:16:42 +0100 From: Ingo Molnar To: Rik van Riel Cc: linux-kernel@vger.kernel.org, Andrew Morton , Andy Lutomirski , Borislav Petkov , Dave Hansen , Fenghua Yu , "H . Peter Anvin" , Linus Torvalds , Oleg Nesterov , Peter Zijlstra , Thomas Gleixner , Yu-cheng Yu Subject: Re: [PATCH 5/7] x86/fpu: Change fpu->fpregs_active users to fpu->fpstate_active Message-ID: <20170126151642.GB12274@gmail.com> References: <1485429989-23340-1-git-send-email-mingo@kernel.org> <1485429989-23340-6-git-send-email-mingo@kernel.org> <1485441852.15964.49.camel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1485441852.15964.49.camel@redhat.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org * Rik van Riel wrote: > On Thu, 2017-01-26 at 12:26 +0100, Ingo Molnar wrote: > > We want to simplify the FPU state machine by eliminating fpu- > > >fpregs_active, > > and we can do that because the two state flags (::fpregs_active and > > ::fpstate_active) are set essentially together. > > > > The old lazy FPU switching code used to make a distinction - but > > there's > > no lazy switching code anymore, we always switch in an 'eager' > > fashion. > > I've been working for a while now to fix that for > KVM VCPU threads. > > Currently when we switch to a VCPU thread, we first > load that thread's userspace FPU context, and then > soon after we save that, and load the guest side FPU > context. > > When a VCPU thread goes idle, we also go through > two FPU context transitions. > > In order to skip the unnecessary FPU context switches > for VCPU threads, I have been relying on separate > fpstate_active and fpregs_active states. > > Do you have any ideas on how I could implement that > kind of change without separate fpstate_active and > fpregs_active states? So the vCPU threads have host side FPU (user-space) state - whatever FPU state Qemu has? One solution to that overhead, without complicating the FPU state machine in any way, would be to add a facility to drop/reacquire that FPU state. That should automatically result in zero FPU state switching AFAICS: kernel threads don't do FPU state switching either. The vCPU threads sometimes do return to user-space, when they get some deep exception that needs to be handled by Qemu, right? This aspect shouldn't be a big problem either, because the regular calling convention is to call (synchronous) system calls without holding FPU state, right? I.e. the vCPU /dev/kvm ioctl() could drop/re-map the FPU state with very little overhead (i.e. no full save/restore required in that code path either), when it enters/exits vCPU mode. Thanks, Ingo