KVM: X86: Drop x86_set_memory_region()
authorPeter Xu <peterx@redhat.com>
Thu, 9 Jan 2020 14:57:16 +0000 (09:57 -0500)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 27 Jan 2020 18:59:53 +0000 (19:59 +0100)
The helper x86_set_memory_region() is only used in vmx_set_tss_addr()
and kvm_arch_destroy_vm().  Push the lock upper in both cases.  With
that, drop x86_set_memory_region().

This prepares to allow __x86_set_memory_region() to return a HVA
mapped, because the HVA will need to be protected by the lock too even
after __x86_set_memory_region() returns.

Signed-off-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/vmx/vmx.c
arch/x86/kvm/x86.c

index 49751cb..69e31db 100644 (file)
@@ -1627,7 +1627,6 @@ void __kvm_request_immediate_exit(struct kvm_vcpu *vcpu);
 int kvm_is_in_guest(void);
 
 int __x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa, u32 size);
-int x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa, u32 size);
 bool kvm_vcpu_is_reset_bsp(struct kvm_vcpu *vcpu);
 bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu);
 
index 1d486e8..5087bd7 100644 (file)
@@ -4491,8 +4491,11 @@ static int vmx_set_tss_addr(struct kvm *kvm, unsigned int addr)
        if (enable_unrestricted_guest)
                return 0;
 
-       ret = x86_set_memory_region(kvm, TSS_PRIVATE_MEMSLOT, addr,
-                                   PAGE_SIZE * 3);
+       mutex_lock(&kvm->slots_lock);
+       ret = __x86_set_memory_region(kvm, TSS_PRIVATE_MEMSLOT, addr,
+                                     PAGE_SIZE * 3);
+       mutex_unlock(&kvm->slots_lock);
+
        if (ret)
                return ret;
        to_kvm_vmx(kvm)->tss_addr = addr;
index ec8f05d..48cd4e1 100644 (file)
@@ -9732,18 +9732,6 @@ int __x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa, u32 size)
 }
 EXPORT_SYMBOL_GPL(__x86_set_memory_region);
 
-int x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa, u32 size)
-{
-       int r;
-
-       mutex_lock(&kvm->slots_lock);
-       r = __x86_set_memory_region(kvm, id, gpa, size);
-       mutex_unlock(&kvm->slots_lock);
-
-       return r;
-}
-EXPORT_SYMBOL_GPL(x86_set_memory_region);
-
 void kvm_arch_pre_destroy_vm(struct kvm *kvm)
 {
        kvm_mmu_pre_destroy_vm(kvm);
@@ -9757,9 +9745,13 @@ void kvm_arch_destroy_vm(struct kvm *kvm)
                 * unless the the memory map has changed due to process exit
                 * or fd copying.
                 */
-               x86_set_memory_region(kvm, APIC_ACCESS_PAGE_PRIVATE_MEMSLOT, 0, 0);
-               x86_set_memory_region(kvm, IDENTITY_PAGETABLE_PRIVATE_MEMSLOT, 0, 0);
-               x86_set_memory_region(kvm, TSS_PRIVATE_MEMSLOT, 0, 0);
+               mutex_lock(&kvm->slots_lock);
+               __x86_set_memory_region(kvm, APIC_ACCESS_PAGE_PRIVATE_MEMSLOT,
+                                       0, 0);
+               __x86_set_memory_region(kvm, IDENTITY_PAGETABLE_PRIVATE_MEMSLOT,
+                                       0, 0);
+               __x86_set_memory_region(kvm, TSS_PRIVATE_MEMSLOT, 0, 0);
+               mutex_unlock(&kvm->slots_lock);
        }
        if (kvm_x86_ops->vm_destroy)
                kvm_x86_ops->vm_destroy(kvm);