Unverified Commit 5d0c5efa authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files
parents 7ce7161f 14d4b6a9
Loading
Loading
Loading
Loading
+21 −14
Original line number Diff line number Diff line
@@ -5273,10 +5273,12 @@ 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);
	}
}

@@ -5288,8 +5290,10 @@ 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(bus->self);
}

/* Return 1 on successful lock, 0 on contention */
@@ -5297,15 +5301,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 (!pci_dev_trylock(dev))
			goto unlock;
		if (dev->subordinate) {
			if (!pci_bus_trylock(dev->subordinate)) {
				pci_dev_unlock(dev);
			if (!pci_bus_trylock(dev->subordinate))
				goto unlock;
		} else if (!pci_dev_trylock(dev))
			goto unlock;
			}
		}
	}
	return 1;

@@ -5313,8 +5317,10 @@ static int pci_bus_trylock(struct pci_bus *bus)
	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(bus->self);
	return 0;
}

@@ -5346,9 +5352,10 @@ 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);
	}
}

@@ -5374,14 +5381,13 @@ 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;

@@ -5392,6 +5398,7 @@ static int pci_slot_trylock(struct pci_slot *slot)
			continue;
		if (dev->subordinate)
			pci_bus_unlock(dev->subordinate);
		else
			pci_dev_unlock(dev);
	}
	return 0;