* [PATCH v5] kvm/fpu: Enable fully eager restore kvm FPU
@ 2012-11-07 2:01 Xudong Hao
2012-11-20 22:00 ` Marcelo Tosatti
0 siblings, 1 reply; 3+ messages in thread
From: Xudong Hao @ 2012-11-07 2:01 UTC (permalink / raw)
To: avi; +Cc: kvm, Xudong Hao
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))
@@ -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
--
1.7.12.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v5] kvm/fpu: Enable fully eager restore kvm FPU
2012-11-07 2:01 [PATCH v5] kvm/fpu: Enable fully eager restore kvm FPU Xudong Hao
@ 2012-11-20 22:00 ` Marcelo Tosatti
2012-11-21 3:30 ` Hao, Xudong
0 siblings, 1 reply; 3+ messages in thread
From: Marcelo Tosatti @ 2012-11-20 22:00 UTC (permalink / raw)
To: Xudong Hao; +Cc: avi, kvm
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.
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [PATCH v5] kvm/fpu: Enable fully eager restore kvm FPU
2012-11-20 22:00 ` Marcelo Tosatti
@ 2012-11-21 3:30 ` Hao, Xudong
0 siblings, 0 replies; 3+ messages in thread
From: Hao, Xudong @ 2012-11-21 3:30 UTC (permalink / raw)
To: Marcelo Tosatti; +Cc: avi@redhat.com, kvm@vger.kernel.org
> -----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.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-11-21 3:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-07 2:01 [PATCH v5] kvm/fpu: Enable fully eager restore kvm FPU Xudong Hao
2012-11-20 22:00 ` Marcelo Tosatti
2012-11-21 3:30 ` Hao, Xudong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox