mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-27 09:02:06 +00:00
KVM: VMX: free vpid when fail to create vcpu
Fix bug of the exception path, free allocated vpid when fail to create vcpu. Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
b83d4a9cfc
commit
cdbecfc398
1 changed files with 12 additions and 4 deletions
|
@ -2333,6 +2333,16 @@ static void allocate_vpid(struct vcpu_vmx *vmx)
|
||||||
spin_unlock(&vmx_vpid_lock);
|
spin_unlock(&vmx_vpid_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void free_vpid(struct vcpu_vmx *vmx)
|
||||||
|
{
|
||||||
|
if (!enable_vpid)
|
||||||
|
return;
|
||||||
|
spin_lock(&vmx_vpid_lock);
|
||||||
|
if (vmx->vpid != 0)
|
||||||
|
__clear_bit(vmx->vpid, vmx_vpid_bitmap);
|
||||||
|
spin_unlock(&vmx_vpid_lock);
|
||||||
|
}
|
||||||
|
|
||||||
static void __vmx_disable_intercept_for_msr(unsigned long *msr_bitmap, u32 msr)
|
static void __vmx_disable_intercept_for_msr(unsigned long *msr_bitmap, u32 msr)
|
||||||
{
|
{
|
||||||
int f = sizeof(unsigned long);
|
int f = sizeof(unsigned long);
|
||||||
|
@ -3916,10 +3926,7 @@ static void vmx_free_vcpu(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||||
|
|
||||||
spin_lock(&vmx_vpid_lock);
|
free_vpid(vmx);
|
||||||
if (vmx->vpid != 0)
|
|
||||||
__clear_bit(vmx->vpid, vmx_vpid_bitmap);
|
|
||||||
spin_unlock(&vmx_vpid_lock);
|
|
||||||
vmx_free_vmcs(vcpu);
|
vmx_free_vmcs(vcpu);
|
||||||
kfree(vmx->guest_msrs);
|
kfree(vmx->guest_msrs);
|
||||||
kvm_vcpu_uninit(vcpu);
|
kvm_vcpu_uninit(vcpu);
|
||||||
|
@ -3981,6 +3988,7 @@ free_msrs:
|
||||||
uninit_vcpu:
|
uninit_vcpu:
|
||||||
kvm_vcpu_uninit(&vmx->vcpu);
|
kvm_vcpu_uninit(&vmx->vcpu);
|
||||||
free_vcpu:
|
free_vcpu:
|
||||||
|
free_vpid(vmx);
|
||||||
kmem_cache_free(kvm_vcpu_cache, vmx);
|
kmem_cache_free(kvm_vcpu_cache, vmx);
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue