KVM: X86: Don't take srcu lock in init_rmode_identity_map()
We've already got the slots_lock, so we should be safe. Signed-off-by: Peter Xu <peterx@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
fcd97ad58f
commit
2a5755bb21
@ -3483,7 +3483,7 @@ out:
|
|||||||
static int init_rmode_identity_map(struct kvm *kvm)
|
static int init_rmode_identity_map(struct kvm *kvm)
|
||||||
{
|
{
|
||||||
struct kvm_vmx *kvm_vmx = to_kvm_vmx(kvm);
|
struct kvm_vmx *kvm_vmx = to_kvm_vmx(kvm);
|
||||||
int i, idx, r = 0;
|
int i, r = 0;
|
||||||
kvm_pfn_t identity_map_pfn;
|
kvm_pfn_t identity_map_pfn;
|
||||||
u32 tmp;
|
u32 tmp;
|
||||||
|
|
||||||
@ -3491,7 +3491,7 @@ static int init_rmode_identity_map(struct kvm *kvm)
|
|||||||
mutex_lock(&kvm->slots_lock);
|
mutex_lock(&kvm->slots_lock);
|
||||||
|
|
||||||
if (likely(kvm_vmx->ept_identity_pagetable_done))
|
if (likely(kvm_vmx->ept_identity_pagetable_done))
|
||||||
goto out2;
|
goto out;
|
||||||
|
|
||||||
if (!kvm_vmx->ept_identity_map_addr)
|
if (!kvm_vmx->ept_identity_map_addr)
|
||||||
kvm_vmx->ept_identity_map_addr = VMX_EPT_IDENTITY_PAGETABLE_ADDR;
|
kvm_vmx->ept_identity_map_addr = VMX_EPT_IDENTITY_PAGETABLE_ADDR;
|
||||||
@ -3500,9 +3500,8 @@ static int init_rmode_identity_map(struct kvm *kvm)
|
|||||||
r = __x86_set_memory_region(kvm, IDENTITY_PAGETABLE_PRIVATE_MEMSLOT,
|
r = __x86_set_memory_region(kvm, IDENTITY_PAGETABLE_PRIVATE_MEMSLOT,
|
||||||
kvm_vmx->ept_identity_map_addr, PAGE_SIZE);
|
kvm_vmx->ept_identity_map_addr, PAGE_SIZE);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto out2;
|
goto out;
|
||||||
|
|
||||||
idx = srcu_read_lock(&kvm->srcu);
|
|
||||||
r = kvm_clear_guest_page(kvm, identity_map_pfn, 0, PAGE_SIZE);
|
r = kvm_clear_guest_page(kvm, identity_map_pfn, 0, PAGE_SIZE);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto out;
|
goto out;
|
||||||
@ -3518,9 +3517,6 @@ static int init_rmode_identity_map(struct kvm *kvm)
|
|||||||
kvm_vmx->ept_identity_pagetable_done = true;
|
kvm_vmx->ept_identity_pagetable_done = true;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
srcu_read_unlock(&kvm->srcu, idx);
|
|
||||||
|
|
||||||
out2:
|
|
||||||
mutex_unlock(&kvm->slots_lock);
|
mutex_unlock(&kvm->slots_lock);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user