From f8bda51205c3ea2fee83695fa7597990ca752447 Mon Sep 17 00:00:00 2001 From: Ksawlii Date: Sun, 24 Nov 2024 00:23:39 +0100 Subject: [PATCH] Revert "PCI: Add missing bridge lock to pci_bus_lock()" This reverts commit 5450cc173d2fb32b3fe79f071496d6dbeb2a479d. --- drivers/pci/pci.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index a5cf41971..40ea757f2 100755 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5269,12 +5269,10 @@ static void pci_bus_lock(struct pci_bus *bus) { struct pci_dev *dev; - pci_dev_lock(bus->self); list_for_each_entry(dev, &bus->devices, bus_list) { + pci_dev_lock(dev); if (dev->subordinate) pci_bus_lock(dev->subordinate); - else - pci_dev_lock(dev); } } @@ -5286,10 +5284,8 @@ static void pci_bus_unlock(struct pci_bus *bus) list_for_each_entry(dev, &bus->devices, bus_list) { if (dev->subordinate) pci_bus_unlock(dev->subordinate); - else - pci_dev_unlock(dev); + pci_dev_unlock(dev); } - pci_dev_unlock(bus->self); } /* Return 1 on successful lock, 0 on contention */ @@ -5297,15 +5293,15 @@ static int pci_bus_trylock(struct pci_bus *bus) { struct pci_dev *dev; - if (!pci_dev_trylock(bus->self)) - return 0; - list_for_each_entry(dev, &bus->devices, bus_list) { - if (dev->subordinate) { - if (!pci_bus_trylock(dev->subordinate)) - goto unlock; - } else if (!pci_dev_trylock(dev)) + if (!pci_dev_trylock(dev)) goto unlock; + if (dev->subordinate) { + if (!pci_bus_trylock(dev->subordinate)) { + pci_dev_unlock(dev); + goto unlock; + } + } } return 1; @@ -5313,10 +5309,8 @@ unlock: list_for_each_entry_continue_reverse(dev, &bus->devices, bus_list) { if (dev->subordinate) pci_bus_unlock(dev->subordinate); - else - pci_dev_unlock(dev); + pci_dev_unlock(dev); } - pci_dev_unlock(bus->self); return 0; } @@ -5348,10 +5342,9 @@ static void pci_slot_lock(struct pci_slot *slot) list_for_each_entry(dev, &slot->bus->devices, bus_list) { if (!dev->slot || dev->slot != slot) continue; + pci_dev_lock(dev); if (dev->subordinate) pci_bus_lock(dev->subordinate); - else - pci_dev_lock(dev); } } @@ -5377,13 +5370,14 @@ static int pci_slot_trylock(struct pci_slot *slot) list_for_each_entry(dev, &slot->bus->devices, bus_list) { if (!dev->slot || dev->slot != slot) continue; + if (!pci_dev_trylock(dev)) + goto unlock; if (dev->subordinate) { if (!pci_bus_trylock(dev->subordinate)) { pci_dev_unlock(dev); goto unlock; } - } else if (!pci_dev_trylock(dev)) - goto unlock; + } } return 1; @@ -5394,8 +5388,7 @@ unlock: continue; if (dev->subordinate) pci_bus_unlock(dev->subordinate); - else - pci_dev_unlock(dev); + pci_dev_unlock(dev); } return 0; }