summaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorAmit Shah <amit.shah@redhat.com>2010-07-01 14:58:16 +0530
committerAnthony Liguori <aliguori@us.ibm.com>2010-07-13 09:06:58 -0500
commit6b611d3ab820d6e3b30a23ebac69df04ab0105a0 (patch)
treeb782027d4ee284f45ac8f400c61f247fe4faa7a3 /hw
parenta03c54f16eb35df6f8a08255cf44230a194c50bc (diff)
downloadqemu-6b611d3ab820d6e3b30a23ebac69df04ab0105a0.tar.gz
virtio-serial: Check if virtio queue is ready before consuming data
If a virtio-serial port is removed before the guest comes up and initialises the virtqueues, qemu exits with the message Guest moved used index from 0 to 61440 This happens because we try to clear any pending buffers from the virtqueue. Ensure the virtqueue is initialised before calling any virtqueue operations. Signed-off-by: Amit Shah <amit.shah@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/virtio-serial-bus.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
index 26d5841154..077c3183bc 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -139,6 +139,9 @@ static void flush_queued_data(VirtIOSerialPort *port, bool discard)
{
assert(port);
+ if (!virtio_queue_ready(port->ovq)) {
+ return;
+ }
do_flush_queued_data(port, port->ovq, &port->vser->vdev, discard);
}