Description of problem:
Migration failed from rhel7.3.z to rhel7.4 with e1000e nic card
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1.boot a rhel7.3 guest in source host:
# /usr/libexec/qemu-kvm \
-name rhel7 \
-S -machine pc-i440fx-rhel7.3.0,accel=kvm,usb=off \
-m 2048 \
-cpu Opteron_G4,check \
-realtime mlock=off \
-smp 4,maxcpus=4,sockets=4,cores=1,threads=1 \
-uuid 49a3438a-70a3-4ba8-92ce-3a05e0934608 \
-rtc base=utc,driftfix=slew \
-boot order=c,menu=on,strict=on \
-drive file=/mnt/rhel7.3.qcow2,if=none,id=drive-virtio-disk0,format=qcow2,serial=f65effa5-90a6-47f2-8487-a9f64c95d4f5,cache=none,discard=unmap,werror=stop,rerror=stop,aio=threads \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 \
-netdev tap,id=hostnet2,vhost=on,script=/etc/qemu-ifup \
-device e1000e,netdev=hostnet2,id=virtio-net-pci2,mac=4e:63:28:bc:c1:75,bus=pci.0,addr=0x5,multifunction=off \
-monitor stdio \
-qmp tcp:0:4466,server,nowait -serial unix:/tmp/ttym,server,nowait \
-spice port=5910,addr=0.0.0.0,disable-ticketing,seamless-migration=on \
-device qxl-vga,id=video0,ram_size=134217728,vram_size=67108864,vgamem_mb=16,bus=pci.0,addr=0x2 \
2.boot the guest in destination host with "-incoming tcp:0:5800"
(qemu)migration -d tcp:10.73.72.58:5800
after step3, migration failed and destination qemu-kvm quits with
(qemu) ERROR: Cannot migrate while device properties (subsys/subsys_ven) differqemu-kvm: error while loading state for instance 0x0 of device '0000:00:05.0/e1000e'
qemu-kvm: load of migration failed: Operation not permitted
migration can be finished normally.
Do vmstate check and the result is as following:
# python vmstate-static-checker.py -s rhel7.3.json_7.3 -d rhel7.4.json_7.3
Section "e1000e", Description "e1000e": expected field "intr_state", got "core.rxbuf_min_shift"; skipping rest
Section "rtl8139", Description "rtl8139": expected field "tally_counters", got "tally_counters.TxOk"; skipping rest
OK, can reproduce this, easiest test is:
/usr/libexec/qemu-kvm -machine pc-i440fx-rhel7.3.0,accel=kvm,usb=off -device e1000e,multifunction=off -nographic
Yes, the 'intr_state' field spotted by the checker is the problem.
7.3 (based on 2.6) backported e1000e by pulling in commits:
that went in upstream after 2.6.
However before 2.7.0's release another two commits were added to e1000e:
which removed the need for that field. Since these went in before 2.7.0 was released there's no upstream compatibility problem since it was all new in 2.7.0.
Posted downstream fix.
[RHEL-7.4 qemu-kvm-rhev PATCH 1/1] migcompat/e1000e: Work around 7.3 msi/intr_state field
QE: It probably needs testing on a few different OSs and machine types etc to make sure network traffic is OK after migration.
Fix included in qemu-kvm-rhev-2.8.0-5.el7
Based on comment #8 and #10, set this bug to be verified and continue to track bz1447935.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.