The query-cpu-polarization qmp command returns the current CPU polarization of the machine. Signed-off-by: Pierre Morel <pmorel@xxxxxxxxxxxxx> --- qapi/machine-target.json | 30 ++++++++++++++++++++++++++++++ hw/s390x/cpu-topology.c | 16 ++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/qapi/machine-target.json b/qapi/machine-target.json index ffde2e9cbd..8eb05755cd 100644 --- a/qapi/machine-target.json +++ b/qapi/machine-target.json @@ -4,6 +4,7 @@ # This work is licensed under the terms of the GNU GPL, version 2 or later. # See the COPYING file in the top-level directory. +{ 'include': 'common.json' } { 'include': 'machine-common.json' } ## @@ -424,3 +425,32 @@ 'features': [ 'unstable' ], 'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM' ] } } + +## +# @CpuPolarizationInfo: +# +# The result of a cpu polarization +# +# @polarization: the CPU polarization +# +# Since: 2.8 +## +{ 'struct': 'CpuPolarizationInfo', + 'data': { 'polarization': 'CpuS390Polarization' }, + 'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM' ] } +} + +## +# @query-cpu-polarization: +# +# Features: +# @unstable: This command may still be modified. +# +# Returns: the machine polarization +# +# Since: 8.1 +## +{ 'command': 'query-cpu-polarization', 'returns': 'CpuPolarizationInfo', + 'features': [ 'unstable' ], + 'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM' ] } +} diff --git a/hw/s390x/cpu-topology.c b/hw/s390x/cpu-topology.c index 97706a1daf..b8a292340c 100644 --- a/hw/s390x/cpu-topology.c +++ b/hw/s390x/cpu-topology.c @@ -20,6 +20,7 @@ #include "hw/s390x/cpu-topology.h" #include "qapi/qapi-commands-machine-target.h" #include "qapi/qapi-events-machine-target.h" +#include "qapi/type-helpers.h" /* * s390_topology is used to keep the topology information. @@ -486,3 +487,18 @@ void qmp_set_cpu_topology(uint16_t core, has_drawer, drawer, has_entitlement, entitlement, has_dedicated, dedicated, errp); } + +CpuPolarizationInfo *qmp_query_cpu_polarization(Error **errp) +{ + struct S390CcwMachineState *s390ms = S390_CCW_MACHINE(current_machine); + CpuPolarizationInfo *info = g_new0(CpuPolarizationInfo, 1); + + + if (s390ms->vertical_polarization) { + info->polarization = S390_CPU_POLARIZATION_VERTICAL; + } else { + info->polarization = S390_CPU_POLARIZATION_HORIZONTAL; + } + + return info; +} -- 2.31.1