]> Pileus Git - ~andy/linux/blobdiff - drivers/pci/pci.c
Merge branch 'stable/for-jens-3.13-take-two' of git://git.kernel.org/pub/scm/linux...
[~andy/linux] / drivers / pci / pci.c
index bdd64b1b4817f7223fa31db19a118db5a9caaaa5..b127fbda6fc8610dad9c81ae7c6e13acc3aabd5d 100644 (file)
@@ -1148,18 +1148,16 @@ int pci_reenable_device(struct pci_dev *dev)
 
 static void pci_enable_bridge(struct pci_dev *dev)
 {
+       struct pci_dev *bridge;
        int retval;
 
-       if (!dev)
-               return;
-
-       pci_enable_bridge(dev->bus->self);
+       bridge = pci_upstream_bridge(dev);
+       if (bridge)
+               pci_enable_bridge(bridge);
 
        if (pci_is_enabled(dev)) {
-               if (!dev->is_busmaster) {
-                       dev_warn(&dev->dev, "driver skip pci_set_master, fix it!\n");
+               if (!dev->is_busmaster)
                        pci_set_master(dev);
-               }
                return;
        }
 
@@ -1172,6 +1170,7 @@ static void pci_enable_bridge(struct pci_dev *dev)
 
 static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
 {
+       struct pci_dev *bridge;
        int err;
        int i, bars = 0;
 
@@ -1190,7 +1189,9 @@ static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
        if (atomic_inc_return(&dev->enable_cnt) > 1)
                return 0;               /* already enabled */
 
-       pci_enable_bridge(dev->bus->self);
+       bridge = pci_upstream_bridge(dev);
+       if (bridge)
+               pci_enable_bridge(bridge);
 
        /* only skip sriov related */
        for (i = 0; i <= PCI_ROM_RESOURCE; i++)
@@ -1644,8 +1645,10 @@ void pci_pme_active(struct pci_dev *dev, bool enable)
                if (enable) {
                        pme_dev = kmalloc(sizeof(struct pci_pme_device),
                                          GFP_KERNEL);
-                       if (!pme_dev)
-                               goto out;
+                       if (!pme_dev) {
+                               dev_warn(&dev->dev, "can't enable PME#\n");
+                               return;
+                       }
                        pme_dev->dev = dev;
                        mutex_lock(&pci_pme_list_mutex);
                        list_add(&pme_dev->list, &pci_pme_list);
@@ -1666,7 +1669,6 @@ void pci_pme_active(struct pci_dev *dev, bool enable)
                }
        }
 
-out:
        dev_dbg(&dev->dev, "PME# %s\n", enable ? "enabled" : "disabled");
 }
 
@@ -2860,7 +2862,7 @@ void __weak pcibios_set_master(struct pci_dev *dev)
                lat = pcibios_max_latency;
        else
                return;
-       dev_printk(KERN_DEBUG, &dev->dev, "setting latency timer to %d\n", lat);
+
        pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
 }
 
@@ -3978,6 +3980,7 @@ int pcie_get_mps(struct pci_dev *dev)
 
        return 128 << ((ctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
 }
+EXPORT_SYMBOL(pcie_get_mps);
 
 /**
  * pcie_set_mps - set PCI Express maximum payload size
@@ -4002,6 +4005,7 @@ int pcie_set_mps(struct pci_dev *dev, int mps)
        return pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
                                                  PCI_EXP_DEVCTL_PAYLOAD, v);
 }
+EXPORT_SYMBOL(pcie_set_mps);
 
 /**
  * pcie_get_minimum_link - determine minimum link settings of a PCI device