From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758067AbdKOOnR (ORCPT ); Wed, 15 Nov 2017 09:43:17 -0500 Received: from mx1.redhat.com ([209.132.183.28]:55774 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757995AbdKOOnF (ORCPT ); Wed, 15 Nov 2017 09:43:05 -0500 Message-ID: <1510756981.21121.291.camel@redhat.com> Subject: Re: [PATCH 1/2] x86,kvm: move qemu/guest FPU switching out to vcpu_run From: Rik van Riel To: "quan.xu04@gmail.com" , pbonzini@redhat.com Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, david@redhat.com, borntraeger@de.ibm.com, tglx@linutronix.de, rkrcmar@redhat.com, Quan Xu Date: Wed, 15 Nov 2017 09:43:01 -0500 In-Reply-To: <2e83dd3f-8f03-03ac-45e0-f2fae1d17013@gmail.com> References: <20171114215424.32214-1-riel@redhat.com> <20171114215424.32214-2-riel@redhat.com> <2e83dd3f-8f03-03ac-45e0-f2fae1d17013@gmail.com> Organization: Red Hat, Inc Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 15 Nov 2017 14:43:05 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 2017-11-15 at 14:53 +0800, quan.xu04@gmail.com wrote: > > On 2017/11/15 05:54, riel@redhat.com wrote: > > From: Rik van Riel > > > > Currently, every time a VCPU is scheduled out, the host kernel will > > first save the guest FPU/xstate context, then load the qemu > > userspace > > FPU context, only to then immediately save the qemu userspace FPU > > context back to memory. When scheduling in a VCPU, the same > > extraneous > > FPU loads and saves are done. > > Rik, be careful with VM migration. with you patch, I don't think you  > could load fpu/xstate >    context accurately after VM migration. Can you explain why you believe that? Getting the guest FPU or XSTATE is done under the vcpu->mutex. This patch switches out guest and userspace FPU/XSTATE under the vcpu->mutex, and switches it back before releasing the vcpu->mutex. By the time a KVM_GET_FPU has obtained the vcpu->mutex, the guest FPU state will be in vcpu->arch.guest_fpu.state, where you expect it to be. What am I missing?