]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
KVM: Assert slots_lock is held when setting memory regions
authorSean Christopherson <seanjc@google.com>
Sat, 11 Jan 2025 00:20:19 +0000 (16:20 -0800)
committerSean Christopherson <seanjc@google.com>
Wed, 15 Jan 2025 01:36:15 +0000 (17:36 -0800)
Add proper lockdep assertions in __kvm_set_memory_region() and
__x86_set_memory_region() instead of relying comments.

Opportunistically delete __kvm_set_memory_region()'s entire function
comment as the API doesn't allocate memory or select a gfn, and the
"mostly for framebuffers" comment hasn't been true for a very long time.

Cc: Tao Su <tao1.su@linux.intel.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Acked-by: Christoph Schlameuss <schlameuss@linux.ibm.com>
Link: https://lore.kernel.org/r/20250111002022.1230573-3-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/x86.c
virt/kvm/kvm_main.c

index 1b04092ec76aa4be07bad196eef7848f1396d638..a861287a67bd46ef9ab8f5d73c470801a9ed4b62 100644 (file)
@@ -12793,7 +12793,8 @@ void __user * __x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa,
        struct kvm_memslots *slots = kvm_memslots(kvm);
        struct kvm_memory_slot *slot;
 
-       /* Called with kvm->slots_lock held.  */
+       lockdep_assert_held(&kvm->slots_lock);
+
        if (WARN_ON(id >= KVM_MEM_SLOTS_NUM))
                return ERR_PTR_USR(-EINVAL);
 
index eb3d0a3850771303e7abbe7680a75b0c9ac09ca3..7d25b50cb298a8c64d8a2957a0e4377db5c059c5 100644 (file)
@@ -1926,14 +1926,6 @@ static bool kvm_check_memslot_overlap(struct kvm_memslots *slots, int id,
        return false;
 }
 
-/*
- * Allocate some memory and give it an address in the guest physical address
- * space.
- *
- * Discontiguous memory is allowed, mostly for framebuffers.
- *
- * Must be called holding kvm->slots_lock for write.
- */
 int __kvm_set_memory_region(struct kvm *kvm,
                            const struct kvm_userspace_memory_region2 *mem)
 {
@@ -1945,6 +1937,8 @@ int __kvm_set_memory_region(struct kvm *kvm,
        int as_id, id;
        int r;
 
+       lockdep_assert_held(&kvm->slots_lock);
+
        r = check_memory_region_flags(kvm, mem);
        if (r)
                return r;