Commit ca230ff3 authored by Viktor Mihajlovski's avatar Viktor Mihajlovski Committed by Cornelia Huck
Browse files

qmp: add architecture specific cpu data for query-cpus-fast



The s390 CPU state can be retrieved without interrupting the
VM execution. Extendend the CpuInfoFast union with architecture
specific data and an implementation for s390.

Return data looks like this:
 [
   {"thread-id":64301,"props":{"core-id":0},
    "arch":"s390","cpu-state":"operating",
    "qom-path":"/machine/unattached/device[0]","cpu-index":0},
   {"thread-id":64302,"props":{"core-id":1},
    "arch":"s390","cpu-state":"operating",
    "qom-path":"/machine/unattached/device[1]","cpu-index":1}
]

Signed-off-by: default avatarViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <1518797321-28356-4-git-send-email-mihajlov@linux.vnet.ibm.com>
Signed-off-by: default avatarCornelia Huck <cohuck@redhat.com>
parent ce74ee3d
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2166,6 +2166,10 @@ CpuInfoFastList *qmp_query_cpus_fast(Error **errp)
    MachineClass *mc = MACHINE_GET_CLASS(ms);
    CpuInfoFastList *head = NULL, *cur_item = NULL;
    CPUState *cpu;
#if defined(TARGET_S390X)
    S390CPU *s390_cpu;
    CPUS390XState *env;
#endif

    CPU_FOREACH(cpu) {
        CpuInfoFastList *info = g_malloc0(sizeof(*info));
@@ -2183,6 +2187,12 @@ CpuInfoFastList *qmp_query_cpus_fast(Error **errp)
            info->value->props = props;
        }

#if defined(TARGET_S390X)
        s390_cpu = S390_CPU(cpu);
        env = &s390_cpu->env;
        info->value->arch = CPU_INFO_ARCH_S390;
        info->value->u.s390.cpu_state = env->cpu_state;
#endif
        if (!cur_item) {
            head = cur_item = info;
        } else {
+18 −7
Original line number Diff line number Diff line
@@ -408,7 +408,7 @@
# @CpuInfoArch:
#
# An enumeration of cpu types that enable additional information during
# @query-cpus.
# @query-cpus and @query-cpus-fast.
#
# @s390: since 2.12
#
@@ -604,12 +604,24 @@
# @props: properties describing to which node/socket/core/thread
#         virtual CPU belongs to, provided if supported by board
#
# @arch: architecture of the cpu, which determines which additional fields
#        will be listed
#
# Since: 2.12
#
##
{ 'struct': 'CpuInfoFast',
  'data': {'cpu-index': 'int', 'qom-path': 'str',
           'thread-id': 'int', '*props': 'CpuInstanceProperties' } }
{ 'union': 'CpuInfoFast',
  'base': {'cpu-index': 'int', 'qom-path': 'str',
           'thread-id': 'int', '*props': 'CpuInstanceProperties',
           'arch': 'CpuInfoArch' },
  'discriminator': 'arch',
  'data': { 'x86': 'CpuInfoOther',
            'sparc': 'CpuInfoOther',
            'ppc': 'CpuInfoOther',
            'mips': 'CpuInfoOther',
            'tricore': 'CpuInfoOther',
            's390': 'CpuInfoS390',
            'other': 'CpuInfoOther' } }

##
# @query-cpus-fast:
@@ -620,9 +632,6 @@
#
# Returns: list of @CpuInfoFast
#
# Notes: The CPU architecture name is not returned by query-cpus-fast.
#        Use query-target to retrieve that information.
#
# Since: 2.12
#
# Example:
@@ -637,6 +646,7 @@
#                 "socket-id": 0
#             },
#             "qom-path": "/machine/unattached/device[0]",
#             "arch":"x86",
#             "cpu-index": 0
#         },
#         {
@@ -647,6 +657,7 @@
#                 "socket-id": 1
#             },
#             "qom-path": "/machine/unattached/device[2]",
#             "arch":"x86",
#             "cpu-index": 1
#         }
#     ]