RTL8168 NIC VFIO not working anymore since QEMU 2.1
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
QEMU |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
After upgrading QEMU from 2.0 to 2.1 (and libiscsi from 1.7.0 to 1.12 as a dependency) my two RTL8168 NICs stopped working.
The NICs do not respond to any command and even the LEDs on the network connection turn off, a few seconds after the VM started.
To get them back running I had to downgrade to 2.0 and restart the system.
Unfortunately, I have no clue what to do or how to debug this problem since there are no specific errors logged.
I tried two different VMs: Debian Wheezy and IPFire (see attachment for further details).
The QEMU 2.1 changelog states "Support for RTL8168 NICs." so there were some major changes done, I guess.
On the IPFire guest the kernel log shows many of these lines:
r8169 0000:00:07.0 green1: rtl_eriar_cond == 1 (loop: 100, delay: 100)
r8169 0000:00:07.0 green1: rtl_phy_reset_cond == 1 (loop: 100, delay: 1)
On the Debian guest there is only:
r8169 0000:00:07.0: firmware: agent loaded rtl_nic/
r8169 0000:00:07.0: lan0: link down
ADDRCONF(
The commandline for IPFire can be seen in the attachment. It is the same for Debian.
There are also the complete kernel logs for the working (2.0) and non-working (2.1) cases.
In general, rtl is a terrible choice for a device assignment NIC in my experience. Intel NICs are much better and worth the extra cost. However, QEMU2.1 did attempt to add a quirk for RTL8168 that allows the Windows driver to work correctly in a guest. In my testing, the Linux driver never made use of this quirk and should have been unaffected. You can test disabling the quirk by editing hw/misc/vfio.c and finding the vfio_probe_ rtl8168_ bar2_window_ quirk() function. Before the first "if (..." add a line that is simply:
return;
rebuild, install, and let us know the results.