Commit 8228c77
KVM: x86: switch pvclock_gtod_sync_lock to a raw spinlock
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: 30b5c85 ("KVM: x86/xen: Add support for vCPU runstate information")
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Message-Id: <1b02a06421c17993df337493a68ba923f3bd5c0f.camel@infradead.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>1 parent fa13843 commit 8228c77
2 files changed
Lines changed: 15 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1097 | 1097 | | |
1098 | 1098 | | |
1099 | 1099 | | |
1100 | | - | |
| 1100 | + | |
1101 | 1101 | | |
1102 | 1102 | | |
1103 | 1103 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2542 | 2542 | | |
2543 | 2543 | | |
2544 | 2544 | | |
2545 | | - | |
| 2545 | + | |
2546 | 2546 | | |
2547 | 2547 | | |
2548 | 2548 | | |
2549 | 2549 | | |
2550 | 2550 | | |
2551 | 2551 | | |
2552 | 2552 | | |
2553 | | - | |
| 2553 | + | |
2554 | 2554 | | |
2555 | 2555 | | |
2556 | 2556 | | |
| |||
2780 | 2780 | | |
2781 | 2781 | | |
2782 | 2782 | | |
2783 | | - | |
| 2783 | + | |
2784 | 2784 | | |
2785 | | - | |
| 2785 | + | |
2786 | 2786 | | |
2787 | 2787 | | |
2788 | 2788 | | |
| |||
2800 | 2800 | | |
2801 | 2801 | | |
2802 | 2802 | | |
2803 | | - | |
| 2803 | + | |
2804 | 2804 | | |
2805 | | - | |
| 2805 | + | |
2806 | 2806 | | |
2807 | 2807 | | |
2808 | 2808 | | |
2809 | 2809 | | |
2810 | 2810 | | |
2811 | | - | |
| 2811 | + | |
2812 | 2812 | | |
2813 | 2813 | | |
2814 | 2814 | | |
| |||
2902 | 2902 | | |
2903 | 2903 | | |
2904 | 2904 | | |
2905 | | - | |
| 2905 | + | |
2906 | 2906 | | |
2907 | 2907 | | |
2908 | 2908 | | |
2909 | 2909 | | |
2910 | 2910 | | |
2911 | | - | |
| 2911 | + | |
2912 | 2912 | | |
2913 | 2913 | | |
2914 | 2914 | | |
| |||
6100 | 6100 | | |
6101 | 6101 | | |
6102 | 6102 | | |
6103 | | - | |
| 6103 | + | |
6104 | 6104 | | |
6105 | 6105 | | |
6106 | 6106 | | |
6107 | 6107 | | |
6108 | 6108 | | |
6109 | | - | |
| 6109 | + | |
6110 | 6110 | | |
6111 | 6111 | | |
6112 | 6112 | | |
| |||
8139 | 8139 | | |
8140 | 8140 | | |
8141 | 8141 | | |
8142 | | - | |
| 8142 | + | |
8143 | 8143 | | |
8144 | | - | |
| 8144 | + | |
8145 | 8145 | | |
8146 | 8146 | | |
8147 | 8147 | | |
| |||
11182 | 11182 | | |
11183 | 11183 | | |
11184 | 11184 | | |
11185 | | - | |
| 11185 | + | |
11186 | 11186 | | |
11187 | 11187 | | |
11188 | 11188 | | |
| |||
0 commit comments