]> git.proxmox.com Git - pve-qemu-kvm.git/commitdiff
apply patches/hotfix for virtio-net migration problem in 2.1.1
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 16 Sep 2014 10:52:43 +0000 (12:52 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 16 Sep 2014 10:52:43 +0000 (12:52 +0200)
debian/patches/revert_virtio_dont_call_device_on_not_vm_running.patch [new file with mode: 0644]
debian/patches/series
debian/patches/virtio-net_drop_assert_on_vm_stop.patch [new file with mode: 0644]

diff --git a/debian/patches/revert_virtio_dont_call_device_on_not_vm_running.patch b/debian/patches/revert_virtio_dont_call_device_on_not_vm_running.patch
new file mode 100644 (file)
index 0000000..d27fd49
--- /dev/null
@@ -0,0 +1,55 @@
+Date: Thu, 11 Sep 2014 19:18:37 +0300\r
+From: "Michael S. Tsirkin" <mst@redhat.com>\r
+To: <qemu-devel@nongnu.org>\r
+\r
+This reverts commit a1bc7b827e422e1ff065640d8ec5347c4aadfcd8.\r
+    virtio: don't call device on !vm_running\r
+It turns out that virtio net assumes that vm_running\r
+is updated before device status callback in many places,\r
+so this change leads to asserts.\r
+Previous commit fixes the root issue that motivated\r
+a1bc7b827e422e1ff065640d8ec5347c4aadfcd8 differently,\r
+so there's no longer a need for this change.\r
+\r
+In the future, we might be able to drop checking vm_running\r
+completely, and check vm state directly.\r
+\r
+Reported-by: Dietmar Maurer <dietmar@proxmox.com>\r
+Cc: qemu-stable@nongnu.org\r
+Cc: Jason Wang <jasowang@redhat.com>\r
+Signed-off-by: Michael S. Tsirkin <mst@redhat.com>\r
+---\r
+ hw/virtio/virtio.c | 9 +--------\r
+ 1 file changed, 1 insertion(+), 8 deletions(-)\r
+\r
+diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c\r
+index ac22238..5c98180 100644\r
+--- a/hw/virtio/virtio.c\r
++++ b/hw/virtio/virtio.c\r
+@@ -1108,10 +1108,7 @@ static void virtio_vmstate_change(void *opaque, int running, RunState state)\r
+     BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));\r
+     VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);\r
+     bool backend_run = running && (vdev->status & VIRTIO_CONFIG_S_DRIVER_OK);\r
+-\r
+-    if (running) {\r
+-        vdev->vm_running = running;\r
+-    }\r
++    vdev->vm_running = running;\r
\r
+     if (backend_run) {\r
+         virtio_set_status(vdev, vdev->status);\r
+@@ -1124,10 +1121,6 @@ static void virtio_vmstate_change(void *opaque, int running, RunState state)\r
+     if (!backend_run) {\r
+         virtio_set_status(vdev, vdev->status);\r
+     }\r
+-\r
+-    if (!running) {\r
+-        vdev->vm_running = running;\r
+-    }\r
+ }\r
\r
+ void virtio_init(VirtIODevice *vdev, const char *name,\r
+-- \r
+MST\r
+\r
+\r
index 1381414b6fabbbfea5a3396574c4cfbc7e979df1..a0868a1fb6511e2e0ef04f03a99f84832c66c396 100644 (file)
@@ -27,3 +27,5 @@ disable-efi-enable-pxe-roms.patch
 backup-vma-allow-empty-backups.patch
 glusterfs-daemonize.patch
 gluster-backupserver.patch
+virtio-net_drop_assert_on_vm_stop.patch
+revert_virtio_dont_call_device_on_not_vm_running.patch
diff --git a/debian/patches/virtio-net_drop_assert_on_vm_stop.patch b/debian/patches/virtio-net_drop_assert_on_vm_stop.patch
new file mode 100644 (file)
index 0000000..fd22c84
--- /dev/null
@@ -0,0 +1,33 @@
+Date: Thu, 11 Sep 2014 19:18:34 +0300\r
+From: "Michael S. Tsirkin" <mst@redhat.com>\r
+To: <qemu-devel@nongnu.org>\r
+\r
+On vm stop, vm_running state set to stopped\r
+before device is notified, so callbacks can get envoked with\r
+vm_running = false; and this is not an error.\r
+\r
+Cc: qemu-stable@nongnu.org\r
+Cc: Jason Wang <jasowang@redhat.com>\r
+Signed-off-by: Michael S. Tsirkin <mst@redhat.com>\r
+---\r
+ hw/net/virtio-net.c | 2 --\r
+ 1 file changed, 2 deletions(-)\r
+\r
+diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c\r
+index 826a2a5..2040eac 100644\r
+--- a/hw/net/virtio-net.c\r
++++ b/hw/net/virtio-net.c\r
+@@ -1125,8 +1125,6 @@ static int32_t virtio_net_flush_tx(VirtIONetQueue *q)\r
+         return num_packets;\r
+     }\r
\r
+-    assert(vdev->vm_running);\r
+-\r
+     if (q->async_tx.elem.out_num) {\r
+         virtio_queue_set_notification(q->tx_vq, 0);\r
+         return num_packets;\r
+-- \r
+MST\r
+\r
+\r
+\r