On Mon, Feb 24, 2025 at 01:04:47PM +0100, Shalini Chellathurai Saroja wrote:
> Add Control-Program Identification (CPI) to the QEMU Object
> Model (QOM). The CPI identifiers provide information about
> the guest operating system. The CPI identifiers are:
> system type, system name, system level and sysplex name.
> 
> The system type provides the OS type of the guest (e.g. LINUX).
> The system name provides the name of the guest (e.g. TESTVM).
> The system level provides the distribution and kernel version
> of the guest OS (e.g. 0x50e00).
> The sysplex name provides the sysplex name of the guest
> (e.g. SYSPLEX).
> 
> Signed-off-by: Shalini Chellathurai Saroja <shal...@linux.ibm.com>
> ---
>  hw/s390x/s390-virtio-ccw.c         | 29 +++++++++++++++++++++++++++++
>  include/hw/s390x/s390-virtio-ccw.h |  8 ++++++++
>  qapi/machine.json                  | 24 ++++++++++++++++++++++++
>  3 files changed, 61 insertions(+)
> 
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 51ae0c133d..13ea8db1b0 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -50,6 +50,7 @@
>  #include "hw/s390x/virtio-ccw-md.h"
>  #include "system/replay.h"
>  #include CONFIG_DEVICES
> +#include "qapi/qapi-visit-machine.h"
>  
>  static Error *pv_mig_blocker;
>  
> @@ -803,6 +804,26 @@ static void machine_set_loadparm(Object *obj, Visitor *v,
>      s390_ipl_fmt_loadparm(ms->loadparm, val, errp);
>  }
>  
> +static void machine_get_control_program_id(Object *obj, Visitor *v,
> +                                           const char *name, void *opaque,
> +                                           Error **errp)
> +{
> +    S390CcwMachineState *ms = S390_CCW_MACHINE(obj);
> +    S390ControlProgramId *cpi;
> +    cpi = &(S390ControlProgramId){
> +        .system_type = g_strndup((char *) ms->cpi.system_type,
> +                       sizeof(ms->cpi.system_type)),
> +        .system_name = g_strndup((char *) ms->cpi.system_name,
> +                       sizeof(ms->cpi.system_name)),
> +        .system_level = g_strdup_printf("0x%lx", ms->cpi.system_level),

If the data is an integer, we must return it in QMP as an integer,
not formatted into a hex string.

> +        .sysplex_name = g_strndup((char *) ms->cpi.sysplex_name,
> +                        sizeof(ms->cpi.sysplex_name)),
> +        .timestamp = ms->cpi.timestamp
> +    };

> +##
> +# @S390ControlProgramId:
> +#
> +# Control-program identifiers provide data about Linux instance.
> +#
> +# @system-type: operating system of Linux instance

Is there a list of well known operating system names, or is
this arbitrary free-form text. Needs to be documented.


> +# @system-name: system name of Linux instance

What is a system name ?  Is that a hostname, or is that something
else ?

> +#
> +# @system-level: distribution and kernel version of Linux instance

What does this actually mean ?  This is a single field, but the docs
are describing 2 distinct versions. Even a single version usually
has multiple digits and even a string suffix. This needs to document
how the version information actually encoded in practice, and if
some info is discarded in this process.

> +#
> +# @sysplex-name: sysplex name of Linux instance

I guess "sysplex" is some term people from s390 world would
already understand ? It is possible to explain it or do we just
have to assume prior knowledge ?

> +#
> +# @timestamp: latest update of CPI data

In what units and epoch ? Seconds since the UNIX epoch, or
something else ?

> +#
> +# Since: 9.2
> +##
> +{ 'struct': 'S390ControlProgramId', 'data': {
> +     'system-type': 'str',
> +     'system-name': 'str',
> +     'system-level': 'str',
> +     'sysplex-name': 'str',
> +     'timestamp': 'uint64' } }
> -- 
> 2.47.0
> 
> 

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


Reply via email to