|
|
9bac43 |
From d7c69df61c216de014aca9d1eafc94ddb81ce5bb Mon Sep 17 00:00:00 2001
|
|
|
9bac43 |
From: Xiao Wang <jasowang@redhat.com>
|
|
|
9bac43 |
Date: Wed, 29 Nov 2017 07:39:51 +0100
|
|
|
9bac43 |
Subject: [PATCH 17/21] virtio-net: don't touch virtqueue if vm is stopped
|
|
|
9bac43 |
|
|
|
9bac43 |
RH-Author: Xiao Wang <jasowang@redhat.com>
|
|
|
9bac43 |
Message-id: <1511941191-30204-1-git-send-email-jasowang@redhat.com>
|
|
|
9bac43 |
Patchwork-id: 77949
|
|
|
9bac43 |
O-Subject: [RHV7.5 qemu-kvm-rhev PATCH] virtio-net: don't touch virtqueue if vm is stopped
|
|
|
9bac43 |
Bugzilla: 1506151
|
|
|
9bac43 |
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Pankaj Gupta <pagupta@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: wexu@redhat.com
|
|
|
9bac43 |
|
|
|
9bac43 |
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1506151
|
|
|
9bac43 |
Brew Build: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=14645237
|
|
|
9bac43 |
Test status: Tested by myself
|
|
|
9bac43 |
|
|
|
9bac43 |
Guest state should not be touched if VM is stopped, unfortunately we
|
|
|
9bac43 |
didn't check running state and tried to drain tx queue unconditionally
|
|
|
9bac43 |
in virtio_net_set_status(). A crash was then noticed as a migration
|
|
|
9bac43 |
destination when user type quit after virtqueue state is loaded but
|
|
|
9bac43 |
before region cache is initialized. In this case,
|
|
|
9bac43 |
virtio_net_drop_tx_queue_data() tries to access the uninitialized
|
|
|
9bac43 |
region cache.
|
|
|
9bac43 |
|
|
|
9bac43 |
Fix this by only dropping tx queue data when vm is running.
|
|
|
9bac43 |
|
|
|
9bac43 |
Fixes: 283e2c2adcb80 ("net: virtio-net discards TX data after link down")
|
|
|
9bac43 |
Cc: Yuri Benditovich <yuri.benditovich@daynix.com>
|
|
|
9bac43 |
Cc: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
9bac43 |
Cc: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9bac43 |
Cc: Michael S. Tsirkin <mst@redhat.com>
|
|
|
9bac43 |
Cc: qemu-stable@nongnu.org
|
|
|
9bac43 |
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9bac43 |
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
|
|
9bac43 |
(cherry picked from commit 70e53e6e4da3db4b2c31981191753a7e974936d0)
|
|
|
9bac43 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
---
|
|
|
9bac43 |
hw/net/virtio-net.c | 3 ++-
|
|
|
9bac43 |
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
9bac43 |
|
|
|
9bac43 |
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
|
|
|
9bac43 |
index 148071a..fbc5e1b 100644
|
|
|
9bac43 |
--- a/hw/net/virtio-net.c
|
|
|
9bac43 |
+++ b/hw/net/virtio-net.c
|
|
|
9bac43 |
@@ -288,7 +288,8 @@ static void virtio_net_set_status(struct VirtIODevice *vdev, uint8_t status)
|
|
|
9bac43 |
qemu_bh_cancel(q->tx_bh);
|
|
|
9bac43 |
}
|
|
|
9bac43 |
if ((n->status & VIRTIO_NET_S_LINK_UP) == 0 &&
|
|
|
9bac43 |
- (queue_status & VIRTIO_CONFIG_S_DRIVER_OK)) {
|
|
|
9bac43 |
+ (queue_status & VIRTIO_CONFIG_S_DRIVER_OK) &&
|
|
|
9bac43 |
+ vdev->vm_running) {
|
|
|
9bac43 |
/* if tx is waiting we are likely have some packets in tx queue
|
|
|
9bac43 |
* and disabled notification */
|
|
|
9bac43 |
q->tx_waiting = 0;
|
|
|
9bac43 |
--
|
|
|
9bac43 |
1.8.3.1
|
|
|
9bac43 |
|