diff options
author | Davidlohr Bueso <dave@stgolabs.net> | 2017-09-13 16:08:22 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2017-09-15 10:57:12 -0400 |
commit | 5e0018b3e39e9b44dbfb380b83026e55d2f65b91 (patch) | |
tree | 952ca6bfcd94135fa0c609f40f54a7a9ef603d04 | |
parent | a0cff57bb2a41cb9cbf13d3203097b4156d8c0ae (diff) |
kvm: Serialize wq active checks in kvm_vcpu_wake_up()
This is a generic call and can be suceptible to races
in reading the wq task_list while another task is adding
itself to the list. Add a full barrier by using the
swq_has_sleeper() helper.
Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r-- | virt/kvm/kvm_main.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 2d7df5cc955b..9deb5a245b83 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -2187,7 +2187,7 @@ bool kvm_vcpu_wake_up(struct kvm_vcpu *vcpu) | |||
2187 | struct swait_queue_head *wqp; | 2187 | struct swait_queue_head *wqp; |
2188 | 2188 | ||
2189 | wqp = kvm_arch_vcpu_wq(vcpu); | 2189 | wqp = kvm_arch_vcpu_wq(vcpu); |
2190 | if (swait_active(wqp)) { | 2190 | if (swq_has_sleeper(wqp)) { |
2191 | swake_up(wqp); | 2191 | swake_up(wqp); |
2192 | ++vcpu->stat.halt_wakeup; | 2192 | ++vcpu->stat.halt_wakeup; |
2193 | return true; | 2193 | return true; |