[PATCH v3 0/3] DEVICE_UNPLUG_ERROR QAPI event

Daniel Henrique Barboza posted 3 patches 2 years, 10 months ago
Only 2 patches received!
There is a newer version of this series
docs/system/deprecated.rst | 10 ++++++++++
hw/acpi/memory_hotplug.c   | 13 +++++++++++--
hw/ppc/spapr.c             |  8 ++++++++
hw/ppc/spapr_drc.c         | 15 +++++++++------
qapi/machine.json          |  6 +++++-
qapi/qdev.json             | 27 ++++++++++++++++++++++++++-
6 files changed, 69 insertions(+), 10 deletions(-)
[PATCH v3 0/3] DEVICE_UNPLUG_ERROR QAPI event
Posted by Daniel Henrique Barboza 2 years, 10 months ago
Hi,

In this new version we're now sending both MEM_UNPLUG_ERROR and
the new DEVICE_UNPLUG_ERROR events to avoid breaking existing
listeners of MEM_UNPLUG_ERROR, which is now marked as deprecated.

All emitters of MEM_UNPLUG_ERROR are now emitting DEVICE_UNPLUG_ERROR
as well. 



changes from v2:
- patch 1:
  * moved DEVICE_UNPLUG_ERROR declaration to qapi/qdev.json
  * updated 'device_del' description
  * added 'deprecated' notice on MEM_UNPLUG_ERROR
  * added MEM_UNPLUG_ERROR 'deprecated' info in docs/system/deprecated.rst
- patch 2:
  * send both MEM_UNPLUG_ERROR and DEVICE_UNPLUG_ERROR
- patch 3 (new):
  * send DEVICE_UNPLUG_ERROR in acpi/memory_hotplug.c
- v2 link: https://lists.gnu.org/archive/html/qemu-devel/2021-06/msg01304.html

changes from v1:
- former patches 1 and 2: dropped
- patch 1 (former 3): changed the version to '6.1'
- patch 2 (former 4): add a DEVICE_UNPLUG_ERROR event in the device
  unplug error path of CPUs and DIMMs
- v1 link: https://lists.gnu.org/archive/html/qemu-devel/2021-03/msg04682.html


Daniel Henrique Barboza (3):
  qapi/qdev.json: add DEVICE_UNPLUG_ERROR QAPI event
  spapr: use DEVICE_UNPLUG_ERROR to report unplug errors
  memory_hotplug.c: send DEVICE_UNPLUG_ERROR in
    acpi_memory_hotplug_write()

 docs/system/deprecated.rst | 10 ++++++++++
 hw/acpi/memory_hotplug.c   | 13 +++++++++++--
 hw/ppc/spapr.c             |  8 ++++++++
 hw/ppc/spapr_drc.c         | 15 +++++++++------
 qapi/machine.json          |  6 +++++-
 qapi/qdev.json             | 27 ++++++++++++++++++++++++++-
 6 files changed, 69 insertions(+), 10 deletions(-)

-- 
2.31.1


[PATCH v3 1/3] qapi/qdev.json: add DEVICE_UNPLUG_ERROR QAPI event
Posted by Daniel Henrique Barboza 2 years, 10 months ago
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.

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

	Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
	---
	 docs/system/deprecated.rst | 10 ++++++++++
	 qapi/machine.json          |  6 +++++-
	 qapi/qdev.json             | 27 ++++++++++++++++++++++++++-
	 3 files changed, 41 insertions(+), 2 deletions(-)

	diff --git a/docs/system/deprecated.rst b/docs/system/deprecated.rst
	index e2e0090878..c8200d99d4 100644
	--- a/docs/system/deprecated.rst
	+++ b/docs/system/deprecated.rst
	@@ -192,6 +192,16 @@ The ``I7200`` guest CPU relies on the nanoMIPS ISA, which is deprecated
	 (the ISA has never been upstreamed to a compiler toolchain). Therefore
	 this CPU is also deprecated.
	 
	+
	+QEMU API (QAPI) events
	+----------------------
	+
	+``MEM_UNPLUG_ERROR`` (since 6.1)
	+''''''''''''''''''''''''''''''''''''''''''''''''''''''''
	+
	+Use the more generic event ``DEVICE_UNPLUG_ERROR`` instead.
	+
	+
	 System emulator machines
	 ------------------------
	 
	diff --git a/qapi/machine.json b/qapi/machine.json
	index e4d0f9b24f..91dc520734 100644
	--- a/qapi/machine.json
	+++ b/qapi/machine.json
	@@ -1271,6 +1271,9 @@
	 #
	 # @msg: Informative message
	 #
	+# Features:
	+# @deprecated: This event is deprecated. Use @DEVICE_UNPLUG_ERROR instead.
	+#
	 # Since: 2.4
	 #
	 # Example:
	@@ -1283,4 +1286,5 @@
	 #
	 ##
	 { 'event': 'MEM_UNPLUG_ERROR',
	-  'data': { 'device': 'str', 'msg': 'str' } }
	+  'data': { 'device': 'str', 'msg': 'str' },
	+  'features': ['deprecated'] }
	diff --git a/qapi/qdev.json b/qapi/qdev.json
	index b83178220b..349d7439fa 100644
	--- a/qapi/qdev.json
	+++ b/qapi/qdev.json
	@@ -84,7 +84,9 @@
	 #        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.
	+#        for all devices. If an error in the hot removal process is detected,
	+#        the device will not be removed and a DEVICE_UNPLUG_ERROR event is
	+#        sent.
	 #
	 # Since: 0.14
	 #
	@@ -124,3 +126,26 @@
	 ##
	 { 'event': 'DEVICE_DELETED',
	   'data': { '*device': 'str', 'path': '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' } }
	-- 
	2.31.1


Re: [PATCH v3 1/3] qapi/qdev.json: add DEVICE_UNPLUG_ERROR QAPI event
Posted by David Gibson 2 years, 10 months ago
On Mon, Jun 21, 2021 at 05:59:05PM -0300, Daniel Henrique Barboza wrote:
> 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.

Something seems to have gone weirdly wrong with the formatting here.

> 	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.
> 
> 	With this new generic event, MEM_UNPLUG_ERROR is now marked as deprecated.
> 
> 	Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>

Apart from that
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

> 	---
> 	 docs/system/deprecated.rst | 10 ++++++++++
> 	 qapi/machine.json          |  6 +++++-
> 	 qapi/qdev.json             | 27 ++++++++++++++++++++++++++-
> 	 3 files changed, 41 insertions(+), 2 deletions(-)
> 
> 	diff --git a/docs/system/deprecated.rst b/docs/system/deprecated.rst
> 	index e2e0090878..c8200d99d4 100644
> 	--- a/docs/system/deprecated.rst
> 	+++ b/docs/system/deprecated.rst
> 	@@ -192,6 +192,16 @@ The ``I7200`` guest CPU relies on the nanoMIPS ISA, which is deprecated
> 	 (the ISA has never been upstreamed to a compiler toolchain). Therefore
> 	 this CPU is also deprecated.
> 	 
> 	+
> 	+QEMU API (QAPI) events
> 	+----------------------
> 	+
> 	+``MEM_UNPLUG_ERROR`` (since 6.1)
> 	+''''''''''''''''''''''''''''''''''''''''''''''''''''''''
> 	+
> 	+Use the more generic event ``DEVICE_UNPLUG_ERROR`` instead.
> 	+
> 	+
> 	 System emulator machines
> 	 ------------------------
> 	 
> 	diff --git a/qapi/machine.json b/qapi/machine.json
> 	index e4d0f9b24f..91dc520734 100644
> 	--- a/qapi/machine.json
> 	+++ b/qapi/machine.json
> 	@@ -1271,6 +1271,9 @@
> 	 #
> 	 # @msg: Informative message
> 	 #
> 	+# Features:
> 	+# @deprecated: This event is deprecated. Use @DEVICE_UNPLUG_ERROR instead.
> 	+#
> 	 # Since: 2.4
> 	 #
> 	 # Example:
> 	@@ -1283,4 +1286,5 @@
> 	 #
> 	 ##
> 	 { 'event': 'MEM_UNPLUG_ERROR',
> 	-  'data': { 'device': 'str', 'msg': 'str' } }
> 	+  'data': { 'device': 'str', 'msg': 'str' },
> 	+  'features': ['deprecated'] }
> 	diff --git a/qapi/qdev.json b/qapi/qdev.json
> 	index b83178220b..349d7439fa 100644
> 	--- a/qapi/qdev.json
> 	+++ b/qapi/qdev.json
> 	@@ -84,7 +84,9 @@
> 	 #        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.
> 	+#        for all devices. If an error in the hot removal process is detected,
> 	+#        the device will not be removed and a DEVICE_UNPLUG_ERROR event is
> 	+#        sent.
> 	 #
> 	 # Since: 0.14
> 	 #
> 	@@ -124,3 +126,26 @@
> 	 ##
> 	 { 'event': 'DEVICE_DELETED',
> 	   'data': { '*device': 'str', 'path': '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' } }
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson
Re: [PATCH v3 1/3] qapi/qdev.json: add DEVICE_UNPLUG_ERROR QAPI event
Posted by Daniel Henrique Barboza 2 years, 10 months ago

On 7/5/21 1:52 AM, David Gibson wrote:
> On Mon, Jun 21, 2021 at 05:59:05PM -0300, Daniel Henrique Barboza wrote:
>> 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.
> 
> Something seems to have gone weirdly wrong with the formatting here.

I have no idea what happened lol


> 
>> 	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.
>>
>> 	With this new generic event, MEM_UNPLUG_ERROR is now marked as deprecated.
>>
>> 	Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
> 
> Apart from that
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

Thanks for the reviews! I'll resend the series (hopefully with the proper
formatting) with your R-bs.



Daniel

> 
>> 	---
>> 	 docs/system/deprecated.rst | 10 ++++++++++
>> 	 qapi/machine.json          |  6 +++++-
>> 	 qapi/qdev.json             | 27 ++++++++++++++++++++++++++-
>> 	 3 files changed, 41 insertions(+), 2 deletions(-)
>>
>> 	diff --git a/docs/system/deprecated.rst b/docs/system/deprecated.rst
>> 	index e2e0090878..c8200d99d4 100644
>> 	--- a/docs/system/deprecated.rst
>> 	+++ b/docs/system/deprecated.rst
>> 	@@ -192,6 +192,16 @@ The ``I7200`` guest CPU relies on the nanoMIPS ISA, which is deprecated
>> 	 (the ISA has never been upstreamed to a compiler toolchain). Therefore
>> 	 this CPU is also deprecated.
>> 	
>> 	+
>> 	+QEMU API (QAPI) events
>> 	+----------------------
>> 	+
>> 	+``MEM_UNPLUG_ERROR`` (since 6.1)
>> 	+''''''''''''''''''''''''''''''''''''''''''''''''''''''''
>> 	+
>> 	+Use the more generic event ``DEVICE_UNPLUG_ERROR`` instead.
>> 	+
>> 	+
>> 	 System emulator machines
>> 	 ------------------------
>> 	
>> 	diff --git a/qapi/machine.json b/qapi/machine.json
>> 	index e4d0f9b24f..91dc520734 100644
>> 	--- a/qapi/machine.json
>> 	+++ b/qapi/machine.json
>> 	@@ -1271,6 +1271,9 @@
>> 	 #
>> 	 # @msg: Informative message
>> 	 #
>> 	+# Features:
>> 	+# @deprecated: This event is deprecated. Use @DEVICE_UNPLUG_ERROR instead.
>> 	+#
>> 	 # Since: 2.4
>> 	 #
>> 	 # Example:
>> 	@@ -1283,4 +1286,5 @@
>> 	 #
>> 	 ##
>> 	 { 'event': 'MEM_UNPLUG_ERROR',
>> 	-  'data': { 'device': 'str', 'msg': 'str' } }
>> 	+  'data': { 'device': 'str', 'msg': 'str' },
>> 	+  'features': ['deprecated'] }
>> 	diff --git a/qapi/qdev.json b/qapi/qdev.json
>> 	index b83178220b..349d7439fa 100644
>> 	--- a/qapi/qdev.json
>> 	+++ b/qapi/qdev.json
>> 	@@ -84,7 +84,9 @@
>> 	 #        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.
>> 	+#        for all devices. If an error in the hot removal process is detected,
>> 	+#        the device will not be removed and a DEVICE_UNPLUG_ERROR event is
>> 	+#        sent.
>> 	 #
>> 	 # Since: 0.14
>> 	 #
>> 	@@ -124,3 +126,26 @@
>> 	 ##
>> 	 { 'event': 'DEVICE_DELETED',
>> 	   'data': { '*device': 'str', 'path': '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' } }
>>
>