Virtual machines with Windows 2008 and later guest OS fails to power on if certain adapters and controllers are connected as Direct I/O PCI devices
search cancel

Virtual machines with Windows 2008 and later guest OS fails to power on if certain adapters and controllers are connected as Direct I/O PCI devices

book

Article ID: 340164

calendar_today

Updated On:

Products

VMware vCenter Server VMware vSphere ESXi

Issue/Introduction

Virtual machines with Windows 2008 and later guest OS fails to power on if certain adapters and controllers are connected as Direct I/O PCI devices.

If your adapters or controllers are:
  • Intel Ethernet Server Adapter X520-SR2
  • Intel Ethernet Server Adapter X540-SR2
  • Emulex LPe16000
  • HP Smart Array P822 controller
ESXi supports a maximum of 31 vectors per PCI device. If you add any of the preceding adapters or controllers as Direct I/O PCI devices to virtual machines with Windows 2008 and later guests, you cannot power on the virtual machines. When you start the virtual machine, Windows accesses all the message signaled interrupts (MSI/MSIX). When a device requests to support more than 31 interrupt vectors, the virtual machine stops responding and the vmware.log file reports an out of MSI-X vectors message.

This issue also occurs when you install the Windows PF driver for these adapters.

You see an error similar to:

PCIPassthru: 07:00.1 tried to modify MSI-X vectors number 32-32, but maximum supported vector number is 31

During load time, the X520-2 device is marked as unsafe. The driver does not load what appears to be an unsafe device. The virtual machine starts and shows the error message.

Environment

VMware vSphere ESXi 5.1
VMware vCenter Server 5.1.x

Resolution

To resolve this issue, expose fewer vectors to the guest operating system by adding the pciPassthru0.maxMSIXvectors = 31 parameter to the configuration file of a virtual machine. You can either do this using the vSphere Web Client or by editing the virtual machine configuration file.

Perform one of these options:
  • From the vSphere Web Client

    1. Right-click the virtual machine and select Edit Settings.
    2. Click the Options tab and expand Advanced.
    3. Click Edit Configuration.
    4. Click Add Row.
    5. Add the parameter to the new row:
      • In the Name column, add pciPassthru0.maxMSIXvectors.
      • In the Value column, add 31.
    6. Click OK.

  • From a command line

    Note: Modify the .vmx file first, then reinstall the driver.

    1. Open the .vmx file for the virtual machine using a text editor.
    2. Add this entry to the file:

      pciPassthru0.maxMSIXvectors = 31

      Note: If multiple devices are present, add entries for each PCI device.

      pciPassthru0.maxMSIXvectors = xx, pciPassthru1.maxMSIXvectors = xx

    3. Save and close the file.
    4. Reinstall the driver in the virtual machine.