HomeFreeBSD

pci: Implement pci_bar_enabled() for SR-IOV VFs

Description

pci: Implement pci_bar_enabled() for SR-IOV VFs

In a VF's configuration space, "memory space enable" is hard-wired to 0,
so the existing implementation always returns false. We need to read
the SR-IOV control register from the PF device to get the value of the
MSE bit.

Fix pci_bar_enabled() to read this register instead for VFs. I don't
see any way to access the PF's config space without a backpointer in the
pci device ivars, so I added one.

This fixes a regression where bhyve(8) fails to map the MSI-X table
after commit 7fa233534736 ("bhyve: Map the MSI-X table unconditionally
for passthrough") when a VF is passed through, since with that commit we
use PCIOCBARMMAP to map the table and that ioctl always fails for VFs
without this change. As a bonus, pciconf(8) now correctly reports the
enablement of BARs for VFs.

Reported and tested by: Raúl Muñoz <raul.munoz@custos.es>
Reviewed by: rstone, jhb
Sponsored by: The FreeBSD Foundation

(cherry picked from commit 1f960e646b7280795766fdaa183e3b9bd4cea345)

Details

Provenance
markjAuthored on Nov 9 2021, 6:07 PM
Parents
rG5c2e6d9610f1: hwpmc: initialize arm64 counter/interrupt state
Branches
Unknown
Tags
Unknown