On 5/5/25 4:54 AM, Ilpo Järvinen wrote: > The commit a4e772898f8b ("PCI: Add missing bridge lock to > pci_bus_lock()") made the lock function to call depend on > dev->subordinate but left pci_slot_unlock() unmodified creating locking > asymmetry compared with pci_slot_lock(). > > Because of the asymmetric lock handling, the same bridge device is > unlocked twice. First pci_bus_unlock() unlocks bus->self and then > pci_slot_unlock() will unconditionally unlock the same bridge device. > > Move pci_dev_unlock() inside an else branch to match the logic in > pci_slot_lock(). > > Fixes: a4e772898f8b ("PCI: Add missing bridge lock to pci_bus_lock()") > Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> Reviewed-by: Dave Jiang <dave.jiang@xxxxxxxxx> > --- > > v2: > - Improve changelog (Lukas) > - Added Cc stable > > drivers/pci/pci.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index 4d7c9f64ea24..26507aa906d7 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -5542,7 +5542,8 @@ static void pci_slot_unlock(struct pci_slot *slot) > continue; > if (dev->subordinate) > pci_bus_unlock(dev->subordinate); > - pci_dev_unlock(dev); > + else > + pci_dev_unlock(dev); > } > } > > > base-commit: 0af2f6be1b4281385b618cb86ad946eded089ac8