Revert "PCI: Avoid race while enabling upstream bridges"

This reverts commit 40f11adc7cd9281227f0a6a627d966dd0a5f0cd9.

Jens found that iwlwifi firmware loading failed on a Lenovo X1 Carbon,
gen4:

iwlwifi 0000:04:00.0: Direct firmware load for iwlwifi-8000C-34.ucode failed with error -2
iwlwifi 0000:04:00.0: Direct firmware load for iwlwifi-8000C-33.ucode failed with error -2
iwlwifi 0000:04:00.0: Direct firmware load for iwlwifi-8000C-32.ucode failed with error -2
iwlwifi 0000:04:00.0: loaded firmware version 31.532993.0 op_mode iwlmvm
iwlwifi 0000:04:00.0: Detected Intel(R) Dual Band Wireless AC 8260, REV=0x208
...
iwlwifi 0000:04:00.0: Failed to load firmware chunk!
iwlwifi 0000:04:00.0: Could not load the [0] uCode section
iwlwifi 0000:04:00.0: Failed to start INIT ucode: -110
iwlwifi 0000:04:00.0: Failed to run INIT ucode: -110

He bisected it to 40f11adc7cd9 ("PCI: Avoid race while enabling upstream
bridges"). Revert that commit to fix the regression.

Link: http://lkml.kernel.org/r/4bcbcbc1-7c79-09f0-5071-bc2f53bf6574@kernel.dk
Fixes: 40f11adc7cd9 ("PCI: Avoid race while enabling upstream bridges")
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
CC: Srinath Mannam <srinath.mannam@broadcom.com>
CC: Jens Axboe <axboe@kernel.dk>
CC: Luca Coelho <luca@coelho.fi>
CC: Johannes Berg <johannes@sipsolutions.net>
CC: Emmanuel Grumbach <emmanuel.grumbach@intel.com>

+2 -11
+2 -11
drivers/pci/pci.c
··· 52 static LIST_HEAD(pci_pme_list); 53 static DEFINE_MUTEX(pci_pme_list_mutex); 54 static DECLARE_DELAYED_WORK(pci_pme_work, pci_pme_list_scan); 55 - static DEFINE_MUTEX(pci_bridge_mutex); 56 57 struct pci_pme_device { 58 struct list_head list; ··· 1350 if (bridge) 1351 pci_enable_bridge(bridge); 1352 1353 - /* 1354 - * Hold pci_bridge_mutex to prevent a race when enabling two 1355 - * devices below the bridge simultaneously. The race may cause a 1356 - * PCI_COMMAND_MEMORY update to be lost (see changelog). 1357 - */ 1358 - mutex_lock(&pci_bridge_mutex); 1359 if (pci_is_enabled(dev)) { 1360 if (!dev->is_busmaster) 1361 pci_set_master(dev); 1362 - goto end; 1363 } 1364 1365 retval = pci_enable_device(dev); ··· 1361 dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n", 1362 retval); 1363 pci_set_master(dev); 1364 - end: 1365 - mutex_unlock(&pci_bridge_mutex); 1366 } 1367 1368 static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags) ··· 1385 return 0; /* already enabled */ 1386 1387 bridge = pci_upstream_bridge(dev); 1388 - if (bridge && !pci_is_enabled(bridge)) 1389 pci_enable_bridge(bridge); 1390 1391 /* only skip sriov related */
··· 52 static LIST_HEAD(pci_pme_list); 53 static DEFINE_MUTEX(pci_pme_list_mutex); 54 static DECLARE_DELAYED_WORK(pci_pme_work, pci_pme_list_scan); 55 56 struct pci_pme_device { 57 struct list_head list; ··· 1351 if (bridge) 1352 pci_enable_bridge(bridge); 1353 1354 if (pci_is_enabled(dev)) { 1355 if (!dev->is_busmaster) 1356 pci_set_master(dev); 1357 + return; 1358 } 1359 1360 retval = pci_enable_device(dev); ··· 1368 dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n", 1369 retval); 1370 pci_set_master(dev); 1371 } 1372 1373 static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags) ··· 1394 return 0; /* already enabled */ 1395 1396 bridge = pci_upstream_bridge(dev); 1397 + if (bridge) 1398 pci_enable_bridge(bridge); 1399 1400 /* only skip sriov related */