VirtualBox

Changeset 71155 in vbox


Ignore:
Timestamp:
Feb 28, 2018 2:56:07 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
121050
Message:

Devices/Bus/ICH9: Don't meddle with the IRQ value when traversing bridges if the originating device has MSI/MSI-X enabled. The IRQ has a completely different meaning here (the MSI/MSI-X vector to use) and is not subject to the pin routing for bridges. MSI/MSI-X interrupt handling code paths should really be separated properly to avoid such confusing issues but for a safe backport this is the immediate fix for now

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Bus/DevPciIch9.cpp

    r70182 r71155  
    152152
    153153    AssertMsgReturnVoid(pBus->iBus == 0, ("This is not the host pci bus iBus=%d\n", pBus->iBus));
    154     ich9pciSetIrqInternal(DEVPCIBUS_2_DEVPCIROOT(pBus), uDevFnBridge, pPciDev, iIrqPinBridge, iLevel, uTagSrc);
     154
     155    /*
     156     * For MSI/MSI-X enabled devices the iIrq doesn't denote the pin but rather a vector which is completely
     157     * orthogonal to the pin based approach. The vector is not subject to the pin based routing with PCI bridges.
     158     */
     159    int iIrqPinVector = iIrqPinBridge;
     160    if (   MsiIsEnabled(pPciDev)
     161        || MsixIsEnabled(pPciDev))
     162        iIrqPinVector = iIrq;
     163    ich9pciSetIrqInternal(DEVPCIBUS_2_DEVPCIROOT(pBus), uDevFnBridge, pPciDev, iIrqPinVector, iLevel, uTagSrc);
    155164}
    156165
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette