igb_uio: add missing locking to config access
authorStephen Hemminger <stephen@networkplumber.org>
Fri, 18 Jul 2014 16:14:55 +0000 (09:14 -0700)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 18 Jul 2014 23:54:41 +0000 (01:54 +0200)
Access to PCI config space should be inside pci_cfg_access_lock
to avoid read/modify/write races.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
lib/librte_eal/linuxapp/igb_uio/igb_uio.c

index bca412b..a94d998 100644 (file)
@@ -166,10 +166,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,
@@ -180,6 +183,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;
 }