qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/4] Add SCLP event type CPI
@ 2025-04-10 15:09 Shalini Chellathurai Saroja
  2025-04-10 15:09 ` [PATCH v4 1/4] hw/s390x: add " Shalini Chellathurai Saroja
                   ` (3 more replies)
  0 siblings, 4 replies; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-04-10 15:09 UTC (permalink / raw)
  To: qemu-s390x mailing list, Thomas Huth, Daniel Berrange
  Cc: qemu-devel mailing list, Nina Schoetterl-Glausch,
	Hendrik Brueckner, Shalini Chellathurai Saroja

Implement the Service-Call Logical Processor (SCLP) event
type Control-Program Identification (CPI) in QEMU.

Changed since v3:
- Add QOM object sclpcpi from ccw_init()
- Add SCLPEventCPI state to store the CPI data in the sclpcpi device
- Other minor changes

Changed since v2:
- Add SPDX license tag in the new file hw/s390x/sclpcpi.c
- Store the control-program Identification data in the sclpcpi device
- Update the description of CPI attributes
- Use ldq_be_p() intead of be64_to_cpu()
- Return the CPI attribute system-level as an integer in QMP
- Add compat handling for backward migration
- Other minor changes

Shalini Chellathurai Saroja (4):
  hw/s390x: add SCLP event type CPI
  hw/s390x: add Control-Program Identification to QOM
  hw/s390x: support migration of CPI data
  hw/s390x: compat handling for backward migration

 hw/s390x/event-facility.c          |   2 +
 hw/s390x/meson.build               |   1 +
 hw/s390x/s390-virtio-ccw.c         |  22 ++++
 hw/s390x/sclpcpi.c                 | 156 +++++++++++++++++++++++++++++
 include/hw/s390x/event-facility.h  |  22 ++++
 include/hw/s390x/s390-virtio-ccw.h |   1 +
 qapi/machine.json                  |  58 +++++++++++
 7 files changed, 262 insertions(+)
 create mode 100644 hw/s390x/sclpcpi.c

-- 
2.49.0



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

* [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
  2025-04-10 15:09 [PATCH v4 0/4] Add SCLP event type CPI Shalini Chellathurai Saroja
@ 2025-04-10 15:09 ` Shalini Chellathurai Saroja
  2025-04-28  9:22   ` Janis Schoetterl-Glausch
  2025-04-29  9:20   ` Nina Schoetterl-Glausch
  2025-04-10 15:09 ` [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM Shalini Chellathurai Saroja
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-04-10 15:09 UTC (permalink / raw)
  To: qemu-s390x mailing list, Thomas Huth, Daniel Berrange
  Cc: qemu-devel mailing list, Nina Schoetterl-Glausch,
	Hendrik Brueckner, Shalini Chellathurai Saroja

Implement the Service-Call Logical Processor (SCLP) event
type Control-Program Identification (CPI) in QEMU. This
event is used to send CPI identifiers from the guest to the
host. The CPI identifiers are: system type, system name,
system level and sysplex name.

System type: operating system of the guest (e.g. "LINUX").
System name: user configurable name of the guest (e.g. "TESTVM").
System level: distribution and kernel version, if the system type is Linux
(e.g. 0x50e00).
Sysplex name: name of the cluster which the guest belongs to (if any)
(e.g. "PLEX").

Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
 hw/s390x/event-facility.c         |  2 +
 hw/s390x/meson.build              |  1 +
 hw/s390x/s390-virtio-ccw.c        | 14 +++++
 hw/s390x/sclpcpi.c                | 92 +++++++++++++++++++++++++++++++
 include/hw/s390x/event-facility.h | 13 +++++
 5 files changed, 122 insertions(+)
 create mode 100644 hw/s390x/sclpcpi.c

diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c
index 2b0332c20e..60237b8581 100644
--- a/hw/s390x/event-facility.c
+++ b/hw/s390x/event-facility.c
@@ -4,6 +4,7 @@
  *       handles SCLP event types
  *          - Signal Quiesce - system power down
  *          - ASCII Console Data - VT220 read and write
+ *          - Control-Program Identification - Send OS data from guest to host
  *
  * Copyright IBM, Corp. 2012
  *
@@ -40,6 +41,7 @@ struct SCLPEventFacility {
     SysBusDevice parent_obj;
     SCLPEventsBus sbus;
     SCLPEvent quiesce, cpu_hotplug;
+    SCLPEventCPI cpi;
     /* guest's receive mask */
     union {
         uint32_t receive_mask_pieces[2];
diff --git a/hw/s390x/meson.build b/hw/s390x/meson.build
index 3bbebfd817..eb7950489c 100644
--- a/hw/s390x/meson.build
+++ b/hw/s390x/meson.build
@@ -13,6 +13,7 @@ s390x_ss.add(files(
   's390-skeys.c',
   's390-stattrib.c',
   'sclp.c',
+  'sclpcpi.c',
   'sclpcpu.c',
   'sclpquiesce.c',
   'tod.c',
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 75b32182eb..7f28cbd1de 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -260,6 +260,17 @@ static void s390_create_sclpconsole(SCLPDevice *sclp,
     qdev_realize_and_unref(dev, ev_fac_bus, &error_fatal);
 }
 
+static void s390_create_sclpcpi(SCLPDevice *sclp)
+{
+    SCLPEventFacility *ef = sclp->event_facility;
+    BusState *ev_fac_bus = sclp_get_event_facility_bus(ef);
+    DeviceState *dev;
+
+    dev = qdev_new(TYPE_SCLP_EVENT_CPI);
+    object_property_add_child(OBJECT(ef), "sclpcpi", OBJECT(dev));
+    qdev_realize_and_unref(dev, ev_fac_bus, &error_fatal);
+}
+
 static void ccw_init(MachineState *machine)
 {
     MachineClass *mc = MACHINE_GET_CLASS(machine);
@@ -323,6 +334,9 @@ static void ccw_init(MachineState *machine)
 
     /* init the TOD clock */
     s390_init_tod();
+
+    /* init SCLP event Control-Program Identification */
+    s390_create_sclpcpi(ms->sclp);
 }
 
 static void s390_cpu_plug(HotplugHandler *hotplug_dev,
diff --git a/hw/s390x/sclpcpi.c b/hw/s390x/sclpcpi.c
new file mode 100644
index 0000000000..13589459b1
--- /dev/null
+++ b/hw/s390x/sclpcpi.c
@@ -0,0 +1,92 @@
+ /*
+  * SPDX-License-Identifier: GPL-2.0-or-later
+  *
+  * SCLP event type 11 - Control-Program Identification (CPI):
+  *    CPI is used to send program identifiers from the guest to the
+  *    Service-Call Logical Processor (SCLP). It is not sent by the SCLP.
+  *    Please refer S390ControlProgramId QOM-type description for details
+  *    on the contents of the CPI.
+  *
+  * Copyright IBM, Corp. 2024
+  *
+  * Authors:
+  *  Shalini Chellathurai Saroja <shalini@linux.ibm.com>
+  *
+  * This work is licensed under the terms of the GNU GPL, version 2 or (at your
+  * option) any later version.  See the COPYING file in the top-level directory.
+  *
+  */
+
+#include "qemu/osdep.h"
+#include "hw/s390x/event-facility.h"
+
+typedef struct Data {
+    uint8_t id_format;
+    uint8_t reserved0;
+    uint8_t system_type[8];
+    uint64_t reserved1;
+    uint8_t system_name[8];
+    uint64_t reserved2;
+    uint64_t system_level;
+    uint64_t reserved3;
+    uint8_t sysplex_name[8];
+    uint8_t reserved4[16];
+} QEMU_PACKED Data;
+
+typedef struct ControlProgramIdMsg {
+    EventBufferHeader ebh;
+    Data data;
+} QEMU_PACKED ControlProgramIdMsg;
+
+static bool can_handle_event(uint8_t type)
+{
+    return type == SCLP_EVENT_CTRL_PGM_ID;
+}
+
+static sccb_mask_t send_mask(void)
+{
+    return 0;
+}
+
+/* Enable SCLP to accept buffers of event type CPI from the control-program. */
+static sccb_mask_t receive_mask(void)
+{
+    return SCLP_EVENT_MASK_CTRL_PGM_ID;
+}
+
+static int write_event_data(SCLPEvent *event, EventBufferHeader *evt_buf_hdr)
+{
+    ControlProgramIdMsg *cpim = container_of(evt_buf_hdr, ControlProgramIdMsg,
+                                             ebh);
+
+    cpim->ebh.flags = SCLP_EVENT_BUFFER_ACCEPTED;
+    return SCLP_RC_NORMAL_COMPLETION;
+}
+
+static void cpi_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    SCLPEventClass *k = SCLP_EVENT_CLASS(klass);
+
+    dc->user_creatable = false;
+
+    k->can_handle_event = can_handle_event;
+    k->get_send_mask = send_mask;
+    k->get_receive_mask = receive_mask;
+    k->write_event_data = write_event_data;
+}
+
+static const TypeInfo sclp_cpi_info = {
+    .name          = TYPE_SCLP_EVENT_CPI,
+    .parent        = TYPE_SCLP_EVENT,
+    .instance_size = sizeof(SCLPEventCPI),
+    .class_init    = cpi_class_init,
+};
+
+static void sclp_cpi_register_types(void)
+{
+    type_register_static(&sclp_cpi_info);
+}
+
+type_init(sclp_cpi_register_types)
+
diff --git a/include/hw/s390x/event-facility.h b/include/hw/s390x/event-facility.h
index ff874e792d..ef469e62ae 100644
--- a/include/hw/s390x/event-facility.h
+++ b/include/hw/s390x/event-facility.h
@@ -25,6 +25,7 @@
 #define SCLP_EVENT_MESSAGE                      0x02
 #define SCLP_EVENT_CONFIG_MGT_DATA              0x04
 #define SCLP_EVENT_PMSGCMD                      0x09
+#define SCLP_EVENT_CTRL_PGM_ID                  0x0b
 #define SCLP_EVENT_ASCII_CONSOLE_DATA           0x1a
 #define SCLP_EVENT_SIGNAL_QUIESCE               0x1d
 
@@ -35,6 +36,7 @@
 #define SCLP_EVENT_MASK_MSG             SCLP_EVMASK(SCLP_EVENT_MESSAGE)
 #define SCLP_EVENT_MASK_CONFIG_MGT_DATA SCLP_EVMASK(SCLP_EVENT_CONFIG_MGT_DATA)
 #define SCLP_EVENT_MASK_PMSGCMD         SCLP_EVMASK(SCLP_EVENT_PMSGCMD)
+#define SCLP_EVENT_MASK_CTRL_PGM_ID     SCLP_EVMASK(SCLP_EVENT_CTRL_PGM_ID)
 #define SCLP_EVENT_MASK_MSG_ASCII       SCLP_EVMASK(SCLP_EVENT_ASCII_CONSOLE_DATA)
 #define SCLP_EVENT_MASK_SIGNAL_QUIESCE  SCLP_EVMASK(SCLP_EVENT_SIGNAL_QUIESCE)
 
@@ -191,6 +193,17 @@ struct SCLPEventClass {
     bool (*can_handle_event)(uint8_t type);
 };
 
+#define TYPE_SCLP_EVENT_CPI "sclpcpi"
+typedef struct SCLPEventCPIClass SCLPEventCPIClass;
+typedef struct SCLPEventCPI SCLPEventCPI;
+OBJECT_DECLARE_TYPE(SCLPEventCPI, SCLPEventCPIClass,
+                    SCLP_EVENT_CPI)
+
+struct SCLPEventCPI {
+    DeviceState qdev;
+    SCLPEvent event;
+};
+
 #define TYPE_SCLP_EVENT_FACILITY "s390-sclp-event-facility"
 typedef struct SCLPEventFacility SCLPEventFacility;
 typedef struct SCLPEventFacilityClass SCLPEventFacilityClass;
-- 
2.49.0



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

* [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM
  2025-04-10 15:09 [PATCH v4 0/4] Add SCLP event type CPI Shalini Chellathurai Saroja
  2025-04-10 15:09 ` [PATCH v4 1/4] hw/s390x: add " Shalini Chellathurai Saroja
@ 2025-04-10 15:09 ` Shalini Chellathurai Saroja
  2025-04-28 12:01   ` Nina Schoetterl-Glausch
  2025-04-30 10:34   ` Thomas Huth
  2025-04-10 15:09 ` [PATCH v4 3/4] hw/s390x: support migration of CPI data Shalini Chellathurai Saroja
  2025-04-10 15:09 ` [PATCH v4 4/4] hw/s390x: compat handling for backward migration Shalini Chellathurai Saroja
  3 siblings, 2 replies; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-04-10 15:09 UTC (permalink / raw)
  To: qemu-s390x mailing list, Thomas Huth, Daniel Berrange
  Cc: qemu-devel mailing list, Nina Schoetterl-Glausch,
	Hendrik Brueckner, Shalini Chellathurai Saroja

Add Control-Program Identification data to the QEMU Object
Model (QOM), along with the timestamp in which the data was received.

Example:
virsh # qemu-monitor-command vm --pretty '{
"execute": "qom-get",
"arguments": {
"path": "/machine/sclp/s390-sclp-event-facility/sclpcpi",
"property": "control-program-id" }}'
{
  "return": {
    "timestamp": 1742390410685762000,
    "system-level": 74872343805430528,
    "sysplex-name": "PLEX ",
    "system-name": "TESTVM  ",
    "system-type": "LINUX   "
  },
  "id": "libvirt-15"
}

Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
---
 hw/s390x/sclpcpi.c                | 39 +++++++++++++++++++++
 include/hw/s390x/event-facility.h |  9 +++++
 qapi/machine.json                 | 58 +++++++++++++++++++++++++++++++
 3 files changed, 106 insertions(+)

diff --git a/hw/s390x/sclpcpi.c b/hw/s390x/sclpcpi.c
index 13589459b1..dcc8bd3245 100644
--- a/hw/s390x/sclpcpi.c
+++ b/hw/s390x/sclpcpi.c
@@ -18,7 +18,10 @@
   */
 
 #include "qemu/osdep.h"
+#include "qemu/timer.h"
 #include "hw/s390x/event-facility.h"
+#include "hw/s390x/ebcdic.h"
+#include "qapi/qapi-visit-machine.h"
 
 typedef struct Data {
     uint8_t id_format;
@@ -58,11 +61,39 @@ static int write_event_data(SCLPEvent *event, EventBufferHeader *evt_buf_hdr)
 {
     ControlProgramIdMsg *cpim = container_of(evt_buf_hdr, ControlProgramIdMsg,
                                              ebh);
+    SCLPEventCPI *e = SCLP_EVENT_CPI(event);
+
+    ascii_put(e->cpi.system_type, (char *)cpim->data.system_type, 8);
+    ascii_put(e->cpi.system_name, (char *)cpim->data.system_name, 8);
+    ascii_put(e->cpi.sysplex_name, (char *)cpim->data.sysplex_name, 8);
+    e->cpi.system_level = ldq_be_p(&cpim->data.system_level);
+    e->cpi.timestamp = qemu_clock_get_ns(QEMU_CLOCK_HOST);
 
     cpim->ebh.flags = SCLP_EVENT_BUFFER_ACCEPTED;
     return SCLP_RC_NORMAL_COMPLETION;
 }
 
+static void get_control_program_id(Object *obj, Visitor *v,
+                                   const char *name, void *opaque,
+                                   Error **errp)
+{
+    SCLPEventCPI *e = SCLP_EVENT_CPI(obj);
+    S390ControlProgramId *cpi;
+
+    cpi = &(S390ControlProgramId){
+        .system_type = g_strndup((char *) e->cpi.system_type,
+                                 sizeof(e->cpi.system_type)),
+        .system_name = g_strndup((char *) e->cpi.system_name,
+                                 sizeof(e->cpi.system_name)),
+        .system_level = e->cpi.system_level,
+        .sysplex_name = g_strndup((char *) e->cpi.sysplex_name,
+                                  sizeof(e->cpi.sysplex_name)),
+        .timestamp = e->cpi.timestamp
+    };
+
+    visit_type_S390ControlProgramId(v, name, &cpi, errp);
+}
+
 static void cpi_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
@@ -74,6 +105,14 @@ static void cpi_class_init(ObjectClass *klass, void *data)
     k->get_send_mask = send_mask;
     k->get_receive_mask = receive_mask;
     k->write_event_data = write_event_data;
+
+    object_class_property_add(klass, "control-program-id",
+                              "S390ControlProgramId",
+                              get_control_program_id,
+                              NULL, NULL, NULL);
+    object_class_property_set_description(klass, "control-program-id",
+        "Control-program identifiers provide data about the guest "
+        "operating system");
 }
 
 static const TypeInfo sclp_cpi_info = {
diff --git a/include/hw/s390x/event-facility.h b/include/hw/s390x/event-facility.h
index ef469e62ae..123c4ac49c 100644
--- a/include/hw/s390x/event-facility.h
+++ b/include/hw/s390x/event-facility.h
@@ -199,9 +199,18 @@ typedef struct SCLPEventCPI SCLPEventCPI;
 OBJECT_DECLARE_TYPE(SCLPEventCPI, SCLPEventCPIClass,
                     SCLP_EVENT_CPI)
 
+typedef struct ControlProgramId {
+    uint8_t system_type[8];
+    uint8_t system_name[8];
+    uint64_t system_level;
+    uint8_t sysplex_name[8];
+    uint64_t timestamp;
+} ControlProgramId;
+
 struct SCLPEventCPI {
     DeviceState qdev;
     SCLPEvent event;
+    ControlProgramId cpi;
 };
 
 #define TYPE_SCLP_EVENT_FACILITY "s390-sclp-event-facility"
diff --git a/qapi/machine.json b/qapi/machine.json
index a6b8795b09..cd2bcd2d13 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -1898,3 +1898,61 @@
 { 'command': 'x-query-interrupt-controllers',
   'returns': 'HumanReadableText',
   'features': [ 'unstable' ]}
+
+##
+# @S390ControlProgramId:
+#
+# Control-program identifiers provide data about the guest operating system.
+# The control-program identifiers are: system type, system name, system level
+# and sysplex name.
+#
+# In Linux, all the control-program identifiers are user configurable. The
+# system type, system name, and sysplex name use EBCDIC characters from
+# this set: capital A-Z, 0-9, $, @, #, and blank.  In Linux, the system type,
+# system name and sysplex name are arbitrary free-form texts.
+#
+# In Linux, the 8-byte hexadecimal system-level has the format
+# 0x<a><b><cc><dd><eeee><ff><gg><hh>, where:
+# <a>: is one hexadecimal byte, its most significant bit indicates hypervisor
+# use
+# <b>: is one digit that represents Linux distributions as follows
+# 0: generic Linux
+# 1: Red Hat Enterprise Linux
+# 2: SUSE Linux Enterprise Server
+# 3: Canonical Ubuntu
+# 4: Fedora
+# 5: openSUSE Leap
+# 6: Debian GNU/Linux
+# 7: Red Hat Enterprise Linux CoreOS
+# <cc>: are two digits for a distribution-specific encoding of the major version
+# of the distribution
+# <dd>: are two digits for a distribution-specific encoding of the minor version
+# of the distribution
+# <eeee>: are four digits for the patch level of the distribution
+# <ff>: are two digits for the major version of the kernel
+# <gg>: are two digits for the minor version of the kernel
+# <hh>: are two digits for the stable version of the kernel
+# (e.g. 74872343805430528, when converted to hex is 0x010a000000060b00). On
+# machines prior to z16, some of the values are not available to display.
+#
+# Sysplex refers to a cluster of logical partitions that communicates and
+# co-operates with each other.
+#
+# @system-type: operating system (e.g. "LINUX   ")
+#
+# @system-name: user configurable name of the VM (e.g. "TESTVM  ")
+#
+# @system-level: distribution and kernel version in Linux
+#
+# @sysplex-name: sysplex which the VM belongs to, if any (e.g. "PLEX ")
+#
+# @timestamp: latest update of CPI data in nanoseconds since the UNIX EPOCH
+#
+# Since: 10.0
+##
+{ 'struct': 'S390ControlProgramId', 'data': {
+     'system-type': 'str',
+     'system-name': 'str',
+     'system-level': 'uint64',
+     'sysplex-name': 'str',
+     'timestamp': 'uint64' } }
-- 
2.49.0



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

* [PATCH v4 3/4] hw/s390x: support migration of CPI data
  2025-04-10 15:09 [PATCH v4 0/4] Add SCLP event type CPI Shalini Chellathurai Saroja
  2025-04-10 15:09 ` [PATCH v4 1/4] hw/s390x: add " Shalini Chellathurai Saroja
  2025-04-10 15:09 ` [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM Shalini Chellathurai Saroja
@ 2025-04-10 15:09 ` Shalini Chellathurai Saroja
  2025-04-10 15:09 ` [PATCH v4 4/4] hw/s390x: compat handling for backward migration Shalini Chellathurai Saroja
  3 siblings, 0 replies; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-04-10 15:09 UTC (permalink / raw)
  To: qemu-s390x mailing list, Thomas Huth, Daniel Berrange
  Cc: qemu-devel mailing list, Nina Schoetterl-Glausch,
	Hendrik Brueckner, Shalini Chellathurai Saroja

Register Control-Program Identification data with the live
migration infrastructure.

Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
Reviewed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
---
 hw/s390x/sclpcpi.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/hw/s390x/sclpcpi.c b/hw/s390x/sclpcpi.c
index dcc8bd3245..40a74c16b5 100644
--- a/hw/s390x/sclpcpi.c
+++ b/hw/s390x/sclpcpi.c
@@ -22,6 +22,7 @@
 #include "hw/s390x/event-facility.h"
 #include "hw/s390x/ebcdic.h"
 #include "qapi/qapi-visit-machine.h"
+#include "migration/vmstate.h"
 
 typedef struct Data {
     uint8_t id_format;
@@ -94,12 +95,36 @@ static void get_control_program_id(Object *obj, Visitor *v,
     visit_type_S390ControlProgramId(v, name, &cpi, errp);
 }
 
+static const VMStateDescription vmstate_control_program_id = {
+    .name = "s390_control_program_id",
+    .version_id = 0,
+    .fields = (const VMStateField[]) {
+        VMSTATE_UINT8_ARRAY(system_type, ControlProgramId, 8),
+        VMSTATE_UINT8_ARRAY(system_name, ControlProgramId, 8),
+        VMSTATE_UINT64(system_level, ControlProgramId),
+        VMSTATE_UINT8_ARRAY(sysplex_name, ControlProgramId, 8),
+        VMSTATE_UINT64(timestamp, ControlProgramId),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static const VMStateDescription vmstate_sclpcpi = {
+    .name = "s390_sclpcpi",
+    .version_id = 0,
+    .fields = (const VMStateField[]) {
+        VMSTATE_STRUCT(cpi, SCLPEventCPI, 0, vmstate_control_program_id,
+                       ControlProgramId),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static void cpi_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
     SCLPEventClass *k = SCLP_EVENT_CLASS(klass);
 
     dc->user_creatable = false;
+    dc->vmsd =  &vmstate_sclpcpi;
 
     k->can_handle_event = can_handle_event;
     k->get_send_mask = send_mask;
-- 
2.49.0



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

* [PATCH v4 4/4] hw/s390x: compat handling for backward migration
  2025-04-10 15:09 [PATCH v4 0/4] Add SCLP event type CPI Shalini Chellathurai Saroja
                   ` (2 preceding siblings ...)
  2025-04-10 15:09 ` [PATCH v4 3/4] hw/s390x: support migration of CPI data Shalini Chellathurai Saroja
@ 2025-04-10 15:09 ` Shalini Chellathurai Saroja
  2025-04-28 12:05   ` Nina Schoetterl-Glausch
  3 siblings, 1 reply; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-04-10 15:09 UTC (permalink / raw)
  To: qemu-s390x mailing list, Thomas Huth, Daniel Berrange
  Cc: qemu-devel mailing list, Nina Schoetterl-Glausch,
	Hendrik Brueckner, Shalini Chellathurai Saroja

Add Control-Program Identification (CPI) device to QOM only when the virtual
machine supports CPI. CPI is supported from "s390-ccw-virtio-10.0" machine
and higher.

Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
---
 hw/s390x/s390-virtio-ccw.c         | 10 +++++++++-
 include/hw/s390x/s390-virtio-ccw.h |  1 +
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 7f28cbd1de..81832ee638 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -274,6 +274,7 @@ static void s390_create_sclpcpi(SCLPDevice *sclp)
 static void ccw_init(MachineState *machine)
 {
     MachineClass *mc = MACHINE_GET_CLASS(machine);
+    S390CcwMachineClass *s390mc = S390_CCW_MACHINE_CLASS(mc);
     S390CcwMachineState *ms = S390_CCW_MACHINE(machine);
     int ret;
     VirtualCssBus *css_bus;
@@ -336,7 +337,10 @@ static void ccw_init(MachineState *machine)
     s390_init_tod();
 
     /* init SCLP event Control-Program Identification */
-    s390_create_sclpcpi(ms->sclp);
+    if (s390mc->use_cpi) {
+        s390_create_sclpcpi(ms->sclp);
+    }
+
 }
 
 static void s390_cpu_plug(HotplugHandler *hotplug_dev,
@@ -827,6 +831,7 @@ static void ccw_machine_class_init(ObjectClass *oc, void *data)
 
     s390mc->hpage_1m_allowed = true;
     s390mc->max_threads = 1;
+    s390mc->use_cpi = true;
     mc->reset = s390_machine_reset;
     mc->block_default_type = IF_VIRTIO;
     mc->no_cdrom = 1;
@@ -955,6 +960,9 @@ static void ccw_machine_9_2_class_options(MachineClass *mc)
         { TYPE_S390_PCI_DEVICE, "relaxed-translation", "off", },
     };
 
+    S390CcwMachineClass *s390mc = S390_CCW_MACHINE_CLASS(mc);
+    s390mc->use_cpi = false;
+
     ccw_machine_10_0_class_options(mc);
     compat_props_add(mc->compat_props, hw_compat_9_2, hw_compat_9_2_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-virtio-ccw.h
index 686d9497d2..fc4112fbf5 100644
--- a/include/hw/s390x/s390-virtio-ccw.h
+++ b/include/hw/s390x/s390-virtio-ccw.h
@@ -55,6 +55,7 @@ struct S390CcwMachineClass {
     /*< public >*/
     bool hpage_1m_allowed;
     int max_threads;
+    bool use_cpi;
 };
 
 /* 1M huge page mappings allowed by the machine */
-- 
2.49.0



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

* Re: [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
  2025-04-10 15:09 ` [PATCH v4 1/4] hw/s390x: add " Shalini Chellathurai Saroja
@ 2025-04-28  9:22   ` Janis Schoetterl-Glausch
  2025-04-29  9:20   ` Nina Schoetterl-Glausch
  1 sibling, 0 replies; 21+ messages in thread
From: Janis Schoetterl-Glausch @ 2025-04-28  9:22 UTC (permalink / raw)
  To: Shalini Chellathurai Saroja, qemu-s390x mailing list, Thomas Huth,
	Daniel Berrange
  Cc: qemu-devel mailing list, Hendrik Brueckner

On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
> Implement the Service-Call Logical Processor (SCLP) event
> type Control-Program Identification (CPI) in QEMU. This
> event is used to send CPI identifiers from the guest to the
> host. The CPI identifiers are: system type, system name,
> system level and sysplex name.
> 
> System type: operating system of the guest (e.g. "LINUX").
> System name: user configurable name of the guest (e.g. "TESTVM").
> System level: distribution and kernel version, if the system type is Linux
> (e.g. 0x50e00).
> Sysplex name: name of the cluster which the guest belongs to (if any)
> (e.g. "PLEX").
> 
> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
> ---
>  hw/s390x/event-facility.c         |  2 +
>  hw/s390x/meson.build              |  1 +
>  hw/s390x/s390-virtio-ccw.c        | 14 +++++
>  hw/s390x/sclpcpi.c                | 92 +++++++++++++++++++++++++++++++
>  include/hw/s390x/event-facility.h | 13 +++++
>  5 files changed, 122 insertions(+)
>  create mode 100644 hw/s390x/sclpcpi.c
> 
> diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c
> index 2b0332c20e..60237b8581 100644
> --- a/hw/s390x/event-facility.c
> +++ b/hw/s390x/event-facility.c
> @@ -4,6 +4,7 @@
>   *       handles SCLP event types
>   *          - Signal Quiesce - system power down
>   *          - ASCII Console Data - VT220 read and write
> + *          - Control-Program Identification - Send OS data from guest to host
>   *
>   * Copyright IBM, Corp. 2012
>   *
> @@ -40,6 +41,7 @@ struct SCLPEventFacility {
>      SysBusDevice parent_obj;
>      SCLPEventsBus sbus;
>      SCLPEvent quiesce, cpu_hotplug;
> +    SCLPEventCPI cpi;
>      /* guest's receive mask */
>      union {
>          uint32_t receive_mask_pieces[2];
> diff --git a/hw/s390x/meson.build b/hw/s390x/meson.build
> index 3bbebfd817..eb7950489c 100644
> --- a/hw/s390x/meson.build
> +++ b/hw/s390x/meson.build
> @@ -13,6 +13,7 @@ s390x_ss.add(files(
>    's390-skeys.c',
>    's390-stattrib.c',
>    'sclp.c',
> +  'sclpcpi.c',
>    'sclpcpu.c',
>    'sclpquiesce.c',
>    'tod.c',
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 75b32182eb..7f28cbd1de 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -260,6 +260,17 @@ static void s390_create_sclpconsole(SCLPDevice *sclp,
>      qdev_realize_and_unref(dev, ev_fac_bus, &error_fatal);
>  }
>  
> +static void s390_create_sclpcpi(SCLPDevice *sclp)
> +{
> +    SCLPEventFacility *ef = sclp->event_facility;
> +    BusState *ev_fac_bus = sclp_get_event_facility_bus(ef);
> +    DeviceState *dev;
> +
> +    dev = qdev_new(TYPE_SCLP_EVENT_CPI);
> +    object_property_add_child(OBJECT(ef), "sclpcpi", OBJECT(dev));
> +    qdev_realize_and_unref(dev, ev_fac_bus, &error_fatal);

I wonder if we should drop this and add control-program-id directly
on the event facility. I don't see what purpose having the intermediate
level sclpcpi serves.

> +}

[...]

> diff --git a/include/hw/s390x/event-facility.h b/include/hw/s390x/event-facility.h
> index ff874e792d..ef469e62ae 100644
> --- a/include/hw/s390x/event-facility.h
> +++ b/include/hw/s390x/event-facility.h

[...]
   I. 
> +struct SCLPEventCPI {
> +    DeviceState qdev;
> +    SCLPEvent event;

I think you should just inherit from SCLPEvent, which in turn inherits from DeviceState.
So without the qdev.

> +};
> +
>  #define TYPE_SCLP_EVENT_FACILITY "s390-sclp-event-facility"
>  typedef struct SCLPEventFacility SCLPEventFacility;
>  typedef struct SCLPEventFacilityClass SCLPEventFacilityClass;

-- 
IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Wolfgang Wendt Geschäftsführung: David Faller Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB
243294


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

* Re: [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM
  2025-04-10 15:09 ` [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM Shalini Chellathurai Saroja
@ 2025-04-28 12:01   ` Nina Schoetterl-Glausch
  2025-05-05  7:27     ` Shalini Chellathurai Saroja
  2025-04-30 10:34   ` Thomas Huth
  1 sibling, 1 reply; 21+ messages in thread
From: Nina Schoetterl-Glausch @ 2025-04-28 12:01 UTC (permalink / raw)
  To: Shalini Chellathurai Saroja, qemu-s390x mailing list, Thomas Huth,
	Daniel Berrange
  Cc: qemu-devel mailing list, Hendrik Brueckner

On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
> Add Control-Program Identification data to the QEMU Object
> Model (QOM), along with the timestamp in which the data was received.
> 
> Example:
> virsh # qemu-monitor-command vm --pretty '{
> "execute": "qom-get",
> "arguments": {
> "path": "/machine/sclp/s390-sclp-event-facility/sclpcpi",
> "property": "control-program-id" }}'
> {
>   "return": {
>     "timestamp": 1742390410685762000,
>     "system-level": 74872343805430528,
>     "sysplex-name": "PLEX ",
>     "system-name": "TESTVM  ",
>     "system-type": "LINUX   "
>   },
>   "id": "libvirt-15"
> }
> 
> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
> ---
>  hw/s390x/sclpcpi.c                | 39 +++++++++++++++++++++
>  include/hw/s390x/event-facility.h |  9 +++++
>  qapi/machine.json                 | 58 +++++++++++++++++++++++++++++++
>  3 files changed, 106 insertions(+)

[...]

> --- a/include/hw/s390x/event-facility.h
> +++ b/include/hw/s390x/event-facility.h
> @@ -199,9 +199,18 @@ typedef struct SCLPEventCPI SCLPEventCPI;
>  OBJECT_DECLARE_TYPE(SCLPEventCPI, SCLPEventCPIClass,
>                      SCLP_EVENT_CPI)
>  
> +typedef struct ControlProgramId {
> +    uint8_t system_type[8];
> +    uint8_t system_name[8];
> +    uint64_t system_level;
> +    uint8_t sysplex_name[8];
> +    uint64_t timestamp;
> +} ControlProgramId;
> +
>  struct SCLPEventCPI {
>      DeviceState qdev;
>      SCLPEvent event;
> +    ControlProgramId cpi;

Now that this struct exists I would go ahead and inline ControlProgramId.

>  };
>  
>  #define TYPE_SCLP_EVENT_FACILITY "s390-sclp-event-facility"

[...]
-- 
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294


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

* Re: [PATCH v4 4/4] hw/s390x: compat handling for backward migration
  2025-04-10 15:09 ` [PATCH v4 4/4] hw/s390x: compat handling for backward migration Shalini Chellathurai Saroja
@ 2025-04-28 12:05   ` Nina Schoetterl-Glausch
  2025-05-05  8:54     ` Shalini Chellathurai Saroja
  0 siblings, 1 reply; 21+ messages in thread
From: Nina Schoetterl-Glausch @ 2025-04-28 12:05 UTC (permalink / raw)
  To: Shalini Chellathurai Saroja, qemu-s390x mailing list, Thomas Huth,
	Daniel Berrange
  Cc: qemu-devel mailing list, Hendrik Brueckner

On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
> Add Control-Program Identification (CPI) device to QOM only when the virtual
> machine supports CPI. CPI is supported from "s390-ccw-virtio-10.0" machine
> and higher.
> 
> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
> ---
>  hw/s390x/s390-virtio-ccw.c         | 10 +++++++++-
>  include/hw/s390x/s390-virtio-ccw.h |  1 +
>  2 files changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 7f28cbd1de..81832ee638 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -274,6 +274,7 @@ static void s390_create_sclpcpi(SCLPDevice *sclp)
>  static void ccw_init(MachineState *machine)
>  {
>      MachineClass *mc = MACHINE_GET_CLASS(machine);
> +    S390CcwMachineClass *s390mc = S390_CCW_MACHINE_CLASS(mc);
>      S390CcwMachineState *ms = S390_CCW_MACHINE(machine);
>      int ret;
>      VirtualCssBus *css_bus;
> @@ -336,7 +337,10 @@ static void ccw_init(MachineState *machine)
>      s390_init_tod();
>  
>      /* init SCLP event Control-Program Identification */
> -    s390_create_sclpcpi(ms->sclp);
> +    if (s390mc->use_cpi) {
> +        s390_create_sclpcpi(ms->sclp);
> +    }

Fixing this in a separate commit could be bad for bisecting.
You introduce use_cpi in an earlier commit set to false and
then flipping it in the migration patch for new machines.
This way there is no broken intermediate state.

I would also squash the compat migration changes into the previous
patch.

>  }
>  
>  static void s390_cpu_plug(HotplugHandler *hotplug_dev,
> @@ -827,6 +831,7 @@ static void ccw_machine_class_init(ObjectClass *oc, void *data)
>  
>      s390mc->hpage_1m_allowed = true;
>      s390mc->max_threads = 1;
> +    s390mc->use_cpi = true;
>      mc->reset = s390_machine_reset;
>      mc->block_default_type = IF_VIRTIO;
>      mc->no_cdrom = 1;
> @@ -955,6 +960,9 @@ static void ccw_machine_9_2_class_options(MachineClass *mc)
>          { TYPE_S390_PCI_DEVICE, "relaxed-translation", "off", },
>      };
>  
> +    S390CcwMachineClass *s390mc = S390_CCW_MACHINE_CLASS(mc);
> +    s390mc->use_cpi = false;
> +
>      ccw_machine_10_0_class_options(mc);
>      compat_props_add(mc->compat_props, hw_compat_9_2, hw_compat_9_2_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-virtio-ccw.h
> index 686d9497d2..fc4112fbf5 100644
> --- a/include/hw/s390x/s390-virtio-ccw.h
> +++ b/include/hw/s390x/s390-virtio-ccw.h
> @@ -55,6 +55,7 @@ struct S390CcwMachineClass {
>      /*< public >*/
>      bool hpage_1m_allowed;
>      int max_threads;
> +    bool use_cpi;
>  };
>  
>  /* 1M huge page mappings allowed by the machine */

-- 
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294


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

* Re: [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
  2025-04-10 15:09 ` [PATCH v4 1/4] hw/s390x: add " Shalini Chellathurai Saroja
  2025-04-28  9:22   ` Janis Schoetterl-Glausch
@ 2025-04-29  9:20   ` Nina Schoetterl-Glausch
  2025-05-05  6:58     ` Shalini Chellathurai Saroja
  1 sibling, 1 reply; 21+ messages in thread
From: Nina Schoetterl-Glausch @ 2025-04-29  9:20 UTC (permalink / raw)
  To: Shalini Chellathurai Saroja, qemu-s390x mailing list, Thomas Huth,
	Daniel Berrange
  Cc: qemu-devel mailing list, Hendrik Brueckner

On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
> Implement the Service-Call Logical Processor (SCLP) event
> type Control-Program Identification (CPI) in QEMU. This
> event is used to send CPI identifiers from the guest to the
> host. The CPI identifiers are: system type, system name,
> system level and sysplex name.
> 
> System type: operating system of the guest (e.g. "LINUX").
> System name: user configurable name of the guest (e.g. "TESTVM").
> System level: distribution and kernel version, if the system type is Linux
> (e.g. 0x50e00).
> Sysplex name: name of the cluster which the guest belongs to (if any)
> (e.g. "PLEX").
> 
> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
> ---
>  hw/s390x/event-facility.c         |  2 +
>  hw/s390x/meson.build              |  1 +
>  hw/s390x/s390-virtio-ccw.c        | 14 +++++
>  hw/s390x/sclpcpi.c                | 92 +++++++++++++++++++++++++++++++
>  include/hw/s390x/event-facility.h | 13 +++++
>  5 files changed, 122 insertions(+)
>  create mode 100644 hw/s390x/sclpcpi.c

[...]


>  static void s390_cpu_plug(HotplugHandler *hotplug_dev,
> diff --git a/hw/s390x/sclpcpi.c b/hw/s390x/sclpcpi.c
> new file mode 100644
> index 0000000000..13589459b1
> --- /dev/null
> +++ b/hw/s390x/sclpcpi.c

[...]

> +static void cpi_class_init(ObjectClass *klass, void *data)

Should be 'const void *data'.

> +{
> +    DeviceClass *dc = DEVICE_CLASS(klass);
> +    SCLPEventClass *k = SCLP_EVENT_CLASS(klass);
> +
> +    dc->user_creatable = false;
> +
> +    k->can_handle_event = can_handle_event;
> +    k->get_send_mask = send_mask;
> +    k->get_receive_mask = receive_mask;
> +    k->write_event_data = write_event_data;
> +}

[...]

-- 
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294


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

* Re: [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM
  2025-04-10 15:09 ` [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM Shalini Chellathurai Saroja
  2025-04-28 12:01   ` Nina Schoetterl-Glausch
@ 2025-04-30 10:34   ` Thomas Huth
  2025-05-05  7:42     ` Shalini Chellathurai Saroja
  1 sibling, 1 reply; 21+ messages in thread
From: Thomas Huth @ 2025-04-30 10:34 UTC (permalink / raw)
  To: Shalini Chellathurai Saroja, qemu-s390x mailing list,
	Daniel Berrange
  Cc: qemu-devel mailing list, Nina Schoetterl-Glausch,
	Hendrik Brueckner

On 10/04/2025 17.09, Shalini Chellathurai Saroja wrote:
> Add Control-Program Identification data to the QEMU Object
> Model (QOM), along with the timestamp in which the data was received.
...
> diff --git a/hw/s390x/sclpcpi.c b/hw/s390x/sclpcpi.c
> index 13589459b1..dcc8bd3245 100644
> --- a/hw/s390x/sclpcpi.c
> +++ b/hw/s390x/sclpcpi.c
> @@ -18,7 +18,10 @@
>     */
>   
>   #include "qemu/osdep.h"
> +#include "qemu/timer.h"
>   #include "hw/s390x/event-facility.h"
> +#include "hw/s390x/ebcdic.h"
> +#include "qapi/qapi-visit-machine.h"
>   
>   typedef struct Data {
>       uint8_t id_format;
> @@ -58,11 +61,39 @@ static int write_event_data(SCLPEvent *event, EventBufferHeader *evt_buf_hdr)
>   {
>       ControlProgramIdMsg *cpim = container_of(evt_buf_hdr, ControlProgramIdMsg,
>                                                ebh);
> +    SCLPEventCPI *e = SCLP_EVENT_CPI(event);
> +
> +    ascii_put(e->cpi.system_type, (char *)cpim->data.system_type, 8);
> +    ascii_put(e->cpi.system_name, (char *)cpim->data.system_name, 8);
> +    ascii_put(e->cpi.sysplex_name, (char *)cpim->data.sysplex_name, 8);

Would it be possible to use sizeof() instead of hard-coding "8" here?

  Thanks,
   Thomas




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

* Re: [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
@ 2025-05-05  6:55 Shalini Chellathurai Saroja
  2025-05-06  6:48 ` Nina Schoetterl-Glausch
  0 siblings, 1 reply; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-05-05  6:55 UTC (permalink / raw)
  To: Janis Schoetterl-Glausch, Nina Schoetterl-Glausch,
	Hendrik Brueckner
  Cc: qemu-s390x mailing list, Thomas Huth, Daniel Berrange,
	qemu-devel mailing list, <Shalini Chellathurai Saroja

On 2025-04-28 11:22, Janis Schoetterl-Glausch wrote:
> On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
>> Implement the Service-Call Logical Processor (SCLP) event
>> type Control-Program Identification (CPI) in QEMU. This
>> event is used to send CPI identifiers from the guest to the
>> host. The CPI identifiers are: system type, system name,
>> system level and sysplex name.
>> 
>> System type: operating system of the guest (e.g. "LINUX").
>> System name: user configurable name of the guest (e.g. "TESTVM").
>> System level: distribution and kernel version, if the system type is 
>> Linux
>> (e.g. 0x50e00).
>> Sysplex name: name of the cluster which the guest belongs to (if any)
>> (e.g. "PLEX").
>> 
>> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
>> Reviewed-by: Thomas Huth <thuth@redhat.com>
>> ---
>>  hw/s390x/event-facility.c         |  2 +
>>  hw/s390x/meson.build              |  1 +
>>  hw/s390x/s390-virtio-ccw.c        | 14 +++++
>>  hw/s390x/sclpcpi.c                | 92 
>> +++++++++++++++++++++++++++++++
>>  include/hw/s390x/event-facility.h | 13 +++++
>>  5 files changed, 122 insertions(+)
>>  create mode 100644 hw/s390x/sclpcpi.c
>> 
>> diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c
>> index 2b0332c20e..60237b8581 100644
>> --- a/hw/s390x/event-facility.c
>> +++ b/hw/s390x/event-facility.c
>> @@ -4,6 +4,7 @@
>>   *       handles SCLP event types
>>   *          - Signal Quiesce - system power down
>>   *          - ASCII Console Data - VT220 read and write
>> + *          - Control-Program Identification - Send OS data from 
>> guest to host
>>   *
>>   * Copyright IBM, Corp. 2012
>>   *
>> @@ -40,6 +41,7 @@ struct SCLPEventFacility {
>>      SysBusDevice parent_obj;
>>      SCLPEventsBus sbus;
>>      SCLPEvent quiesce, cpu_hotplug;
>> +    SCLPEventCPI cpi;
>>      /* guest's receive mask */
>>      union {
>>          uint32_t receive_mask_pieces[2];
>> diff --git a/hw/s390x/meson.build b/hw/s390x/meson.build
>> index 3bbebfd817..eb7950489c 100644
>> --- a/hw/s390x/meson.build
>> +++ b/hw/s390x/meson.build
>> @@ -13,6 +13,7 @@ s390x_ss.add(files(
>>    's390-skeys.c',
>>    's390-stattrib.c',
>>    'sclp.c',
>> +  'sclpcpi.c',
>>    'sclpcpu.c',
>>    'sclpquiesce.c',
>>    'tod.c',
>> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
>> index 75b32182eb..7f28cbd1de 100644
>> --- a/hw/s390x/s390-virtio-ccw.c
>> +++ b/hw/s390x/s390-virtio-ccw.c
>> @@ -260,6 +260,17 @@ static void s390_create_sclpconsole(SCLPDevice 
>> *sclp,
>>      qdev_realize_and_unref(dev, ev_fac_bus, &error_fatal);
>>  }
>> 
>> +static void s390_create_sclpcpi(SCLPDevice *sclp)
>> +{
>> +    SCLPEventFacility *ef = sclp->event_facility;
>> +    BusState *ev_fac_bus = sclp_get_event_facility_bus(ef);
>> +    DeviceState *dev;
>> +
>> +    dev = qdev_new(TYPE_SCLP_EVENT_CPI);
>> +    object_property_add_child(OBJECT(ef), "sclpcpi", OBJECT(dev));
>> +    qdev_realize_and_unref(dev, ev_fac_bus, &error_fatal);
> 
> I wonder if we should drop this and add control-program-id directly
> on the event facility. I don't see what purpose having the intermediate
> level sclpcpi serves.
> 

Hello Nina,

sclpcpi is the qemu device which handles the SCLP event type 
Control-Program Identification by performing the following.
1. The sclpcpi device indicates to the guest OS that QEMU is able to 
process the event buffers of the SCLP event type Control-Program 
Identification.
2. The sclpcpi device receives the data from the event buffers of the 
SCLP event type Control-Program Identification sent by the guest OS.
The received data is stored in control-program-id, which is the property 
of the device sclpcpi. So, the sclpcpi device cannot be dropped.

In addition, Thomas Huth told that the migration data of a device must 
be stored in the device itself during his review of the previous 
versions of this patch series. So control-program-id cannot be stored in 
the event facility.

It is possible to add the identifiers directly as the properties of 
sclpcpi (eg. system type as shown below) and remove the 
control-program-id.

virsh # qemu-monitor-command vm --pretty 
'{"execute":"qom-list","arguments": {"path": 
"/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
{
   "return": [
     {
       "name": "type",
       "type": "string"
     },
     {
       "name": "parent_bus",
       "type": "link<bus>"
     },
     {
       "name": "realized",
       "type": "bool"
     },
     {
       "name": "hotplugged",
       "type": "bool"
     },
     {
       "name": "hotpluggable",
       "type": "bool"
     },
     {
       "name": "system_type",
       "type": "string"
     },
     {
       "name": "control-program-id",
       "type": "S390ControlProgramId"
     }
   ],
   "id": "libvirt-16"
}

virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get", 
"arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi", 
"property":"system_type"}}'
{
   "return": "LINUX   ",
   "id": "libvirt-17"
}

However, Hendrik Brückner suggested to group the identifiers together 
during the initial discussion of this line item. So, I would prefer to 
leave this as it is. Please let me know if you still think otherwise.

>> +}
> 
> [...]
> 
>> diff --git a/include/hw/s390x/event-facility.h 
>> b/include/hw/s390x/event-facility.h
>> index ff874e792d..ef469e62ae 100644
>> --- a/include/hw/s390x/event-facility.h
>> +++ b/include/hw/s390x/event-facility.h
> 
> [...]
>    I.
>> +struct SCLPEventCPI {
>> +    DeviceState qdev;
>> +    SCLPEvent event;
> 
> I think you should just inherit from SCLPEvent, which in turn inherits
> from DeviceState.
> So without the qdev.
> 

Ok, I will do so. Thank you very much for the review.

>> +};
>> +
>>  #define TYPE_SCLP_EVENT_FACILITY "s390-sclp-event-facility"
>>  typedef struct SCLPEventFacility SCLPEventFacility;
>>  typedef struct SCLPEventFacilityClass SCLPEventFacilityClass;

-- 
Mit freundlichen Grüßen / Kind regards
Shalini Chellathurai Saroja
Software Developer
Linux on IBM Z & KVM Development
IBM Deutschland Research & Development GmbH
Dept 1419, Schoenaicher Str. 220, 71032 Boeblingen
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht 
Stuttgart, HRB 243294


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

* Re: [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
  2025-04-29  9:20   ` Nina Schoetterl-Glausch
@ 2025-05-05  6:58     ` Shalini Chellathurai Saroja
  0 siblings, 0 replies; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-05-05  6:58 UTC (permalink / raw)
  To: Nina Schoetterl-Glausch
  Cc: qemu-s390x mailing list, Thomas Huth, Daniel Berrange,
	qemu-devel mailing list, Hendrik Brueckner,
	<Shalini Chellathurai Saroja

On 2025-04-29 11:20, Nina Schoetterl-Glausch wrote:
> On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
>> Implement the Service-Call Logical Processor (SCLP) event
>> type Control-Program Identification (CPI) in QEMU. This
>> event is used to send CPI identifiers from the guest to the
>> host. The CPI identifiers are: system type, system name,
>> system level and sysplex name.
>> 
>> System type: operating system of the guest (e.g. "LINUX").
>> System name: user configurable name of the guest (e.g. "TESTVM").
>> System level: distribution and kernel version, if the system type is 
>> Linux
>> (e.g. 0x50e00).
>> Sysplex name: name of the cluster which the guest belongs to (if any)
>> (e.g. "PLEX").
>> 
>> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
>> Reviewed-by: Thomas Huth <thuth@redhat.com>
>> ---
>>  hw/s390x/event-facility.c         |  2 +
>>  hw/s390x/meson.build              |  1 +
>>  hw/s390x/s390-virtio-ccw.c        | 14 +++++
>>  hw/s390x/sclpcpi.c                | 92 
>> +++++++++++++++++++++++++++++++
>>  include/hw/s390x/event-facility.h | 13 +++++
>>  5 files changed, 122 insertions(+)
>>  create mode 100644 hw/s390x/sclpcpi.c
> 
> [...]
> 
> 
>>  static void s390_cpu_plug(HotplugHandler *hotplug_dev,
>> diff --git a/hw/s390x/sclpcpi.c b/hw/s390x/sclpcpi.c
>> new file mode 100644
>> index 0000000000..13589459b1
>> --- /dev/null
>> +++ b/hw/s390x/sclpcpi.c
> 
> [...]
> 
>> +static void cpi_class_init(ObjectClass *klass, void *data)
> 
> Should be 'const void *data'.
> 

Ok, thank you.

>> +{
>> +    DeviceClass *dc = DEVICE_CLASS(klass);
>> +    SCLPEventClass *k = SCLP_EVENT_CLASS(klass);
>> +
>> +    dc->user_creatable = false;
>> +
>> +    k->can_handle_event = can_handle_event;
>> +    k->get_send_mask = send_mask;
>> +    k->get_receive_mask = receive_mask;
>> +    k->write_event_data = write_event_data;
>> +}
> 
> [...]

-- 
Mit freundlichen Grüßen / Kind regards
Shalini Chellathurai Saroja
Software Developer
Linux on IBM Z & KVM Development
IBM Deutschland Research & Development GmbH
Dept 1419, Schoenaicher Str. 220, 71032 Boeblingen
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht 
Stuttgart, HRB 243294


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

* Re: [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM
  2025-04-28 12:01   ` Nina Schoetterl-Glausch
@ 2025-05-05  7:27     ` Shalini Chellathurai Saroja
  0 siblings, 0 replies; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-05-05  7:27 UTC (permalink / raw)
  To: Nina Schoetterl-Glausch
  Cc: qemu-s390x mailing list, Thomas Huth, Daniel Berrange,
	qemu-devel mailing list, Hendrik Brueckner,
	<Shalini Chellathurai Saroja

On 2025-04-28 14:01, Nina Schoetterl-Glausch wrote:
> On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
>> Add Control-Program Identification data to the QEMU Object
>> Model (QOM), along with the timestamp in which the data was received.
>> 
>> Example:
>> virsh # qemu-monitor-command vm --pretty '{
>> "execute": "qom-get",
>> "arguments": {
>> "path": "/machine/sclp/s390-sclp-event-facility/sclpcpi",
>> "property": "control-program-id" }}'
>> {
>>   "return": {
>>     "timestamp": 1742390410685762000,
>>     "system-level": 74872343805430528,
>>     "sysplex-name": "PLEX ",
>>     "system-name": "TESTVM  ",
>>     "system-type": "LINUX   "
>>   },
>>   "id": "libvirt-15"
>> }
>> 
>> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
>> ---
>>  hw/s390x/sclpcpi.c                | 39 +++++++++++++++++++++
>>  include/hw/s390x/event-facility.h |  9 +++++
>>  qapi/machine.json                 | 58 
>> +++++++++++++++++++++++++++++++
>>  3 files changed, 106 insertions(+)
> 
> [...]
> 
>> --- a/include/hw/s390x/event-facility.h
>> +++ b/include/hw/s390x/event-facility.h
>> @@ -199,9 +199,18 @@ typedef struct SCLPEventCPI SCLPEventCPI;
>>  OBJECT_DECLARE_TYPE(SCLPEventCPI, SCLPEventCPIClass,
>>                      SCLP_EVENT_CPI)
>> 
>> +typedef struct ControlProgramId {
>> +    uint8_t system_type[8];
>> +    uint8_t system_name[8];
>> +    uint64_t system_level;
>> +    uint8_t sysplex_name[8];
>> +    uint64_t timestamp;
>> +} ControlProgramId;
>> +
>>  struct SCLPEventCPI {
>>      DeviceState qdev;
>>      SCLPEvent event;
>> +    ControlProgramId cpi;
> 
> Now that this struct exists I would go ahead and inline 
> ControlProgramId.

Ok, I will do so, thank you.
> 
>>  };
>> 
>>  #define TYPE_SCLP_EVENT_FACILITY "s390-sclp-event-facility"
> 
> [...]

-- 
Mit freundlichen Grüßen / Kind regards
Shalini Chellathurai Saroja
Software Developer
Linux on IBM Z & KVM Development
IBM Deutschland Research & Development GmbH
Dept 1419, Schoenaicher Str. 220, 71032 Boeblingen
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht 
Stuttgart, HRB 243294


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

* Re: [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM
  2025-04-30 10:34   ` Thomas Huth
@ 2025-05-05  7:42     ` Shalini Chellathurai Saroja
  0 siblings, 0 replies; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-05-05  7:42 UTC (permalink / raw)
  To: Thomas Huth
  Cc: qemu-s390x mailing list, Daniel Berrange, qemu-devel mailing list,
	Nina Schoetterl-Glausch, Hendrik Brueckner,
	<Shalini Chellathurai Saroja

On 2025-04-30 12:34, Thomas Huth wrote:
> On 10/04/2025 17.09, Shalini Chellathurai Saroja wrote:
>> Add Control-Program Identification data to the QEMU Object
>> Model (QOM), along with the timestamp in which the data was received.
> ...
>> diff --git a/hw/s390x/sclpcpi.c b/hw/s390x/sclpcpi.c
>> index 13589459b1..dcc8bd3245 100644
>> --- a/hw/s390x/sclpcpi.c
>> +++ b/hw/s390x/sclpcpi.c
>> @@ -18,7 +18,10 @@
>>     */
>>     #include "qemu/osdep.h"
>> +#include "qemu/timer.h"
>>   #include "hw/s390x/event-facility.h"
>> +#include "hw/s390x/ebcdic.h"
>> +#include "qapi/qapi-visit-machine.h"
>>     typedef struct Data {
>>       uint8_t id_format;
>> @@ -58,11 +61,39 @@ static int write_event_data(SCLPEvent *event, 
>> EventBufferHeader *evt_buf_hdr)
>>   {
>>       ControlProgramIdMsg *cpim = container_of(evt_buf_hdr, 
>> ControlProgramIdMsg,
>>                                                ebh);
>> +    SCLPEventCPI *e = SCLP_EVENT_CPI(event);
>> +
>> +    ascii_put(e->cpi.system_type, (char *)cpim->data.system_type, 8);
>> +    ascii_put(e->cpi.system_name, (char *)cpim->data.system_name, 8);
>> +    ascii_put(e->cpi.sysplex_name, (char *)cpim->data.sysplex_name, 
>> 8);
> 
> Would it be possible to use sizeof() instead of hard-coding "8" here?

Hello Thomas,

Yes, it is. I will do so. Thank you very much for the review.

I will also move the property use_cpi to ccw_machine_10_0_class_options, 
as version 10.0 is already released.

> 
>  Thanks,
>   Thomas

-- 
Mit freundlichen Grüßen / Kind regards
Shalini Chellathurai Saroja
Software Developer
Linux on IBM Z & KVM Development
IBM Deutschland Research & Development GmbH
Dept 1419, Schoenaicher Str. 220, 71032 Boeblingen
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht 
Stuttgart, HRB 243294


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

* Re: [PATCH v4 4/4] hw/s390x: compat handling for backward migration
  2025-04-28 12:05   ` Nina Schoetterl-Glausch
@ 2025-05-05  8:54     ` Shalini Chellathurai Saroja
  2025-05-06  6:39       ` Nina Schoetterl-Glausch
  0 siblings, 1 reply; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-05-05  8:54 UTC (permalink / raw)
  To: Nina Schoetterl-Glausch
  Cc: qemu-s390x mailing list, Thomas Huth, Daniel Berrange,
	qemu-devel mailing list, Hendrik Brueckner,
	<Shalini Chellathurai Saroja

On 2025-04-28 14:05, Nina Schoetterl-Glausch wrote:
> On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
>> Add Control-Program Identification (CPI) device to QOM only when the 
>> virtual
>> machine supports CPI. CPI is supported from "s390-ccw-virtio-10.0" 
>> machine
>> and higher.
>> 
>> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
>> ---
>>  hw/s390x/s390-virtio-ccw.c         | 10 +++++++++-
>>  include/hw/s390x/s390-virtio-ccw.h |  1 +
>>  2 files changed, 10 insertions(+), 1 deletion(-)
>> 
>> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
>> index 7f28cbd1de..81832ee638 100644
>> --- a/hw/s390x/s390-virtio-ccw.c
>> +++ b/hw/s390x/s390-virtio-ccw.c
>> @@ -274,6 +274,7 @@ static void s390_create_sclpcpi(SCLPDevice *sclp)
>>  static void ccw_init(MachineState *machine)
>>  {
>>      MachineClass *mc = MACHINE_GET_CLASS(machine);
>> +    S390CcwMachineClass *s390mc = S390_CCW_MACHINE_CLASS(mc);
>>      S390CcwMachineState *ms = S390_CCW_MACHINE(machine);
>>      int ret;
>>      VirtualCssBus *css_bus;
>> @@ -336,7 +337,10 @@ static void ccw_init(MachineState *machine)
>>      s390_init_tod();
>> 
>>      /* init SCLP event Control-Program Identification */
>> -    s390_create_sclpcpi(ms->sclp);
>> +    if (s390mc->use_cpi) {
>> +        s390_create_sclpcpi(ms->sclp);
>> +    }
> 
> Fixing this in a separate commit could be bad for bisecting.

Ok.

> You introduce use_cpi in an earlier commit set to false and
> then flipping it in the migration patch for new machines.
> This way there is no broken intermediate state.
> 
> I would also squash the compat migration changes into the previous
> patch.
> 

Hello Nina,

If use_cpi is set to false in patch 1, then the sclpcpi device will not 
be instantiated even for new machines at that point. The sclpcpi device 
will only be instantiated when the use_cpi is set to true in the 
migration patch.

I prefer to squash this entire patch to patch 1, then the sclpcpi device 
will only be instantiated for new machines with the code in patch 1 
itself and will not be dependent on the migration patch. I like this 
approach as the logic to add sclpcpi device is complete in patch 1.

What do you think?, thank you.

>>  }
>> 
>>  static void s390_cpu_plug(HotplugHandler *hotplug_dev,
>> @@ -827,6 +831,7 @@ static void ccw_machine_class_init(ObjectClass 
>> *oc, void *data)
>> 
>>      s390mc->hpage_1m_allowed = true;
>>      s390mc->max_threads = 1;
>> +    s390mc->use_cpi = true;
>>      mc->reset = s390_machine_reset;
>>      mc->block_default_type = IF_VIRTIO;
>>      mc->no_cdrom = 1;
>> @@ -955,6 +960,9 @@ static void 
>> ccw_machine_9_2_class_options(MachineClass *mc)
>>          { TYPE_S390_PCI_DEVICE, "relaxed-translation", "off", },
>>      };
>> 
>> +    S390CcwMachineClass *s390mc = S390_CCW_MACHINE_CLASS(mc);
>> +    s390mc->use_cpi = false;
>> +
>>      ccw_machine_10_0_class_options(mc);
>>      compat_props_add(mc->compat_props, hw_compat_9_2, 
>> hw_compat_9_2_len);
>>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>> diff --git a/include/hw/s390x/s390-virtio-ccw.h 
>> b/include/hw/s390x/s390-virtio-ccw.h
>> index 686d9497d2..fc4112fbf5 100644
>> --- a/include/hw/s390x/s390-virtio-ccw.h
>> +++ b/include/hw/s390x/s390-virtio-ccw.h
>> @@ -55,6 +55,7 @@ struct S390CcwMachineClass {
>>      /*< public >*/
>>      bool hpage_1m_allowed;
>>      int max_threads;
>> +    bool use_cpi;
>>  };
>> 
>>  /* 1M huge page mappings allowed by the machine */

-- 
Mit freundlichen Grüßen / Kind regards
Shalini Chellathurai Saroja
Software Developer
Linux on IBM Z & KVM Development
IBM Deutschland Research & Development GmbH
Dept 1419, Schoenaicher Str. 220, 71032 Boeblingen
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht 
Stuttgart, HRB 243294


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

* Re: [PATCH v4 4/4] hw/s390x: compat handling for backward migration
  2025-05-05  8:54     ` Shalini Chellathurai Saroja
@ 2025-05-06  6:39       ` Nina Schoetterl-Glausch
  0 siblings, 0 replies; 21+ messages in thread
From: Nina Schoetterl-Glausch @ 2025-05-06  6:39 UTC (permalink / raw)
  To: Shalini Chellathurai Saroja
  Cc: qemu-s390x mailing list, Thomas Huth, Daniel Berrange,
	qemu-devel mailing list, Hendrik Brueckner

On Mon, 2025-05-05 at 10:54 +0200, Shalini Chellathurai Saroja wrote:
> On 2025-04-28 14:05, Nina Schoetterl-Glausch wrote:
> > On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
> > > Add Control-Program Identification (CPI) device to QOM only when the 
> > > virtual
> > > machine supports CPI. CPI is supported from "s390-ccw-virtio-10.0" 
> > > machine
> > > and higher.
> > > 
> > > Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
> > > ---
> > >  hw/s390x/s390-virtio-ccw.c         | 10 +++++++++-
> > >  include/hw/s390x/s390-virtio-ccw.h |  1 +
> > >  2 files changed, 10 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> > > index 7f28cbd1de..81832ee638 100644
> > > --- a/hw/s390x/s390-virtio-ccw.c
> > > +++ b/hw/s390x/s390-virtio-ccw.c

[...]

> > Fixing this in a separate commit could be bad for bisecting.
> 
> Ok.
> 
> > You introduce use_cpi in an earlier commit set to false and
> > then flipping it in the migration patch for new machines.
> > This way there is no broken intermediate state.
> > 
> > I would also squash the compat migration changes into the previous
> > patch.
> > 
> 
> Hello Nina,
> 
> If use_cpi is set to false in patch 1, then the sclpcpi device will not 
> be instantiated even for new machines at that point. The sclpcpi device 
> will only be instantiated when the use_cpi is set to true in the 
> migration patch.
> 
> I prefer to squash this entire patch to patch 1, then the sclpcpi device 
> will only be instantiated for new machines with the code in patch 1 
> itself and will not be dependent on the migration patch. I like this 
> approach as the logic to add sclpcpi device is complete in patch 1.
> 
> What do you think?, thank you.

Sounds good!

[...]


-- 
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294


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

* Re: [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
  2025-05-05  6:55 [PATCH v4 1/4] hw/s390x: add SCLP event type CPI Shalini Chellathurai Saroja
@ 2025-05-06  6:48 ` Nina Schoetterl-Glausch
  2025-05-06  7:48   ` Thomas Huth
  0 siblings, 1 reply; 21+ messages in thread
From: Nina Schoetterl-Glausch @ 2025-05-06  6:48 UTC (permalink / raw)
  To: Shalini Chellathurai Saroja, Hendrik Brueckner
  Cc: qemu-s390x mailing list, Thomas Huth, Daniel Berrange,
	qemu-devel mailing list

On Mon, 2025-05-05 at 08:55 +0200, Shalini Chellathurai Saroja wrote:
> On 2025-04-28 11:22, Janis Schoetterl-Glausch wrote:
> > On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
> > > Implement the Service-Call Logical Processor (SCLP) event
> > > type Control-Program Identification (CPI) in QEMU. This
> > > event is used to send CPI identifiers from the guest to the
> > > host. The CPI identifiers are: system type, system name,
> > > system level and sysplex name.
> > > 
> > > System type: operating system of the guest (e.g. "LINUX").
> > > System name: user configurable name of the guest (e.g. "TESTVM").
> > > System level: distribution and kernel version, if the system type is 
> > > Linux
> > > (e.g. 0x50e00).
> > > Sysplex name: name of the cluster which the guest belongs to (if any)
> > > (e.g. "PLEX").
> > > 
> > > Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
> > > Reviewed-by: Thomas Huth <thuth@redhat.com>
> > > ---
> > >  hw/s390x/event-facility.c         |  2 +
> > >  hw/s390x/meson.build              |  1 +
> > >  hw/s390x/s390-virtio-ccw.c        | 14 +++++
> > >  hw/s390x/sclpcpi.c                | 92 
> > > +++++++++++++++++++++++++++++++
> > >  include/hw/s390x/event-facility.h | 13 +++++
> > >  5 files changed, 122 insertions(+)
> > >  create mode 100644 hw/s390x/sclpcpi.c
> > > 
> > > diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c
> > > index 2b0332c20e..60237b8581 100644
> > > --- a/hw/s390x/event-facility.c
> > > +++ b/hw/s390x/event-facility.c

[...]

> It is possible to add the identifiers directly as the properties of 
> sclpcpi (eg. system type as shown below) and remove the 
> control-program-id.

This is what I meant, drop it from qom.
> 
> virsh # qemu-monitor-command vm --pretty 
> '{"execute":"qom-list","arguments": {"path": 
> "/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
> {
>    "return": [
>      {
>        "name": "type",
>        "type": "string"
>      },
>      {
>        "name": "parent_bus",
>        "type": "link<bus>"
>      },
>      {
>        "name": "realized",
>        "type": "bool"
>      },
>      {
>        "name": "hotplugged",
>        "type": "bool"
>      },
>      {
>        "name": "hotpluggable",
>        "type": "bool"
>      },
>      {
>        "name": "system_type",
>        "type": "string"
>      },
>      {
>        "name": "control-program-id",
>        "type": "S390ControlProgramId"
>      }
>    ],
>    "id": "libvirt-16"
> }
> 
> virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get", 
> "arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi", 
> "property":"system_type"}}'
> {
>    "return": "LINUX   ",
>    "id": "libvirt-17"
> }
> 
> However, Hendrik Brückner suggested to group the identifiers together 
> during the initial discussion of this line item. So, I would prefer to 

They are grouped together under "sclpcpi", no?

> leave this as it is. Please let me know if you still think otherwise.

I don't have a strong opinion on this, just wanted to mention it and see what other people say.
> 
> > > +}
> > 
> > [...]
> > 
> > > diff --git a/include/hw/s390x/event-facility.h 
> > > b/include/hw/s390x/event-facility.h
> > > index ff874e792d..ef469e62ae 100644
> > > --- a/include/hw/s390x/event-facility.h
> > > +++ b/include/hw/s390x/event-facility.h
> > 
> > [...]
> >    I.
> > > +struct SCLPEventCPI {
> > > +    DeviceState qdev;
> > > +    SCLPEvent event;
> > 
> > I think you should just inherit from SCLPEvent, which in turn inherits
> > from DeviceState.
> > So without the qdev.
> > 
> 
> Ok, I will do so. Thank you very much for the review.
> 
> > > +};
> > > +
> > >  #define TYPE_SCLP_EVENT_FACILITY "s390-sclp-event-facility"
> > >  typedef struct SCLPEventFacility SCLPEventFacility;
> > >  typedef struct SCLPEventFacilityClass SCLPEventFacilityClass;
> 

-- 
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294


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

* Re: [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
  2025-05-06  6:48 ` Nina Schoetterl-Glausch
@ 2025-05-06  7:48   ` Thomas Huth
  2025-05-06 12:16     ` Shalini Chellathurai Saroja
  0 siblings, 1 reply; 21+ messages in thread
From: Thomas Huth @ 2025-05-06  7:48 UTC (permalink / raw)
  To: Nina Schoetterl-Glausch, Shalini Chellathurai Saroja,
	Hendrik Brueckner
  Cc: qemu-s390x mailing list, Daniel Berrange, qemu-devel mailing list

On 06/05/2025 08.48, Nina Schoetterl-Glausch wrote:
> On Mon, 2025-05-05 at 08:55 +0200, Shalini Chellathurai Saroja wrote:
>> On 2025-04-28 11:22, Janis Schoetterl-Glausch wrote:
>>> On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja wrote:
>>>> Implement the Service-Call Logical Processor (SCLP) event
>>>> type Control-Program Identification (CPI) in QEMU. This
>>>> event is used to send CPI identifiers from the guest to the
>>>> host. The CPI identifiers are: system type, system name,
>>>> system level and sysplex name.
>>>>
>>>> System type: operating system of the guest (e.g. "LINUX").
>>>> System name: user configurable name of the guest (e.g. "TESTVM").
>>>> System level: distribution and kernel version, if the system type is
>>>> Linux
>>>> (e.g. 0x50e00).
>>>> Sysplex name: name of the cluster which the guest belongs to (if any)
>>>> (e.g. "PLEX").
>>>>
>>>> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
>>>> Reviewed-by: Thomas Huth <thuth@redhat.com>
>>>> ---
>>>>   hw/s390x/event-facility.c         |  2 +
>>>>   hw/s390x/meson.build              |  1 +
>>>>   hw/s390x/s390-virtio-ccw.c        | 14 +++++
>>>>   hw/s390x/sclpcpi.c                | 92
>>>> +++++++++++++++++++++++++++++++
>>>>   include/hw/s390x/event-facility.h | 13 +++++
>>>>   5 files changed, 122 insertions(+)
>>>>   create mode 100644 hw/s390x/sclpcpi.c
>>>>
>>>> diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c
>>>> index 2b0332c20e..60237b8581 100644
>>>> --- a/hw/s390x/event-facility.c
>>>> +++ b/hw/s390x/event-facility.c
> 
> [...]
> 
>> It is possible to add the identifiers directly as the properties of
>> sclpcpi (eg. system type as shown below) and remove the
>> control-program-id.
> 
> This is what I meant, drop it from qom.
>>
>> virsh # qemu-monitor-command vm --pretty
>> '{"execute":"qom-list","arguments": {"path":
>> "/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
>> {
>>     "return": [
>>       {
>>         "name": "type",
>>         "type": "string"
>>       },
>>       {
>>         "name": "parent_bus",
>>         "type": "link<bus>"
>>       },
>>       {
>>         "name": "realized",
>>         "type": "bool"
>>       },
>>       {
>>         "name": "hotplugged",
>>         "type": "bool"
>>       },
>>       {
>>         "name": "hotpluggable",
>>         "type": "bool"
>>       },
>>       {
>>         "name": "system_type",
>>         "type": "string"
>>       },
>>       {
>>         "name": "control-program-id",
>>         "type": "S390ControlProgramId"
>>       }
>>     ],
>>     "id": "libvirt-16"
>> }
>>
>> virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get",
>> "arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi",
>> "property":"system_type"}}'
>> {
>>     "return": "LINUX   ",
>>     "id": "libvirt-17"
>> }
>>
>> However, Hendrik Brückner suggested to group the identifiers together
>> during the initial discussion of this line item. So, I would prefer to
> 
> They are grouped together under "sclpcpi", no?
> 
>> leave this as it is. Please let me know if you still think otherwise.
> 
> I don't have a strong opinion on this, just wanted to mention it and see what other people say.

I guess it mostly depends on whether there are future plans for using the 
QOM type elsewhere. If this type is supposed to be used in other QAPI calls 
in the future, it makes sense to keep it separate now. If there are no such 
plans, it's maybe easier to integrate the values into sclpcpi directly. 
Hendrik, any opinion from your side?

  Thomas



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

* Re: [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
  2025-05-06  7:48   ` Thomas Huth
@ 2025-05-06 12:16     ` Shalini Chellathurai Saroja
  2025-05-23 12:07       ` Hendrik Brueckner
  0 siblings, 1 reply; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-05-06 12:16 UTC (permalink / raw)
  To: Thomas Huth, Hendrik Brueckner
  Cc: Nina Schoetterl-Glausch, qemu-s390x mailing list, Daniel Berrange,
	qemu-devel mailing list, <Shalini Chellathurai Saroja

On 2025-05-06 09:48, Thomas Huth wrote:
> On 06/05/2025 08.48, Nina Schoetterl-Glausch wrote:
>> On Mon, 2025-05-05 at 08:55 +0200, Shalini Chellathurai Saroja wrote:
>>> On 2025-04-28 11:22, Janis Schoetterl-Glausch wrote:
>>>> On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai Saroja 
>>>> wrote:
>>>>> Implement the Service-Call Logical Processor (SCLP) event
>>>>> type Control-Program Identification (CPI) in QEMU. This
>>>>> event is used to send CPI identifiers from the guest to the
>>>>> host. The CPI identifiers are: system type, system name,
>>>>> system level and sysplex name.
>>>>> 
>>>>> System type: operating system of the guest (e.g. "LINUX").
>>>>> System name: user configurable name of the guest (e.g. "TESTVM").
>>>>> System level: distribution and kernel version, if the system type 
>>>>> is
>>>>> Linux
>>>>> (e.g. 0x50e00).
>>>>> Sysplex name: name of the cluster which the guest belongs to (if 
>>>>> any)
>>>>> (e.g. "PLEX").
>>>>> 
>>>>> Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
>>>>> Reviewed-by: Thomas Huth <thuth@redhat.com>
>>>>> ---
>>>>>   hw/s390x/event-facility.c         |  2 +
>>>>>   hw/s390x/meson.build              |  1 +
>>>>>   hw/s390x/s390-virtio-ccw.c        | 14 +++++
>>>>>   hw/s390x/sclpcpi.c                | 92
>>>>> +++++++++++++++++++++++++++++++
>>>>>   include/hw/s390x/event-facility.h | 13 +++++
>>>>>   5 files changed, 122 insertions(+)
>>>>>   create mode 100644 hw/s390x/sclpcpi.c
>>>>> 
>>>>> diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c
>>>>> index 2b0332c20e..60237b8581 100644
>>>>> --- a/hw/s390x/event-facility.c
>>>>> +++ b/hw/s390x/event-facility.c
>> 
>> [...]
>> 
>>> It is possible to add the identifiers directly as the properties of
>>> sclpcpi (eg. system type as shown below) and remove the
>>> control-program-id.
>> 
>> This is what I meant, drop it from qom.

Ok.

>>> 
>>> virsh # qemu-monitor-command vm --pretty
>>> '{"execute":"qom-list","arguments": {"path":
>>> "/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
>>> {
>>>     "return": [
>>>       {
>>>         "name": "type",
>>>         "type": "string"
>>>       },
>>>       {
>>>         "name": "parent_bus",
>>>         "type": "link<bus>"
>>>       },
>>>       {
>>>         "name": "realized",
>>>         "type": "bool"
>>>       },
>>>       {
>>>         "name": "hotplugged",
>>>         "type": "bool"
>>>       },
>>>       {
>>>         "name": "hotpluggable",
>>>         "type": "bool"
>>>       },
>>>       {
>>>         "name": "system_type",
>>>         "type": "string"
>>>       },
>>>       {
>>>         "name": "control-program-id",
>>>         "type": "S390ControlProgramId"
>>>       }
>>>     ],
>>>     "id": "libvirt-16"
>>> }
>>> 
>>> virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get",
>>> "arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi",
>>> "property":"system_type"}}'
>>> {
>>>     "return": "LINUX   ",
>>>     "id": "libvirt-17"
>>> }
>>> 
>>> However, Hendrik Brückner suggested to group the identifiers together
>>> during the initial discussion of this line item. So, I would prefer 
>>> to
>> 
>> They are grouped together under "sclpcpi", no?

Yes.

>> 
>>> leave this as it is. Please let me know if you still think otherwise.
>> 
>> I don't have a strong opinion on this, just wanted to mention it and 
>> see what other people say.
> 
> I guess it mostly depends on whether there are future plans for using
> the QOM type elsewhere. If this type is supposed to be used in other
> QAPI calls in the future, it makes sense to keep it separate now. If
> there are no such plans, it's maybe easier to integrate the values
> into sclpcpi directly. Hendrik, any opinion from your side?
> 
>  Thomas

Hello Hendrik,

I have provided the output of both the options below. Please let me know 
which option do you prefer.

I have incorporated the other comments. So I will be able to send V5 
after your response. Thank you very much!

Option 1: Control-program identifiers set as the properties of sclpcpi:

virsh # qemu-monitor-command vm --pretty 
'{"execute":"qom-list","arguments": {"path": 
"/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
{
   "return": [
     {
[...]
     },
     {
       "name": "system_level",
       "type": "uint64"
     },
     {
       "name": "system_name",
       "type": "string"
     },
     {
       "name": "system_type",
       "type": "string"
     },
     {
       "name": "timestamp",
       "type": "uint64"
     },
     {
       "name": "sysplex_name",
       "type": "string"
     }
   ],
   "id": "libvirt-14"
}

virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get", 
"arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi", 
"property":"system_type"}}'
{
   "return": "LINUX   ",
   "id": "libvirt-18"
}
virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get", 
"arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi", 
"property":"system_name"}}'
{
   "return": "TESTVM  ",
   "id": "libvirt-19"
}
virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get", 
"arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi", 
"property":"sysplex_name"}}'
{
   "return": "PLEX    ",
   "id": "libvirt-20"
}
virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get", 
"arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi", 
"property":"system_level"}}'
{
   "return": 74872343805430528,
   "id": "libvirt-21"
}


Option 2: control-program-id of type S390ControlProgramId set as a 
property of sclpcpi:

virsh # qemu-monitor-command vm --pretty 
'{"execute":"qom-list","arguments": {"path": 
"/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
{
   "return": [
     {
[...]
     },
     {
       "name": "control-program-id",
       "type": "S390ControlProgramId"
     }
   ],
   "id": "libvirt-14"
}

virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get", 
"arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi", 
"property":"control-program-id"}}'
{
   "return": {
     "timestamp": 1746532735581612000,
     "system-level": 74872343805430528,
     "sysplex-name": "PLEX    ",
     "system-name": "TESTVM  ",
     "system-type": "LINUX   "
   },
   "id": "libvirt-22"
}



-- 
Mit freundlichen Grüßen / Kind regards
Shalini Chellathurai Saroja
Software Developer
Linux on IBM Z & KVM Development
IBM Deutschland Research & Development GmbH
Dept 1419, Schoenaicher Str. 220, 71032 Boeblingen
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht 
Stuttgart, HRB 243294


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

* Re: [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
  2025-05-06 12:16     ` Shalini Chellathurai Saroja
@ 2025-05-23 12:07       ` Hendrik Brueckner
  2025-05-28 12:11         ` Shalini Chellathurai Saroja
  0 siblings, 1 reply; 21+ messages in thread
From: Hendrik Brueckner @ 2025-05-23 12:07 UTC (permalink / raw)
  To: Shalini Chellathurai Saroja
  Cc: Thomas Huth, Hendrik Brueckner, Nina Schoetterl-Glausch,
	qemu-s390x mailing list, Daniel Berrange, qemu-devel mailing list

On Tue, May 06, 2025 at 02:16:18PM +0200, Shalini Chellathurai Saroja wrote:
> On 2025-05-06 09:48, Thomas Huth wrote:
> > On 06/05/2025 08.48, Nina Schoetterl-Glausch wrote:
> > > On Mon, 2025-05-05 at 08:55 +0200, Shalini Chellathurai Saroja wrote:
> > > > On 2025-04-28 11:22, Janis Schoetterl-Glausch wrote:
> > > > > On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai
> > > > > Saroja wrote:
> > > > > > Implement the Service-Call Logical Processor (SCLP) event
> > > > > > type Control-Program Identification (CPI) in QEMU. This
> > > > > > event is used to send CPI identifiers from the guest to the
> > > > > > host. The CPI identifiers are: system type, system name,
> > > > > > system level and sysplex name.
> > > > > > 
> > > > > > System type: operating system of the guest (e.g. "LINUX").
> > > > > > System name: user configurable name of the guest (e.g. "TESTVM").
> > > > > > System level: distribution and kernel version, if the
> > > > > > system type is
> > > > > > Linux
> > > > > > (e.g. 0x50e00).
> > > > > > Sysplex name: name of the cluster which the guest
> > > > > > belongs to (if any)
> > > > > > (e.g. "PLEX").
> > > > > > 
> > > > > > Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
> > > > > > Reviewed-by: Thomas Huth <thuth@redhat.com>
> > > > > > ---
> > > > > >   hw/s390x/event-facility.c         |  2 +
> > > > > >   hw/s390x/meson.build              |  1 +
> > > > > >   hw/s390x/s390-virtio-ccw.c        | 14 +++++
> > > > > >   hw/s390x/sclpcpi.c                | 92
> > > > > > +++++++++++++++++++++++++++++++
> > > > > >   include/hw/s390x/event-facility.h | 13 +++++
> > > > > >   5 files changed, 122 insertions(+)
> > > > > >   create mode 100644 hw/s390x/sclpcpi.c
> > > > > > 
> > > > > > diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c
> > > > > > index 2b0332c20e..60237b8581 100644
> > > > > > --- a/hw/s390x/event-facility.c
> > > > > > +++ b/hw/s390x/event-facility.c
> > > 
> > > [...]
> > > 
> > > > It is possible to add the identifiers directly as the properties of
> > > > sclpcpi (eg. system type as shown below) and remove the
> > > > control-program-id.
> > > 
> > > This is what I meant, drop it from qom.
> 
> Ok.
> 
> > > > 
> > > > virsh # qemu-monitor-command vm --pretty
> > > > '{"execute":"qom-list","arguments": {"path":
> > > > "/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
> > > > {
> > > >     "return": [
> > > >       {
> > > >         "name": "type",
> > > >         "type": "string"
> > > >       },
> > > >       {
> > > >         "name": "parent_bus",
> > > >         "type": "link<bus>"
> > > >       },
> > > >       {
> > > >         "name": "realized",
> > > >         "type": "bool"
> > > >       },
> > > >       {
> > > >         "name": "hotplugged",
> > > >         "type": "bool"
> > > >       },
> > > >       {
> > > >         "name": "hotpluggable",
> > > >         "type": "bool"
> > > >       },
> > > >       {
> > > >         "name": "system_type",
> > > >         "type": "string"
> > > >       },
> > > >       {
> > > >         "name": "control-program-id",
> > > >         "type": "S390ControlProgramId"
> > > >       }
> > > >     ],
> > > >     "id": "libvirt-16"
> > > > }
> > > > 
> > > > virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get",
> > > > "arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi",
> > > > "property":"system_type"}}'
> > > > {
> > > >     "return": "LINUX   ",
> > > >     "id": "libvirt-17"
> > > > }
> > > > 
> > > > However, Hendrik Brückner suggested to group the identifiers together
> > > > during the initial discussion of this line item. So, I would
> > > > prefer to
> > > 
> > > They are grouped together under "sclpcpi", no?
> 
> Yes.
> 
> > > 
> > > > leave this as it is. Please let me know if you still think otherwise.
> > > 
> > > I don't have a strong opinion on this, just wanted to mention it and
> > > see what other people say.
> > 
> > I guess it mostly depends on whether there are future plans for using
> > the QOM type elsewhere. If this type is supposed to be used in other
> > QAPI calls in the future, it makes sense to keep it separate now. If
> > there are no such plans, it's maybe easier to integrate the values
> > into sclpcpi directly. Hendrik, any opinion from your side?
> > 
> >  Thomas
> 
> Hello Hendrik,
> 
> I have provided the output of both the options below. Please let me know
> which option do you prefer.
> 
> I have incorporated the other comments. So I will be able to send V5 after
> your response. Thank you very much!
> 
> Option 1: Control-program identifiers set as the properties of sclpcpi:
> 
> virsh # qemu-monitor-command vm --pretty '{"execute":"qom-list","arguments":
> {"path": "/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
> {
>   "return": [
>     {
> [...]
>     },
>     {
>       "name": "system_level",
>       "type": "uint64"
>     },
>     {
>       "name": "system_name",
>       "type": "string"
>     },
>     {
>       "name": "system_type",
>       "type": "string"
>     },
>     {
>       "name": "timestamp",
>       "type": "uint64"
>     },
>     {
>       "name": "sysplex_name",
>       "type": "string"
>     }
>   ],
>   "id": "libvirt-14"
> }

I would vote for Option 1 as this seems to be a bit more natural from
an object model.  There is not much impact for the upcoming changes
to consume this information.


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

* Re: [PATCH v4 1/4] hw/s390x: add SCLP event type CPI
  2025-05-23 12:07       ` Hendrik Brueckner
@ 2025-05-28 12:11         ` Shalini Chellathurai Saroja
  0 siblings, 0 replies; 21+ messages in thread
From: Shalini Chellathurai Saroja @ 2025-05-28 12:11 UTC (permalink / raw)
  To: Hendrik Brueckner
  Cc: Thomas Huth, Nina Schoetterl-Glausch, qemu-s390x mailing list,
	Daniel Berrange, qemu-devel mailing list

On 2025-05-23 14:07, Hendrik Brueckner wrote:
> On Tue, May 06, 2025 at 02:16:18PM +0200, Shalini Chellathurai Saroja 
> wrote:
>> On 2025-05-06 09:48, Thomas Huth wrote:
>> > On 06/05/2025 08.48, Nina Schoetterl-Glausch wrote:
>> > > On Mon, 2025-05-05 at 08:55 +0200, Shalini Chellathurai Saroja wrote:
>> > > > On 2025-04-28 11:22, Janis Schoetterl-Glausch wrote:
>> > > > > On Thu, 2025-04-10 at 17:09 +0200, Shalini Chellathurai
>> > > > > Saroja wrote:
>> > > > > > Implement the Service-Call Logical Processor (SCLP) event
>> > > > > > type Control-Program Identification (CPI) in QEMU. This
>> > > > > > event is used to send CPI identifiers from the guest to the
>> > > > > > host. The CPI identifiers are: system type, system name,
>> > > > > > system level and sysplex name.
>> > > > > >
>> > > > > > System type: operating system of the guest (e.g. "LINUX").
>> > > > > > System name: user configurable name of the guest (e.g. "TESTVM").
>> > > > > > System level: distribution and kernel version, if the
>> > > > > > system type is
>> > > > > > Linux
>> > > > > > (e.g. 0x50e00).
>> > > > > > Sysplex name: name of the cluster which the guest
>> > > > > > belongs to (if any)
>> > > > > > (e.g. "PLEX").
>> > > > > >
>> > > > > > Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
>> > > > > > Reviewed-by: Thomas Huth <thuth@redhat.com>
>> > > > > > ---
>> > > > > >   hw/s390x/event-facility.c         |  2 +
>> > > > > >   hw/s390x/meson.build              |  1 +
>> > > > > >   hw/s390x/s390-virtio-ccw.c        | 14 +++++
>> > > > > >   hw/s390x/sclpcpi.c                | 92
>> > > > > > +++++++++++++++++++++++++++++++
>> > > > > >   include/hw/s390x/event-facility.h | 13 +++++
>> > > > > >   5 files changed, 122 insertions(+)
>> > > > > >   create mode 100644 hw/s390x/sclpcpi.c
>> > > > > >
>> > > > > > diff --git a/hw/s390x/event-facility.c b/hw/s390x/event-facility.c
>> > > > > > index 2b0332c20e..60237b8581 100644
>> > > > > > --- a/hw/s390x/event-facility.c
>> > > > > > +++ b/hw/s390x/event-facility.c
>> > >
>> > > [...]
>> > >
>> > > > It is possible to add the identifiers directly as the properties of
>> > > > sclpcpi (eg. system type as shown below) and remove the
>> > > > control-program-id.
>> > >
>> > > This is what I meant, drop it from qom.
>> 
>> Ok.
>> 
>> > > >
>> > > > virsh # qemu-monitor-command vm --pretty
>> > > > '{"execute":"qom-list","arguments": {"path":
>> > > > "/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
>> > > > {
>> > > >     "return": [
>> > > >       {
>> > > >         "name": "type",
>> > > >         "type": "string"
>> > > >       },
>> > > >       {
>> > > >         "name": "parent_bus",
>> > > >         "type": "link<bus>"
>> > > >       },
>> > > >       {
>> > > >         "name": "realized",
>> > > >         "type": "bool"
>> > > >       },
>> > > >       {
>> > > >         "name": "hotplugged",
>> > > >         "type": "bool"
>> > > >       },
>> > > >       {
>> > > >         "name": "hotpluggable",
>> > > >         "type": "bool"
>> > > >       },
>> > > >       {
>> > > >         "name": "system_type",
>> > > >         "type": "string"
>> > > >       },
>> > > >       {
>> > > >         "name": "control-program-id",
>> > > >         "type": "S390ControlProgramId"
>> > > >       }
>> > > >     ],
>> > > >     "id": "libvirt-16"
>> > > > }
>> > > >
>> > > > virsh # qemu-monitor-command vm --pretty '{"execute":"qom-get",
>> > > > "arguments":{"path":"/machine/sclp/s390-sclp-event-facility/sclpcpi",
>> > > > "property":"system_type"}}'
>> > > > {
>> > > >     "return": "LINUX   ",
>> > > >     "id": "libvirt-17"
>> > > > }
>> > > >
>> > > > However, Hendrik Brückner suggested to group the identifiers together
>> > > > during the initial discussion of this line item. So, I would
>> > > > prefer to
>> > >
>> > > They are grouped together under "sclpcpi", no?
>> 
>> Yes.
>> 
>> > >
>> > > > leave this as it is. Please let me know if you still think otherwise.
>> > >
>> > > I don't have a strong opinion on this, just wanted to mention it and
>> > > see what other people say.
>> >
>> > I guess it mostly depends on whether there are future plans for using
>> > the QOM type elsewhere. If this type is supposed to be used in other
>> > QAPI calls in the future, it makes sense to keep it separate now. If
>> > there are no such plans, it's maybe easier to integrate the values
>> > into sclpcpi directly. Hendrik, any opinion from your side?
>> >
>> >  Thomas
>> 
>> Hello Hendrik,
>> 
>> I have provided the output of both the options below. Please let me 
>> know
>> which option do you prefer.
>> 
>> I have incorporated the other comments. So I will be able to send V5 
>> after
>> your response. Thank you very much!
>> 
>> Option 1: Control-program identifiers set as the properties of 
>> sclpcpi:
>> 
>> virsh # qemu-monitor-command vm --pretty 
>> '{"execute":"qom-list","arguments":
>> {"path": "/machine/sclp/s390-sclp-event-facility/sclpcpi"}}'
>> {
>>   "return": [
>>     {
>> [...]
>>     },
>>     {
>>       "name": "system_level",
>>       "type": "uint64"
>>     },
>>     {
>>       "name": "system_name",
>>       "type": "string"
>>     },
>>     {
>>       "name": "system_type",
>>       "type": "string"
>>     },
>>     {
>>       "name": "timestamp",
>>       "type": "uint64"
>>     },
>>     {
>>       "name": "sysplex_name",
>>       "type": "string"
>>     }
>>   ],
>>   "id": "libvirt-14"
>> }
> 
> I would vote for Option 1 as this seems to be a bit more natural from
> an object model.  There is not much impact for the upcoming changes
> to consume this information.

Hello Hendrik,

Ok, I will incorporate this and will send the next version of this 
series.
Thank you very much!

-- 
Mit freundlichen Grüßen / Kind regards
Shalini Chellathurai Saroja
Software Developer
Linux on IBM Z & KVM Development
IBM Deutschland Research & Development GmbH
Dept 1419, Schoenaicher Str. 220, 71032 Boeblingen
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht 
Stuttgart, HRB 243294


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

end of thread, other threads:[~2025-05-28 12:12 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-10 15:09 [PATCH v4 0/4] Add SCLP event type CPI Shalini Chellathurai Saroja
2025-04-10 15:09 ` [PATCH v4 1/4] hw/s390x: add " Shalini Chellathurai Saroja
2025-04-28  9:22   ` Janis Schoetterl-Glausch
2025-04-29  9:20   ` Nina Schoetterl-Glausch
2025-05-05  6:58     ` Shalini Chellathurai Saroja
2025-04-10 15:09 ` [PATCH v4 2/4] hw/s390x: add Control-Program Identification to QOM Shalini Chellathurai Saroja
2025-04-28 12:01   ` Nina Schoetterl-Glausch
2025-05-05  7:27     ` Shalini Chellathurai Saroja
2025-04-30 10:34   ` Thomas Huth
2025-05-05  7:42     ` Shalini Chellathurai Saroja
2025-04-10 15:09 ` [PATCH v4 3/4] hw/s390x: support migration of CPI data Shalini Chellathurai Saroja
2025-04-10 15:09 ` [PATCH v4 4/4] hw/s390x: compat handling for backward migration Shalini Chellathurai Saroja
2025-04-28 12:05   ` Nina Schoetterl-Glausch
2025-05-05  8:54     ` Shalini Chellathurai Saroja
2025-05-06  6:39       ` Nina Schoetterl-Glausch
  -- strict thread matches above, loose matches on Subject: below --
2025-05-05  6:55 [PATCH v4 1/4] hw/s390x: add SCLP event type CPI Shalini Chellathurai Saroja
2025-05-06  6:48 ` Nina Schoetterl-Glausch
2025-05-06  7:48   ` Thomas Huth
2025-05-06 12:16     ` Shalini Chellathurai Saroja
2025-05-23 12:07       ` Hendrik Brueckner
2025-05-28 12:11         ` Shalini Chellathurai Saroja

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).