Alex Chiang wrote: > * Kenji Kaneshige <kaneshige.kenji@xxxxxxxxxxxxxx>: >> Kenji Kaneshige wrote: >>> Alex Chiang wrote: >>>> diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c >>>> index 2118944..459d6a2 100644 >>>> --- a/drivers/pci/slot.c >>>> +++ b/drivers/pci/slot.c >>>> @@ -248,6 +248,7 @@ placeholder: >>>> if (PCI_SLOT(dev->devfn) == slot_nr) >>>> dev->slot = slot; >>>> + get_device(&parent->dev); >>>> dev_dbg(&parent->dev, "dev %02x, created physical slot %s\n", >>>> slot_nr, pci_slot_name(slot)); >>>> @@ -302,6 +303,7 @@ void pci_destroy_slot(struct pci_slot *slot) >>>> slot->number, atomic_read(&slot->kobj.kref.refcount) - 1); >>>> down_write(&pci_bus_sem); >>>> + put_device(&slot->bus->dev); >>>> kobject_put(&slot->kobj); >>>> up_write(&pci_bus_sem); >>>> } >>>> >>> I've not tried your patch yet, but I don't think it works because >>> pci_create_slot() can be executed by some hotplug drivers (pciehp, >>> shpchp, ...) before parent->dev is initialized. >>> >>> Anyway, I'll try it and report the result as soon as possible. >>> >> I tried your patch. The result is that the patch doesn't fix anything >> and introduces new kernel oops (see below). I can reproduce the new >> kernel oops by the following steps. >> >> (1) Load pciehp >> (2) Remove parent bridge of the slot >> (3) Add parent bridge of the slot >> >> I think the reason why your patch doesn't fix the problem is the place >> of put_device() is wrong. It needs to be placed after kobject_put(), >> doesn't it? > > You are right. > >> And the reason why your patch introduce the new kernel oops is >> get_device(&parent->dev) is executed before parent->dev is initialized, >> as I mentioned in the previous e-mail. > > Sigh, you are right again. I tested with acpiphp which does not > have that issue. Sorry for the noise. > No problem. Please feel free to ask me for testing. Thanks, Kenji Kaneshige -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html