Message ID | 1352253671-1262-1-git-send-email-xudong.hao@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Nov 07, 2012 at 10:01:11AM +0800, Xudong Hao wrote: > Romove fpu lazy restore logic, using eager restore totally. > > v5 changes from v4: > - remove lazy fpu restore totally, fpu eager restore does not have performance > regression and simple the code. > > v4 changes from v3: > - Wrap up some confused code with a clear function lazy_fpu_allowed() > - Update fpu while update cr4 too. > > v3 changes from v2: > - Make fpu active explicitly while guest xsave is enabling and non-lazy xstate > bit exist. > > v2 changes from v1: > - Expand KVM_XSTATE_LAZY to 64 bits before negating it. > > Signed-off-by: Xudong Hao <xudong.hao@intel.com> > --- > arch/x86/kvm/vmx.c | 9 ++------- > arch/x86/kvm/x86.c | 8 +------- > include/linux/kvm_host.h | 1 - > 3 files changed, 3 insertions(+), 15 deletions(-) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index 6599e45..c1fd2e1 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -1197,7 +1197,7 @@ static void update_exception_bitmap(struct kvm_vcpu *vcpu) > u32 eb; > > eb = (1u << PF_VECTOR) | (1u << UD_VECTOR) | (1u << MC_VECTOR) | > - (1u << NM_VECTOR) | (1u << DB_VECTOR); > + (1u << DB_VECTOR); > if ((vcpu->guest_debug & > (KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP)) == > (KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP)) Please remove the code entirely, including: if (is_no_device(intr_info)) { vmx_fpu_activate(vcpu); return 1; } and clts handling. fpu_active/fpu_deactivate callbacks become unused, don't they? Also remove fpu_active variable. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Marcelo Tosatti [mailto:mtosatti@redhat.com] > Sent: Wednesday, November 21, 2012 6:00 AM > To: Hao, Xudong > Cc: avi@redhat.com; kvm@vger.kernel.org > Subject: Re: [PATCH v5] kvm/fpu: Enable fully eager restore kvm FPU > > On Wed, Nov 07, 2012 at 10:01:11AM +0800, Xudong Hao wrote: > > Romove fpu lazy restore logic, using eager restore totally. > > > > v5 changes from v4: > > - remove lazy fpu restore totally, fpu eager restore does not have > performance > > regression and simple the code. > > > > v4 changes from v3: > > - Wrap up some confused code with a clear function lazy_fpu_allowed() > > - Update fpu while update cr4 too. > > > > v3 changes from v2: > > - Make fpu active explicitly while guest xsave is enabling and non-lazy xstate > > bit exist. > > > > v2 changes from v1: > > - Expand KVM_XSTATE_LAZY to 64 bits before negating it. > > > > Signed-off-by: Xudong Hao <xudong.hao@intel.com> > > --- > > arch/x86/kvm/vmx.c | 9 ++------- > > arch/x86/kvm/x86.c | 8 +------- > > include/linux/kvm_host.h | 1 - > > 3 files changed, 3 insertions(+), 15 deletions(-) > > > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > > index 6599e45..c1fd2e1 100644 > > --- a/arch/x86/kvm/vmx.c > > +++ b/arch/x86/kvm/vmx.c > > @@ -1197,7 +1197,7 @@ static void update_exception_bitmap(struct > kvm_vcpu *vcpu) > > u32 eb; > > > > eb = (1u << PF_VECTOR) | (1u << UD_VECTOR) | (1u << MC_VECTOR) | > > - (1u << NM_VECTOR) | (1u << DB_VECTOR); > > + (1u << DB_VECTOR); > > if ((vcpu->guest_debug & > > (KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP)) == > > (KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP)) > > Please remove the code entirely, including: > > if (is_no_device(intr_info)) { > vmx_fpu_activate(vcpu); > return 1; > } > > and clts handling. > > fpu_active/fpu_deactivate callbacks become unused, don't they? > Also remove fpu_active variable. Okay, will remove all of these. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 6599e45..c1fd2e1 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -1197,7 +1197,7 @@ static void update_exception_bitmap(struct kvm_vcpu *vcpu) u32 eb; eb = (1u << PF_VECTOR) | (1u << UD_VECTOR) | (1u << MC_VECTOR) | - (1u << NM_VECTOR) | (1u << DB_VECTOR); + (1u << DB_VECTOR); if ((vcpu->guest_debug & (KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP)) == (KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP)) @@ -1206,8 +1206,6 @@ static void update_exception_bitmap(struct kvm_vcpu *vcpu) eb = ~0; if (enable_ept) eb &= ~(1u << PF_VECTOR); /* bypass_guest_pf = 0 */ - if (vcpu->fpu_active) - eb &= ~(1u << NM_VECTOR); /* When we are running a nested L2 guest and L1 specified for it a * certain exception bitmap, we must trap the same exceptions and pass @@ -3022,9 +3020,6 @@ static void vmx_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0) if (enable_ept) ept_update_paging_mode_cr0(&hw_cr0, cr0, vcpu); - if (!vcpu->fpu_active) - hw_cr0 |= X86_CR0_TS | X86_CR0_MP; - vmcs_writel(CR0_READ_SHADOW, cr0); vmcs_writel(GUEST_CR0, hw_cr0); vcpu->arch.cr0 = cr0; @@ -7119,7 +7114,7 @@ void load_vmcs12_host_state(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12) * but we also need to update cr0_guest_host_mask and exception_bitmap. */ update_exception_bitmap(vcpu); - vcpu->arch.cr0_guest_owned_bits = (vcpu->fpu_active ? X86_CR0_TS : 0); + vcpu->arch.cr0_guest_owned_bits = X86_CR0_TS; vmcs_writel(CR0_GUEST_HOST_MASK, ~vcpu->arch.cr0_guest_owned_bits); /* diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 49fa1f0..cd5aafe 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -5275,10 +5275,6 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) r = 0; goto out; } - if (kvm_check_request(KVM_REQ_DEACTIVATE_FPU, vcpu)) { - vcpu->fpu_active = 0; - kvm_x86_ops->fpu_deactivate(vcpu); - } if (kvm_check_request(KVM_REQ_APF_HALT, vcpu)) { /* Page is swapped out. Do synthetic halt */ vcpu->arch.apf.halted = true; @@ -5320,8 +5316,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) preempt_disable(); kvm_x86_ops->prepare_guest_switch(vcpu); - if (vcpu->fpu_active) - kvm_load_guest_fpu(vcpu); + kvm_load_guest_fpu(vcpu); kvm_load_guest_xcr0(vcpu); vcpu->mode = IN_GUEST_MODE; @@ -6007,7 +6002,6 @@ void kvm_put_guest_fpu(struct kvm_vcpu *vcpu) fpu_save_init(&vcpu->arch.guest_fpu); __kernel_fpu_end(); ++vcpu->stat.fpu_reload; - kvm_make_request(KVM_REQ_DEACTIVATE_FPU, vcpu); trace_kvm_fpu(0); } diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 99a4762..0b33163 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -122,7 +122,6 @@ static inline bool is_error_page(struct page *page) #define KVM_REQ_MMU_SYNC 7 #define KVM_REQ_CLOCK_UPDATE 8 #define KVM_REQ_KICK 9 -#define KVM_REQ_DEACTIVATE_FPU 10 #define KVM_REQ_EVENT 11 #define KVM_REQ_APF_HALT 12 #define KVM_REQ_STEAL_UPDATE 13
Romove fpu lazy restore logic, using eager restore totally. v5 changes from v4: - remove lazy fpu restore totally, fpu eager restore does not have performance regression and simple the code. v4 changes from v3: - Wrap up some confused code with a clear function lazy_fpu_allowed() - Update fpu while update cr4 too. v3 changes from v2: - Make fpu active explicitly while guest xsave is enabling and non-lazy xstate bit exist. v2 changes from v1: - Expand KVM_XSTATE_LAZY to 64 bits before negating it. Signed-off-by: Xudong Hao <xudong.hao@intel.com> --- arch/x86/kvm/vmx.c | 9 ++------- arch/x86/kvm/x86.c | 8 +------- include/linux/kvm_host.h | 1 - 3 files changed, 3 insertions(+), 15 deletions(-)