On Thu, Aug 13, 2015 at 02:53:02PM +0200, Laurent Vivier wrote: > When a device is hotplugged, attach() sets "configured" to > false, waiting an action from the OS to configure it and then > to call ibm,configure-connector. On ibm,configure-connector, > the hypervisor sets "configured" to true. > > In case of coldplugged device, attach() sets "configured" to > false, but firmware and OS never call the ibm,configure-connector > in this case, so it remains set to false. > > It could be harmless, but when we unplug a device, hypervisor > waits the device becomes configured because for it, a not configured > device is a device being configured, so it waits the end of configuration > to unplug it... and it never happens, so it is never unplugged.
Not true for at least logical DR device like CPU. I am able to cleanly unplug a cold plugged CPU in the patchset I posted at: https://lists.gnu.org/archive/html/qemu-ppc/2015-08/msg00041.html And this is how the state transitions work for cold plugged CPU devices: - Cold plugged CPU DRC is explicitly set with allocation_state=USABLE and isolation_state=UNISOLATED. - device_del results in drck->detach() that just returns by setting drc->awaiting_release to true. - Unplug notification is sent to guest. - Guest comes back with set_indicator RTAS call for setting isolation_state to ISOLATED. set_isolation_state() sets drc->configured to false. - Guest comes back again with set_indicator RTAS call for setting allocation state to UNUSABLE. set_allocation_state() finalizes the device removal by calling drck->detach() - drck->detach() now calls drc->detach_cb() that truly releases the CPU resource by getting rid of vCPU thread in QEMU. Regards, Bharata.