diff options
author | Davidlohr Bueso <dave@stgolabs.net> | 2017-09-13 23:08:22 +0300 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2017-09-15 17:57:12 +0300 |
commit | 5e0018b3e39e9b44dbfb380b83026e55d2f65b91 (patch) | |
tree | 952ca6bfcd94135fa0c609f40f54a7a9ef603d04 /virt | |
parent | a0cff57bb2a41cb9cbf13d3203097b4156d8c0ae (diff) | |
download | linux-5e0018b3e39e9b44dbfb380b83026e55d2f65b91.tar.xz |
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>
Diffstat (limited to 'virt')
-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) struct swait_queue_head *wqp; wqp = kvm_arch_vcpu_wq(vcpu); - if (swait_active(wqp)) { + if (swq_has_sleeper(wqp)) { swake_up(wqp); ++vcpu->stat.halt_wakeup; return true; |