On 04.12.18 14:33, Igor Mammedov wrote: > On Wed, 28 Nov 2018 15:54:55 +0100 > David Hildenbrand <[email protected]> wrote: > >> When unplugging a device, at one point the device will be destroyed >> via object_unparent(). This will, one the one hand, unrealize the >> device hierarchy to be removed, and on the other hand, destroy/free the >> device hierarchy. >> >> When chaining interrupt handlers, we want to overwrite a bus hotplug >> handler by the machine hotplug handler, to be able to perform >> some part of the plug/unplug and to forward the calls to the bus hotplug >> handler. >> >> For now, the bus hotplug handler would trigger an object_unparent(), not >> allowing us to perform some unplug action on a device after we forwarded >> the call to the bus hotplug handler. The device would be gone at that >> point. >> >> hotplug_handler_unplug(dev) -> calls machine_unplug_handler() >> machine_unplug_handler(dev) { >> /* eventually do unplug stuff */ >> bus_unplug_handler(dev) -> calls object_unparent(dev) >> /* dev is gone, we can't do more unplug stuff */ >> } >> >> So move the object_unparent() to the original caller of the unplug. For >> now, keep the unrealize() at the original places of the >> object_unparent(). >> >> hotplug_handler_unplug(dev) -> calls machine_unplug_handler() >> machine_unplug_handler(dev) { >> /* eventually do unplug stuff */ >> bus_unplug_handler(dev) -> calls unrealize(dev) >> /* we can do more unplug stuff but device already unrealized */ >> } >> object_unparent(dev) >> >> In the long run, every unplug action should be factored out of the >> unrealize() function into the unplug handler (especially for PCI). Then >> we can get rid of the additonal unrealize() calls and object_unparent() >> will properly unrealize the device hierarchy after the device has been >> unplugged. >> >> hotplug_handler_unplug(dev) -> calls machine_unplug_handler() >> machine_unplug_handler(dev) { >> /* eventually do unplug stuff */ >> bus_unplug_handler(dev) -> only unplugs, does not unrealize >> /* we can do more unplug stuff */ >> } >> object_unparent(dev) -> will unrealize >> >> >> The original approach was suggested by Igor Mammedov for the PCI >> part, but I extended it to all hotplug handlers. I consider this one >> step into the right direction. >> >> Signed-off-by: David Hildenbrand <[email protected]> > Sorry but I've lost track of all hotplug patches that where > reviewed and pending form merge. > Lets revisit this patch once those are merged to have a coherent > view on how things stand.
At least from my side, there is only [PATCH v3 00/11] pci: hotplug handler reworks​ -- Thanks, David / dhildenb
