• David Woodhouse's avatar
    KVM: x86: switch pvclock_gtod_sync_lock to a raw spinlock · 8228c77d
    David Woodhouse authored
    On the preemption path when updating a Xen guest's runstate times, this
    lock is taken inside the scheduler rq->lock, which is a raw spinlock.
    This was shown in a lockdep warning:
    
    [   89.138354] =============================
    [   89.138356] [ BUG: Invalid wait context ]
    [   89.138358] 5.15.0-rc5+ #834 Tainted: G S        I E
    [   89.138360] -----------------------------
    [   89.138361] xen_shinfo_test/2575 is trying to lock:
    [   89.138363] ffffa34a0364efd8 (&kvm->arch.pvclock_gtod_sync_lock){....}-{3:3}, at: get_kvmclock_ns+0x1f/0x130 [kvm]
    [   89.138442] other info that might help us debug this:
    [   89.138444] context-{5:5}
    [   89.138445] 4 locks held by xen_shinfo_test/2575:
    [   89.138447]  #0: ffff972bdc3b8108 (&vcpu->mutex){+.+.}-{4:4}, at: kvm_vcpu_ioctl+0x77/0x6f0 [kvm]
    [   89.138483]  #1: ffffa34a03662e90 (&kvm->srcu){....}-{0:0}, at: kvm_arch_vcpu_ioctl_run+0xdc/0x8b0 [kvm]
    [   89.138526]  #2: ffff97331fdbac98 (&rq->__lock){-.-.}-{2:2}, at: __schedule+0xff/0xbd0
    [   89.138534]  #3: ffffa34a03662e90 (&kvm->srcu){....}-{0:0}, at: kvm_arch_vcpu_put+0x26/0x170 [kvm]
    ...
    [   89.138695]  get_kvmclock_ns+0x1f/0x130 [kvm]
    [   89.138734]  kvm_xen_update_runstate+0x14/0x90 [kvm]
    [   89.138783]  kvm_xen_update_runstate_guest+0x15/0xd0 [kvm]
    [   89.138830]  kvm_arch_vcpu_put+0xe6/0x170 [kvm]
    [   89.138870]  kvm_sched_out+0x2f/0x40 [kvm]
    [   89.138900]  __schedule+0x5de/0xbd0
    
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+b282b65c2c68492df769@syzkaller.appspotmail.com
    Fixes: 30b5c851 ("KVM: x86/xen: Add support for vCPU runstate information")
    Signed-off-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
    Message-Id: <1b02a06421c17993df337493a68ba923f3bd5c0f.camel@infradead.org>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    8228c77d
x86.c 324 KB