Hi Avi, A new version, with Anthony's suggested savevm version number bump.
Cheers, Mark. From: Mark McLoughlin <[email protected]> Subject: [PATCH] kvm: qemu: virtio-net: migration fixes We were failing to save two important pieces of state: 1) Whether the guest will supply us rx buffers using the new mergeable format; this caused the migrated guest to crash with "virtio-net header not in first element" 2) Whether the tx/rx buffers we exchange with the tap code should include a virtio_net_hdr header; this caused the migrated guest to receive garbage packets because the tap code was stripping away the header and virtio_net was interpreting packet data as the virtio_net header With these fixes a guest using mergeable rx buffers and GSO passes a simple "ping while migrating" test. Bump the savevm version number and refuse to load v1 saves just to be on the safe side. Signed-off-by: Mark McLoughlin <[email protected]> --- qemu/hw/virtio-net.c | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-) diff --git a/qemu/hw/virtio-net.c b/qemu/hw/virtio-net.c index ef8f591..dfe370a 100644 --- a/qemu/hw/virtio-net.c +++ b/qemu/hw/virtio-net.c @@ -360,19 +360,30 @@ static void virtio_net_save(QEMUFile *f, void *opaque) qemu_put_buffer(f, n->mac, 6); qemu_put_be32(f, n->tx_timer_active); + qemu_put_be32(f, n->mergeable_rx_bufs); + +#ifdef TAP_VNET_HDR + qemu_put_be32(f, tap_has_vnet_hdr(n->vc->vlan->first_client)); +#endif } static int virtio_net_load(QEMUFile *f, void *opaque, int version_id) { VirtIONet *n = opaque; - if (version_id != 1) + if (version_id != 2) return -EINVAL; virtio_load(&n->vdev, f); qemu_get_buffer(f, n->mac, 6); n->tx_timer_active = qemu_get_be32(f); + n->mergeable_rx_bufs = qemu_get_be32(f); + +#ifdef TAP_VNET_HDR + if (qemu_get_be32(f)) + tap_using_vnet_hdr(n->vc->vlan->first_client, 1); +#endif if (n->tx_timer_active) { qemu_mod_timer(n->tx_timer, @@ -407,7 +418,7 @@ PCIDevice *virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn) n->tx_timer_active = 0; n->mergeable_rx_bufs = 0; - register_savevm("virtio-net", virtio_net_id++, 1, + register_savevm("virtio-net", virtio_net_id++, 2, virtio_net_save, virtio_net_load, n); return (PCIDevice *)n; -- 1.6.0.6 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
