Public bug reported: I am running QEMU 2.11 (from upstream source, not Red Hat package) on stock RHEL 6 and RHEL 7 kernels. Only the RHEL 7 kernel supports VIRTIO_F_VERSION_1 in its vhost-net driver.
When migrating a guest using vhost-net from the RHEL 6 host to RHEL 7, the PCI config is rejected by QEMU on the target machine. A simple test case: 1. On the RHEL 7 host, prepare for an incoming migration: rhel7# qemu-system-x86_64 -S -accel kvm -nographic -monitor stdio -nodefaults -netdev tap,id=net0,vhost=on,script=no,downscript=no -device virtio-net-pci,netdev=net0,mac=54:52:00:ff:ff:ff -incoming tcp:0.0.0.0:12345 2. On the RHEL 6 host, start a guest and migrate it to the RHEL 7 host: rhel6# qemu-system-x86_64 -S -accel kvm -nographic -monitor stdio -nodefaults -netdev tap,id=net0,vhost=on,script=no,downscript=no -device virtio-net-pci,netdev=net0,mac=54:52:00:ff:ff:ff QEMU 2.11.0 monitor - type 'help' for more information (qemu) migrate tcp:rhel7:12345 The RHEL 7 QEMU errors out: qemu-system-x86_64: get_pci_config_device: Bad config data: i=0x20 read: 0 device: c cmask: ff wmask: 0 w1cmask:0 qemu-system-x86_64: Failed to load PCIDevice:config qemu-system-x86_64: Failed to load virtio-net:virtio qemu-system-x86_64: error while loading state for instance 0x0 of device '0000:00:02.0/virtio-net' qemu-system-x86_64: load of migration failed: Invalid argument If I start the source QEMU with vhost=off, or the target QEMU with disable-modern=true, the migration is successful. My hunch here is that the target QEMU prepares the PCI device to support VIRTIO_F_VERSION_1, as that's available in the kernel there, but then fails to (or does not know to) disable this during the migration. ** Affects: qemu Importance: Undecided Status: New -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1745895 Title: Unable to migrate vhost-net to virtio-1.0-capable kernel Status in QEMU: New Bug description: I am running QEMU 2.11 (from upstream source, not Red Hat package) on stock RHEL 6 and RHEL 7 kernels. Only the RHEL 7 kernel supports VIRTIO_F_VERSION_1 in its vhost-net driver. When migrating a guest using vhost-net from the RHEL 6 host to RHEL 7, the PCI config is rejected by QEMU on the target machine. A simple test case: 1. On the RHEL 7 host, prepare for an incoming migration: rhel7# qemu-system-x86_64 -S -accel kvm -nographic -monitor stdio -nodefaults -netdev tap,id=net0,vhost=on,script=no,downscript=no -device virtio-net-pci,netdev=net0,mac=54:52:00:ff:ff:ff -incoming tcp:0.0.0.0:12345 2. On the RHEL 6 host, start a guest and migrate it to the RHEL 7 host: rhel6# qemu-system-x86_64 -S -accel kvm -nographic -monitor stdio -nodefaults -netdev tap,id=net0,vhost=on,script=no,downscript=no -device virtio-net-pci,netdev=net0,mac=54:52:00:ff:ff:ff QEMU 2.11.0 monitor - type 'help' for more information (qemu) migrate tcp:rhel7:12345 The RHEL 7 QEMU errors out: qemu-system-x86_64: get_pci_config_device: Bad config data: i=0x20 read: 0 device: c cmask: ff wmask: 0 w1cmask:0 qemu-system-x86_64: Failed to load PCIDevice:config qemu-system-x86_64: Failed to load virtio-net:virtio qemu-system-x86_64: error while loading state for instance 0x0 of device '0000:00:02.0/virtio-net' qemu-system-x86_64: load of migration failed: Invalid argument If I start the source QEMU with vhost=off, or the target QEMU with disable-modern=true, the migration is successful. My hunch here is that the target QEMU prepares the PCI device to support VIRTIO_F_VERSION_1, as that's available in the kernel there, but then fails to (or does not know to) disable this during the migration. To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1745895/+subscriptions