From: Stephen Hemminger <stephen@xxxxxxxxxxxxxxxxxx> Date: Wed, 29 Aug 2018 09:24:51 -0700 > + spin_lock_irqsave(&hbus->device_list_lock, flags); > + list_for_each_entry(hpdev, &hbus->children, list_entry) { > + if (hpdev->pci_slot) > + continue; > + > + slot_nr = PCI_SLOT(wslot_to_devfn(hpdev->desc.win_slot.slot)); > + snprintf(name, SLOT_NAME_SIZE, "%u", hpdev->desc.ser); > + hpdev->pci_slot = pci_create_slot(hbus->pci_bus, slot_nr, > + name, NULL); pci_create_slot() takes a mutex, therefore you can't hold a spinlock or disable interrupts here.