All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/3] DEVICE_UNPLUG_ERROR QAPI event
@ 2021-06-21 20:59 Daniel Henrique Barboza
  2021-06-21 20:59 ` [PATCH v3 1/3] qapi/qdev.json: add " Daniel Henrique Barboza
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Daniel Henrique Barboza @ 2021-06-21 20:59 UTC (permalink / raw)
  To: qemu-devel
  Cc: Daniel Henrique Barboza, armbru, groug, qemu-ppc, eblake, david

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



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3 1/3] qapi/qdev.json: add DEVICE_UNPLUG_ERROR QAPI event
  2021-06-21 20:59 [PATCH v3 0/3] DEVICE_UNPLUG_ERROR QAPI event Daniel Henrique Barboza
@ 2021-06-21 20:59 ` Daniel Henrique Barboza
  2021-07-05  4:52   ` David Gibson
  2021-06-21 20:59 ` [PATCH v3 2/3] spapr: use DEVICE_UNPLUG_ERROR to report unplug errors Daniel Henrique Barboza
  2021-06-21 20:59 ` [PATCH v3 3/3] memory_hotplug.c: send DEVICE_UNPLUG_ERROR in acpi_memory_hotplug_write() Daniel Henrique Barboza
  2 siblings, 1 reply; 8+ messages in thread
From: Daniel Henrique Barboza @ 2021-06-21 20:59 UTC (permalink / raw)
  To: qemu-devel
  Cc: Daniel Henrique Barboza, armbru, groug, qemu-ppc, eblake, david

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



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3 2/3] spapr: use DEVICE_UNPLUG_ERROR to report unplug errors
  2021-06-21 20:59 [PATCH v3 0/3] DEVICE_UNPLUG_ERROR QAPI event Daniel Henrique Barboza
  2021-06-21 20:59 ` [PATCH v3 1/3] qapi/qdev.json: add " Daniel Henrique Barboza
@ 2021-06-21 20:59 ` Daniel Henrique Barboza
  2021-07-05  4:55   ` David Gibson
  2021-06-21 20:59 ` [PATCH v3 3/3] memory_hotplug.c: send DEVICE_UNPLUG_ERROR in acpi_memory_hotplug_write() Daniel Henrique Barboza
  2 siblings, 1 reply; 8+ messages in thread
From: Daniel Henrique Barboza @ 2021-06-21 20:59 UTC (permalink / raw)
  To: qemu-devel
  Cc: Daniel Henrique Barboza, armbru, groug, qemu-ppc, eblake, david

Linux Kernel 5.12 is now unisolating CPU DRCs in the device_removal
error path, signalling that the hotunplug process wasn't successful.
This allow us to send a DEVICE_UNPLUG_ERROR in drc_unisolate_logical()
to signal this error to the management layer.

We also have another error path in spapr_memory_unplug_rollback() for
configured LMB DRCs. Kernels older than 5.13 will not unisolate the LMBs
in the hotunplug error path, but it will reconfigure them. Let's send
the DEVICE_UNPLUG_ERROR event in that code path as well to cover the
case of older kernels.

Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
 hw/ppc/spapr.c     |  8 ++++++++
 hw/ppc/spapr_drc.c | 15 +++++++++------
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 4dd90b75cc..fc071a1767 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -29,6 +29,7 @@
 #include "qemu/datadir.h"
 #include "qapi/error.h"
 #include "qapi/qapi-events-machine.h"
+#include "qapi/qapi-events-qdev.h"
 #include "qapi/visitor.h"
 #include "sysemu/sysemu.h"
 #include "sysemu/hostmem.h"
@@ -3641,7 +3642,14 @@ void spapr_memory_unplug_rollback(SpaprMachineState *spapr, DeviceState *dev)
      */
     qapi_error = g_strdup_printf("Memory hotunplug rejected by the guest "
                                  "for device %s", dev->id);
+
+    /*
+     * Send both MEM_UNPLUG_ERROR and DEVICE_UNPLUG_ERROR
+     * while the deprecation of MEM_UNPLUG_ERROR is
+     * pending.
+     */
     qapi_event_send_mem_unplug_error(dev->id, qapi_error);
+    qapi_event_send_device_unplug_error(dev->id, qapi_error);
 }
 
 /* Callback to be called during DRC release. */
diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
index a2f2634601..45a7b1aa16 100644
--- a/hw/ppc/spapr_drc.c
+++ b/hw/ppc/spapr_drc.c
@@ -17,6 +17,8 @@
 #include "hw/ppc/spapr_drc.h"
 #include "qom/object.h"
 #include "migration/vmstate.h"
+#include "qapi/error.h"
+#include "qapi/qapi-events-qdev.h"
 #include "qapi/visitor.h"
 #include "qemu/error-report.h"
 #include "hw/ppc/spapr.h" /* for RTAS return codes */
@@ -160,6 +162,10 @@ static uint32_t drc_unisolate_logical(SpaprDrc *drc)
          * means that the kernel is refusing the removal.
          */
         if (drc->unplug_requested && drc->dev) {
+            const char qapi_error_fmt[] = "Device hotunplug rejected by the "
+                                          "guest for device %s";
+            g_autofree char *qapi_error = NULL;
+
             if (spapr_drc_type(drc) == SPAPR_DR_CONNECTOR_TYPE_LMB) {
                 spapr = SPAPR_MACHINE(qdev_get_machine());
 
@@ -167,13 +173,10 @@ static uint32_t drc_unisolate_logical(SpaprDrc *drc)
             }
 
             drc->unplug_requested = false;
-            error_report("Device hotunplug rejected by the guest "
-                         "for device %s", drc->dev->id);
+            error_report(qapi_error_fmt, drc->dev->id);
 
-            /*
-             * TODO: send a QAPI DEVICE_UNPLUG_ERROR event when
-             * it is implemented.
-             */
+            qapi_error = g_strdup_printf(qapi_error_fmt, drc->dev->id);
+            qapi_event_send_device_unplug_error(drc->dev->id, qapi_error);
         }
 
         return RTAS_OUT_SUCCESS; /* Nothing to do */
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v3 3/3] memory_hotplug.c: send DEVICE_UNPLUG_ERROR in acpi_memory_hotplug_write()
  2021-06-21 20:59 [PATCH v3 0/3] DEVICE_UNPLUG_ERROR QAPI event Daniel Henrique Barboza
  2021-06-21 20:59 ` [PATCH v3 1/3] qapi/qdev.json: add " Daniel Henrique Barboza
  2021-06-21 20:59 ` [PATCH v3 2/3] spapr: use DEVICE_UNPLUG_ERROR to report unplug errors Daniel Henrique Barboza
@ 2021-06-21 20:59 ` Daniel Henrique Barboza
  2021-07-05  4:56   ` David Gibson
  2 siblings, 1 reply; 8+ messages in thread
From: Daniel Henrique Barboza @ 2021-06-21 20:59 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S . Tsirkin, Daniel Henrique Barboza, armbru, groug,
	qemu-ppc, Igor Mammedov, eblake, david

MEM_UNPLUG_ERROR is deprecated since the introduction of
DEVICE_UNPLUG_ERROR. Keep emitting both while the deprecation of
MEM_UNPLUG_ERROR is pending.

CC: Michael S. Tsirkin <mst@redhat.com>
CC: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
 hw/acpi/memory_hotplug.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
index af37889423..fb9f4d2de7 100644
--- a/hw/acpi/memory_hotplug.c
+++ b/hw/acpi/memory_hotplug.c
@@ -8,6 +8,7 @@
 #include "qapi/error.h"
 #include "qapi/qapi-events-acpi.h"
 #include "qapi/qapi-events-machine.h"
+#include "qapi/qapi-events-qdev.h"
 
 #define MEMORY_SLOTS_NUMBER          "MDNR"
 #define MEMORY_HOTPLUG_IO_REGION     "HPMR"
@@ -177,9 +178,17 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
             /* call pc-dimm unplug cb */
             hotplug_handler_unplug(hotplug_ctrl, dev, &local_err);
             if (local_err) {
+                const char *error_pretty = error_get_pretty(local_err);
+
                 trace_mhp_acpi_pc_dimm_delete_failed(mem_st->selector);
-                qapi_event_send_mem_unplug_error(dev->id,
-                                                 error_get_pretty(local_err));
+
+                /*
+                 * Send both MEM_UNPLUG_ERROR and DEVICE_UNPLUG_ERROR
+                 * while the deprecation of MEM_UNPLUG_ERROR is
+                 * pending.
+                 */
+                qapi_event_send_mem_unplug_error(dev->id, error_pretty);
+                qapi_event_send_device_unplug_error(dev->id, error_pretty);
                 error_free(local_err);
                 break;
             }
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 1/3] qapi/qdev.json: add DEVICE_UNPLUG_ERROR QAPI event
  2021-06-21 20:59 ` [PATCH v3 1/3] qapi/qdev.json: add " Daniel Henrique Barboza
@ 2021-07-05  4:52   ` David Gibson
  2021-07-07  0:20     ` Daniel Henrique Barboza
  0 siblings, 1 reply; 8+ messages in thread
From: David Gibson @ 2021-07-05  4:52 UTC (permalink / raw)
  To: Daniel Henrique Barboza; +Cc: armbru, qemu-ppc, qemu-devel, eblake, groug

[-- Attachment #1: Type: text/plain, Size: 3895 bytes --]

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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 2/3] spapr: use DEVICE_UNPLUG_ERROR to report unplug errors
  2021-06-21 20:59 ` [PATCH v3 2/3] spapr: use DEVICE_UNPLUG_ERROR to report unplug errors Daniel Henrique Barboza
@ 2021-07-05  4:55   ` David Gibson
  0 siblings, 0 replies; 8+ messages in thread
From: David Gibson @ 2021-07-05  4:55 UTC (permalink / raw)
  To: Daniel Henrique Barboza; +Cc: armbru, qemu-ppc, qemu-devel, eblake, groug

[-- Attachment #1: Type: text/plain, Size: 989 bytes --]

On Mon, Jun 21, 2021 at 05:59:06PM -0300, Daniel Henrique Barboza wrote:
> Linux Kernel 5.12 is now unisolating CPU DRCs in the device_removal
> error path, signalling that the hotunplug process wasn't successful.
> This allow us to send a DEVICE_UNPLUG_ERROR in drc_unisolate_logical()
> to signal this error to the management layer.
> 
> We also have another error path in spapr_memory_unplug_rollback() for
> configured LMB DRCs. Kernels older than 5.13 will not unisolate the LMBs
> in the hotunplug error path, but it will reconfigure them. Let's send
> the DEVICE_UNPLUG_ERROR event in that code path as well to cover the
> case of older kernels.
> 
> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>

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

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 3/3] memory_hotplug.c: send DEVICE_UNPLUG_ERROR in acpi_memory_hotplug_write()
  2021-06-21 20:59 ` [PATCH v3 3/3] memory_hotplug.c: send DEVICE_UNPLUG_ERROR in acpi_memory_hotplug_write() Daniel Henrique Barboza
@ 2021-07-05  4:56   ` David Gibson
  0 siblings, 0 replies; 8+ messages in thread
From: David Gibson @ 2021-07-05  4:56 UTC (permalink / raw)
  To: Daniel Henrique Barboza
  Cc: Michael S . Tsirkin, armbru, qemu-devel, groug, qemu-ppc,
	Igor Mammedov, eblake

[-- Attachment #1: Type: text/plain, Size: 2228 bytes --]

On Mon, Jun 21, 2021 at 05:59:07PM -0300, Daniel Henrique Barboza wrote:
> MEM_UNPLUG_ERROR is deprecated since the introduction of
> DEVICE_UNPLUG_ERROR. Keep emitting both while the deprecation of
> MEM_UNPLUG_ERROR is pending.
> 
> CC: Michael S. Tsirkin <mst@redhat.com>
> CC: Igor Mammedov <imammedo@redhat.com>
> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>

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

> ---
>  hw/acpi/memory_hotplug.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
> index af37889423..fb9f4d2de7 100644
> --- a/hw/acpi/memory_hotplug.c
> +++ b/hw/acpi/memory_hotplug.c
> @@ -8,6 +8,7 @@
>  #include "qapi/error.h"
>  #include "qapi/qapi-events-acpi.h"
>  #include "qapi/qapi-events-machine.h"
> +#include "qapi/qapi-events-qdev.h"
>  
>  #define MEMORY_SLOTS_NUMBER          "MDNR"
>  #define MEMORY_HOTPLUG_IO_REGION     "HPMR"
> @@ -177,9 +178,17 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
>              /* call pc-dimm unplug cb */
>              hotplug_handler_unplug(hotplug_ctrl, dev, &local_err);
>              if (local_err) {
> +                const char *error_pretty = error_get_pretty(local_err);
> +
>                  trace_mhp_acpi_pc_dimm_delete_failed(mem_st->selector);
> -                qapi_event_send_mem_unplug_error(dev->id,
> -                                                 error_get_pretty(local_err));
> +
> +                /*
> +                 * Send both MEM_UNPLUG_ERROR and DEVICE_UNPLUG_ERROR
> +                 * while the deprecation of MEM_UNPLUG_ERROR is
> +                 * pending.
> +                 */
> +                qapi_event_send_mem_unplug_error(dev->id, error_pretty);
> +                qapi_event_send_device_unplug_error(dev->id, error_pretty);
>                  error_free(local_err);
>                  break;
>              }

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3 1/3] qapi/qdev.json: add DEVICE_UNPLUG_ERROR QAPI event
  2021-07-05  4:52   ` David Gibson
@ 2021-07-07  0:20     ` Daniel Henrique Barboza
  0 siblings, 0 replies; 8+ messages in thread
From: Daniel Henrique Barboza @ 2021-07-07  0:20 UTC (permalink / raw)
  To: David Gibson; +Cc: armbru, qemu-ppc, qemu-devel, eblake, groug



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' } }
>>
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-07-07  0:26 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-21 20:59 [PATCH v3 0/3] DEVICE_UNPLUG_ERROR QAPI event Daniel Henrique Barboza
2021-06-21 20:59 ` [PATCH v3 1/3] qapi/qdev.json: add " Daniel Henrique Barboza
2021-07-05  4:52   ` David Gibson
2021-07-07  0:20     ` Daniel Henrique Barboza
2021-06-21 20:59 ` [PATCH v3 2/3] spapr: use DEVICE_UNPLUG_ERROR to report unplug errors Daniel Henrique Barboza
2021-07-05  4:55   ` David Gibson
2021-06-21 20:59 ` [PATCH v3 3/3] memory_hotplug.c: send DEVICE_UNPLUG_ERROR in acpi_memory_hotplug_write() Daniel Henrique Barboza
2021-07-05  4:56   ` David Gibson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.