diff options
author | Stefan Hajnoczi | 2016-11-21 12:09:58 +0100 |
---|---|---|
committer | Stefan Hajnoczi | 2016-11-21 12:09:58 +0100 |
commit | c36ed06e9159fa484b711dfdd27ec64d7ac3d17a (patch) | |
tree | e87010bcb634dd0ed1f2abb8123e044d308e4a71 /hw/virtio/virtio-crypto.c | |
parent | Merge remote-tracking branch 'public/tags/tracing-pull-request' into staging (diff) | |
parent | acpi: Use apic_id_limit when calculating legacy ACPI table size (diff) | |
download | qemu-c36ed06e9159fa484b711dfdd27ec64d7ac3d17a.tar.gz qemu-c36ed06e9159fa484b711dfdd27ec64d7ac3d17a.tar.xz qemu-c36ed06e9159fa484b711dfdd27ec64d7ac3d17a.zip |
Merge remote-tracking branch 'mst/tags/for_upstream' into staging
virtio, vhost, pc: fixes
Most notably this fixes a regression with vhost introduced by the pull before
last.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
# gpg: Signature made Fri 18 Nov 2016 03:51:55 PM GMT
# gpg: using RSA key 0x281F0DB8D28D5469
# gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>"
# gpg: aka "Michael S. Tsirkin <mst@redhat.com>"
# Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67
# Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469
* mst/tags/for_upstream:
acpi: Use apic_id_limit when calculating legacy ACPI table size
ipmi: fix qemu crash while migrating with ipmi
ivshmem: Fix 64 bit memory bar configuration
virtio: set ISR on dataplane notifications
virtio: access ISR atomically
virtio: introduce grab/release_ioeventfd to fix vhost
virtio-crypto: fix virtio_queue_set_notification() race
Message-id: 1479484366-7977-1-git-send-email-mst@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'hw/virtio/virtio-crypto.c')
-rw-r--r-- | hw/virtio/virtio-crypto.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c index 32938433b7..847dc9dafd 100644 --- a/hw/virtio/virtio-crypto.c +++ b/hw/virtio/virtio-crypto.c @@ -692,8 +692,17 @@ static void virtio_crypto_dataq_bh(void *opaque) return; } - virtio_crypto_handle_dataq(vdev, q->dataq); - virtio_queue_set_notification(q->dataq, 1); + for (;;) { + virtio_crypto_handle_dataq(vdev, q->dataq); + virtio_queue_set_notification(q->dataq, 1); + + /* Are we done or did the guest add more buffers? */ + if (virtio_queue_empty(q->dataq)) { + break; + } + + virtio_queue_set_notification(q->dataq, 0); + } } static void |