KVM: x86/xen: Fix lockdep warning on "recursive" gpc locking
authorDavid Woodhouse <dwmw@amazon.co.uk>
Wed, 11 Jan 2023 18:06:48 +0000 (18:06 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 11 Jan 2023 18:32:21 +0000 (13:32 -0500)
In commit 5ec3289b31 ("KVM: x86/xen: Compatibility fixes for shared runstate
area") we declared it safe to obtain two gfn_to_pfn_cache locks at the same
time:
/*
 * The guest's runstate_info is split across two pages and we
 * need to hold and validate both GPCs simultaneously. We can
 * declare a lock ordering GPC1 > GPC2 because nothing else
 * takes them more than one at a time.
 */

However, we forgot to tell lockdep. Do so, by setting a subclass on the
first lock before taking the second.

Fixes: 5ec3289b31 ("KVM: x86/xen: Compatibility fixes for shared runstate area")
Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Message-Id: <20230111180651.14394-1-dwmw2@infradead.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/xen.c

index 2e29bdc2949ca9fd456eb83993bd200c93c280cf..bfa9809721b5b8275ca733bd6bae8274e1190a20 100644 (file)
@@ -304,8 +304,10 @@ static void kvm_xen_update_runstate_guest(struct kvm_vcpu *v, bool atomic)
                 * The guest's runstate_info is split across two pages and we
                 * need to hold and validate both GPCs simultaneously. We can
                 * declare a lock ordering GPC1 > GPC2 because nothing else
-                * takes them more than one at a time.
+                * takes them more than one at a time. Set a subclass on the
+                * gpc1 lock to make lockdep shut up about it.
                 */
+               lock_set_subclass(&gpc1->lock.dep_map, 1, _THIS_IP_);
                read_lock(&gpc2->lock);
 
                if (!kvm_gpc_check(gpc2, user_len2)) {