PCIe 设备如何向 Linux 发布多个虚拟功能?

How do PCIe devices advertise multiple virtual functions to Linux?

SR-IOV 让 PCIe 设备公开一个物理功能和多个虚拟功能。内核如何检测设备是否支持虚拟功能?它是 PCIe 配置寄存器的一部分吗?设备在内核的哪个位置测试了它们导出的函数数量?

编辑:我正在内核源代码中寻找一行代码(或一个文件)来检查 PCIe 设备以确定它导出了多少虚拟功能。我还会选择一个 link 到适当的标准,该标准规定了设备需要向主机发送哪些信息才能报告它支持多个虚拟功能。

具有SR-IOV 能力的设备定义SR-IOV 能力(扩展能力ID 10h)。

这是在 PCI Express Base 规范修订版 4.0 的第 9 章中指定的。我不确定您是否可以在网上找到免费的副本;您可能需要成为 PCI-SIG 会员。

在Linux内核中,在drivers/pci/iov.c.

中寻找PCI_EXT_CAP_ID_SRIOV和PCI_SRIOV_TOTAL_VF