qapi/qdev.json: add DEVICE_UNPLUG_GUEST_ERROR QAPI event

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_GUEST_ERROR event that can be used by all
guest side unplug errors in the future. This event has a similar API as
the existing DEVICE_DELETED event, always providing the QOM path of the
device and dev->id if there's any.

With this new generic event, MEM_UNPLUG_ERROR is now marked as deprecated.

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20210907004755.424931-6-danielhb413@gmail.com>
[dwg: Correct missing ')' in stubs/qdev.c]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Daniel Henrique Barboza 2021-09-06 21:47:53 -03:00 committed by David Gibson
parent a5bc19c542
commit d43f1670c7
4 changed files with 49 additions and 2 deletions

View File

@ -238,6 +238,16 @@ The ``I7200`` guest CPU relies on the nanoMIPS ISA, which is deprecated
(the ISA has never been upstreamed to a compiler toolchain). Therefore (the ISA has never been upstreamed to a compiler toolchain). Therefore
this CPU is also deprecated. this CPU is also deprecated.
QEMU API (QAPI) events
----------------------
``MEM_UNPLUG_ERROR`` (since 6.2)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Use the more generic event ``DEVICE_UNPLUG_GUEST_ERROR`` instead.
System emulator machines System emulator machines
------------------------ ------------------------

View File

@ -1305,6 +1305,10 @@
# #
# @msg: Informative message # @msg: Informative message
# #
# Features:
# @deprecated: This event is deprecated. Use @DEVICE_UNPLUG_GUEST_ERROR
# instead.
#
# Since: 2.4 # Since: 2.4
# #
# Example: # Example:
@ -1317,7 +1321,8 @@
# #
## ##
{ 'event': 'MEM_UNPLUG_ERROR', { 'event': 'MEM_UNPLUG_ERROR',
'data': { 'device': 'str', 'msg': 'str' } } 'data': { 'device': 'str', 'msg': 'str' },
'features': ['deprecated'] }
## ##
# @SMPConfiguration: # @SMPConfiguration:

View File

@ -84,7 +84,9 @@
# This command merely requests that the guest begin the hot removal # This command merely requests that the guest begin the hot removal
# process. Completion of the device removal process is signaled with a # process. Completion of the device removal process is signaled with a
# DEVICE_DELETED event. Guest reset will automatically complete removal # DEVICE_DELETED event. Guest reset will automatically complete removal
# for all devices. # for all devices. If a guest-side error in the hot removal process is
# detected, the device will not be removed and a DEVICE_UNPLUG_GUEST_ERROR
# event is sent. Some errors cannot be detected.
# #
# Since: 0.14 # Since: 0.14
# #
@ -124,3 +126,26 @@
## ##
{ 'event': 'DEVICE_DELETED', { 'event': 'DEVICE_DELETED',
'data': { '*device': 'str', 'path': 'str' } } 'data': { '*device': 'str', 'path': 'str' } }
##
# @DEVICE_UNPLUG_GUEST_ERROR:
#
# Emitted when a device hot unplug fails due to a guest reported error.
#
# @device: the device's ID if it has one
#
# @path: the device's QOM path
#
# Since: 6.2
#
# Example:
#
# <- { "event": "DEVICE_UNPLUG_GUEST_ERROR"
# "data": { "device": "core1",
# "path": "/machine/peripheral/core1" },
# },
# "timestamp": { "seconds": 1615570772, "microseconds": 202844 } }
#
##
{ 'event': 'DEVICE_UNPLUG_GUEST_ERROR',
'data': { '*device': 'str', 'path': 'str' } }

View File

@ -21,3 +21,10 @@ void qapi_event_send_device_deleted(bool has_device,
{ {
/* Nothing to do. */ /* Nothing to do. */
} }
void qapi_event_send_device_unplug_guest_error(bool has_device,
const char *device,
const char *path)
{
/* Nothing to do. */
}