I tested my above assumption and it seems it is the root of the problem.
The nova.pci.devspec.WhitelistPciAddress.match()[1] is called for every PCI device on the host at startup, including the ones with 32bit domain. And this reuses the nova.pci.devspec.PciAddressSpec._set_pci_dev_info() utility with maxval=0xFFFF for domains. So I can confirm that if the host has a PCI device with 32bit domain then nova compute will refuse to start. If the passthrough_whitelist config is empty then there is a shortcut in the startup sequence[3] skipping the iteration of the PCI devices on the host hence the problem disappear.
Marking this bug Confirmed. I will try to push a fix soon.
I tested my above assumption and it seems it is the root of the problem.
The nova.pci. devspec. WhitelistPciAdd ress.match( )[1] is called for every PCI device on the host at startup, including the ones with 32bit domain. And this reuses the nova.pci. devspec. PciAddressSpec. _set_pci_ dev_info( ) utility with maxval=0xFFFF for domains. So I can confirm that if the host has a PCI device with 32bit domain then nova compute will refuse to start. If the passthrough_ whitelist config is empty then there is a shortcut in the startup sequence[3] skipping the iteration of the PCI devices on the host hence the problem disappear.
Marking this bug Confirmed. I will try to push a fix soon.
[1] https:/ /github. com/openstack/ nova/blob/ 2745e685376abbc 4c32516837f6074 a3de23aa24/ nova/pci/ devspec. py#L217 /github. com/openstack/ nova/blob/ 2745e685376abbc 4c32516837f6074 a3de23aa24/ nova/pci/ devspec. py#L51 /github. com/openstack/ nova/blob/ 2745e685376abbc 4c32516837f6074 a3de23aa24/ nova/compute/ manager. py#L1393
[2] https:/
[3] https:/