提交 a49cf8a5 编写于 作者: M Mark McLoughlin

Fix PCIe FLR detection

PCIe DevCap register is actually 32 bits, not 16 bits. Since FLR is
bit 28, we clearly are failing to detect FLR support.

Known to fix device reset with some SR-IOV devices.

* src/pci.c: fix pciDetectFunctionLevelReset()
上级 f4e71577
......@@ -321,7 +321,7 @@ pciFindCapabilityOffset(pciDevice *dev, unsigned capability)
static unsigned
pciDetectFunctionLevelReset(pciDevice *dev)
{
uint16_t caps;
uint32_t caps;
uint8_t pos;
/* The PCIe Function Level Reset capability allows
......@@ -331,7 +331,7 @@ pciDetectFunctionLevelReset(pciDevice *dev)
* on SR-IOV NICs at the moment.
*/
if (dev->pcie_cap_pos) {
caps = pciRead16(dev, dev->pcie_cap_pos + PCI_EXP_DEVCAP);
caps = pciRead32(dev, dev->pcie_cap_pos + PCI_EXP_DEVCAP);
if (caps & PCI_EXP_DEVCAP_FLR) {
VIR_DEBUG("%s %s: detected PCIe FLR capability", dev->id, dev->name);
return 1;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册