A network virtual device cannot load on Windows 2008. The network card is: Intel Corporation 82576 Gigabit Network Connection
Getting an error of - "The device cannot find enough free resources that it can use (Code 12)."
System information:
- CPU - Intel(R) Xeon(R) CPU (2 sockets of quad core)
- Host OS - RHEL 5.4 - Linux 2.6.18-160.el5 #1 SMP Mon Jul 27 17:28:29 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
- The issue happens also on a newer kernel - 2.6.30.2
- Guest OS - Windows 2008 - Windows Server(R) Enterprise SP1 - 32 bit
- KVM info
filename: /lib/modules/2.6.18-160.el5/weak-updates/kmod-kvm/kvm.ko
version: kvm-83-101.el5
srcversion: 45FED1544C648ADF0C59E7E
vermagic: 2.6.18-159.el5 SMP mod_unload gcc-4.1
- QEMU info - QEMU PC emulator version 0.12.1 (qemu-kvm-0.12.1), Copyright (c) 2003-2008 Fabrice Bellard
Steps to reproduce:
(1) Put a network card -- Intel Corporation 82576 Gigabit Network Connection -- into the system
(2) Load igb driver with flag to load a virtual function as well.
insmod ./igb.ko max_vfs=2,2
(3) upload the interface
ifconfig ethX up
(4) Ensure that a VF exists in PCI enumeration
lspci | grep Eth
You should see a new virtual device like: 01:10.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
(5) Load the guest VM with this VF
qemu-system-x86_64 win2008.qcow2 -m 2048 -pcidevice host=01:10.0 -net none &
(6) Install the latest Intel drivers for Win2008
Install application can be found here: http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=12197&lang=eng
(7) A Network device will appear in Device manager. Intel(R)Virtual Network Connection. But wirth yellow bang.
Notes:
When loading RHEL5.4 as a guest OS with the same flow, the device works as expected.
The problem still exists when using the -no-kvm-irqchip or -no-kvm-pit switch.
When using -no-kvm switch, the device is not seen in Windows device manager
Boot the guest with -cpu qemu64,model=13 (or if you were on an AMD host -cpu qemu64,family=16). The problem is not with device assignment, but with 32bit Windows only enabling MSI support for minimum processor revisions. Since virtual functions only support MSI/X, they have no legacy interrupt fallback, so it's necessary to specify a newer vCPU model.