Messages in this thread | | | Subject | Re: [PATCH v3 1/2] KVM: nVMX: enhance allocate/free_vpid to handle shadow vpid | From | Wanpeng Li <> | Date | Wed, 16 Sep 2015 14:51:19 +0800 |
| |
On 9/16/15 2:42 PM, Jan Kiszka wrote: > On 2015-09-16 05:51, Wanpeng Li wrote: >> Enhance allocate/free_vid to handle shadow vpid. >> >> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com> >> --- >> arch/x86/kvm/vmx.c | 24 +++++++++++------------- >> 1 file changed, 11 insertions(+), 13 deletions(-) >> >> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c >> index 9ff6a3f..4956081 100644 >> --- a/arch/x86/kvm/vmx.c >> +++ b/arch/x86/kvm/vmx.c >> @@ -4155,29 +4155,27 @@ static int alloc_identity_pagetable(struct kvm *kvm) >> return r; >> } >> >> -static void allocate_vpid(struct vcpu_vmx *vmx) >> +static int allocate_vpid(void) >> { >> - int vpid; >> + int vpid = 0; > Initialization is not pointless with the current code. > >> >> - vmx->vpid = 0; >> if (!enable_vpid) >> - return; >> + return 0; >> spin_lock(&vmx_vpid_lock); >> vpid = find_first_zero_bit(vmx_vpid_bitmap, VMX_NR_VPIDS); >> - if (vpid < VMX_NR_VPIDS) { >> - vmx->vpid = vpid; >> + if (vpid < VMX_NR_VPIDS) >> __set_bit(vpid, vmx_vpid_bitmap); >> - } >> spin_unlock(&vmx_vpid_lock); >> + return vpid; > You should return 0 also if vpid == VMX_NR_VPIDS.
Agreed.
> >> } >> >> -static void free_vpid(struct vcpu_vmx *vmx) >> +static void free_vpid(int vpid) >> { >> if (!enable_vpid) > You could already test for vpid == 0 here... > >> return; >> spin_lock(&vmx_vpid_lock); >> - if (vmx->vpid != 0) >> - __clear_bit(vmx->vpid, vmx_vpid_bitmap); >> + if (vpid != 0) > ...then you could skip this.
Agreed.
> >> + __clear_bit(vpid, vmx_vpid_bitmap); >> spin_unlock(&vmx_vpid_lock); >> } >> >> @@ -8482,7 +8480,7 @@ static void vmx_free_vcpu(struct kvm_vcpu *vcpu) >> >> if (enable_pml) >> vmx_disable_pml(vmx); >> - free_vpid(vmx); >> + free_vpid(vmx->vpid); >> leave_guest_mode(vcpu); >> vmx_load_vmcs01(vcpu); >> free_nested(vmx); >> @@ -8501,7 +8499,7 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *kvm, unsigned int id) >> if (!vmx) >> return ERR_PTR(-ENOMEM); >> >> - allocate_vpid(vmx); >> + vmx->vpid = allocate_vpid(); >> >> err = kvm_vcpu_init(&vmx->vcpu, kvm, id); >> if (err) >> @@ -8577,7 +8575,7 @@ free_msrs: >> uninit_vcpu: >> kvm_vcpu_uninit(&vmx->vcpu); >> free_vcpu: >> - free_vpid(vmx); >> + free_vpid(vmx->vpid); >> kmem_cache_free(kvm_vcpu_cache, vmx); >> return ERR_PTR(err); >> } >> > Yes, this is what I had in mind.
Thanks for your review. :-)
Regards, Wanpeng Li
| |