Daniel Henrique Barboza <danielhb...@gmail.com> writes: > At this moment we only provide one event to report a hotunplug error, > MEM_UNPLUG_ERROR. As of Linux kernel 5.12 and QEMU 6.0.0, the pseries > machine is now able to report unplug errors for other device types, such > as CPUs. > > Instead of creating a (device_type)_UNPLUG_ERROR for each new device, > create a generic DEVICE_UNPLUG_ERROR event that can be used by all > unplug errors in the future. > > Signed-off-by: Daniel Henrique Barboza <danielhb...@gmail.com> > --- > qapi/machine.json | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/qapi/machine.json b/qapi/machine.json > index 58a9c86b36..f0c7e56be0 100644 > --- a/qapi/machine.json > +++ b/qapi/machine.json > @@ -1274,3 +1274,26 @@ > ## > { 'event': 'MEM_UNPLUG_ERROR', > 'data': { 'device': 'str', 'msg': 'str' } } > + > +## > +# @DEVICE_UNPLUG_ERROR: > +# > +# Emitted when a device hot unplug error occurs. > +# > +# @device: device name > +# > +# @msg: Informative message > +# > +# Since: 6.1 > +# > +# Example: > +# > +# <- { "event": "DEVICE_UNPLUG_ERROR" > +# "data": { "device": "dimm1", > +# "msg": "Memory hotunplug rejected by the guest for device > dimm1" > +# }, > +# "timestamp": { "seconds": 1615570772, "microseconds": 202844 } } > +# > +## > +{ 'event': 'DEVICE_UNPLUG_ERROR', > + 'data': { 'device': 'str', 'msg': 'str' } }
Missing: update of device_add's doc comment in qdev.json: # Notes: When this command completes, the device may not be removed from the # guest. Hot removal is an operation that requires guest cooperation. # This command merely requests that the guest begin the hot removal # process. Completion of the device removal process is signaled with a # DEVICE_DELETED event. Guest reset will automatically complete removal # for all devices. This sure could use some polish. If I understand things correctly, we're aiming for the following device unplug protocol: Unplug the device with device_del (or possibly equivalent) If we know we can't unplug the device, fail immediately. Also emit DEVICE_UNPLUG_ERROR. If possible, unplug the device synchronously and succeed. Also emit DEVICE_DELETED. Else, initiate unplug and succeed. When unplug finishes, emit either DEVICE_DELETED or DEVICE_UNPLUG_ERROR. For some machines and devices, unplug may never finish. Correct? Any particular reason for not putting event DEVICE_UNPLUG_ERROR next to DEVICE_DELETED in qdev.json?