From a49cf8a57dd99cdb1d31b2df0f3790aec88777b7 Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Fri, 31 Jul 2009 15:35:53 +0100 Subject: [PATCH] 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() --- src/pci.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pci.c b/src/pci.c index 4030a14c89..2dc2e1c550 100644 --- a/src/pci.c +++ b/src/pci.c @@ -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; -- 2.47.2