[dpdk-dev] [PATCH 08/10] igb_uio: add missing locking to config access

Stephen Hemminger stephen at networkplumber.org
Fri Jul 18 18:14:55 CEST 2014


Access to PCI config space should be inside pci_cfg_access_lock
to avoid read/modify/write races.

Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>


--- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c	2014-06-19 14:55:03.959554076 -0700
+++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c	2014-06-19 14:58:55.000000000 -0700
@@ -148,10 +148,13 @@ store_extended_tag(struct device *dev,
 	else
 		return -EINVAL;
 
+	pci_cfg_access_lock(pci_dev);
 	pci_bus_read_config_dword(pci_dev->bus, pci_dev->devfn,
 					PCI_DEV_CAP_REG, &val);
-	if (!(val & PCI_DEV_CAP_EXT_TAG_MASK)) /* Not supported */
+	if (!(val & PCI_DEV_CAP_EXT_TAG_MASK)) { /* Not supported */
+		pci_cfg_access_unlock(pci_dev);
 		return -EPERM;
+	}
 
 	val = 0;
 	pci_bus_read_config_dword(pci_dev->bus, pci_dev->devfn,
@@ -162,6 +165,7 @@ store_extended_tag(struct device *dev,
 		val &= ~PCI_DEV_CTRL_EXT_TAG_MASK;
 	pci_bus_write_config_dword(pci_dev->bus, pci_dev->devfn,
 					PCI_DEV_CTRL_REG, val);
+	pci_cfg_access_unlock(pci_dev);
 
 	return count;
 }



More information about the dev mailing list