You see one or more PCI passthrough devices, commonly NVIDIA GPUs, showing Active Type "Shared Direct" or "Basic" in the vSphere Client Graphics Devices view, while identical sibling devices show "Direct".
You cannot set the affected device to passthrough from the vSphere Client. Toggling passthrough off and on, with reboots, does not change the result.
In localcli hardware pci list, the affected device shows a mismatch between its configured and current owner:
Configured Owner: VM Passthru Current Owner: VMkernel Module Name: None
After the host boots, the passthrough module claims the sibling devices and skips the affected device, with no related error. In /var/run/log/vmkernel.log you see the passthrough module attach the working devices and not the affected one:
PCIPassthru: PCIPassthruAttachDev:233: Attached to device 0000:17:00.0 PCIPassthru: PCIPassthruAttachDev:233: Attached to device 0000:65:00.0
An unrelated PCI device in a different slot may appear under passthrough unexpectedly (Current Owner: VM Passthru) even though it is configured for the VMkernel.
Additional symptoms reported:
ESXi records each PCI device's passthrough assignment in the host configuration store (ConfigStore), under component esx, group hardware, key pci_devices, keyed by the device's PCI address. Each record includes a device-layer bus address (dl_bus_address) that ties the assignment to a specific physical slot.
The device-layer bus address is a vital field. It is written when the record is first created and is preserved across later edits. Enabling or disabling passthrough updates only the owner, not the device-layer bus address.
When the stored device-layer bus address no longer matches the slot the device actually occupies, for example after a card is moved or device enumeration shifts during hardware service, ESXi applies the passthrough assignment at boot to whichever device sits at the stored address. The intended device is left owned by the VMkernel, and an unrelated device at the stored address can be pulled into passthrough. Because the device-layer bus address is preserved across edits, toggling passthrough off and on does not correct it.
localcli hardware pci list and note the device's Device Layer Bus Address and Physical Slot.configstorecli config current get -c esx -g hardware -k pci_devices -i <pci-address>A stored
dl_bus_address that points to a different slot than the device occupies confirms this issue.configstorecli config current delete -c esx -g hardware -k pci_devices -i <pci-address>Use
-i with the specific PCI address on every delete. Do not use --all, which removes every record in the key!configstorecli config current get -c esx -g hardware -k pci_devices
configstorecli config current get -c esx -g hardware -k pci_devices -i <pci-address>
esxcli hardware pci pcipassthru set -d <pci-address> -e true
localcli hardware pci list shows the device with Current Owner: VM Passthru and Module Name: pciPassthru. For a GPU, Configure > Hardware > Graphics > Graphics Devices shows Active Type: Direct.-i and a specific PCI address, and confirm scope with the read in step 5 before rebooting.