On Wed, Jun 02, 2021 at 03:51:02PM -0500, Eric Blake wrote: > On Mon, May 31, 2021 at 03:38:06PM +0300, Valeriy Vdovin wrote: > > Introducing new qapi method 'query-kvm-cpuid'. This method can be used to > > get virtualized cpu model info generated by QEMU during VM initialization in > > the form of cpuid representation. > > > > > > Use example: > > qmp_request: { > > "execute": "query-kvm-cpuid" > > } > > > > qmp_response: [ > > { > > "eax": 1073741825, > > "edx": 77, > > "in_eax": 1073741824, > > "ecx": 1447775574, > > "ebx": 1263359563, > > }, > > JSON does not permit a trailing ',' before '}'; which means you did > not actually paste an actual QMP response here. > I actually did paste it. Here is a python code-snippet of my test script that I've used to extract the above response: self.__p.stdin.writelines([cmdstring]) self.__p.stdin.flush() out = self.__p.stdout.readline() print(out) resp = json.loads(out)['return'] pretty = json.dumps(resp, indent=2) print('qmp_response: {}'.format(pretty)) <- this is what I've copied. > > --- > > qapi/machine-target.json | 43 ++++++++++++++++++++++++++++++++++++++ > > target/i386/kvm/kvm.c | 37 ++++++++++++++++++++++++++++++++ > > tests/qtest/qmp-cmd-test.c | 1 + > > 3 files changed, 81 insertions(+) > > > > diff --git a/qapi/machine-target.json b/qapi/machine-target.json > > index e7811654b7..a83180dd24 100644 > > --- a/qapi/machine-target.json > > +++ b/qapi/machine-target.json > > @@ -329,3 +329,46 @@ > > ## > > { 'command': 'query-cpu-definitions', 'returns': ['CpuDefinitionInfo'], > > 'if': 'defined(TARGET_PPC) || defined(TARGET_ARM) || defined(TARGET_I386) || defined(TARGET_S390X) || defined(TARGET_MIPS)' } > > + > > +## > > +# @CpuidEntry: > > +# > > +# A single entry of a CPUID response. > > +# > > +# One entry holds full set of information (leaf) returned to the guest in response > > +# to it calling a CPUID instruction with eax, ecx used as the agruments to that > > arguments > > > +# instruction. ecx is an optional argument as not all of the leaves support it. > > Is there a default value of ecx for when it is not provided by the > user but needed by the leaf? Or is it an error if ecx is omitted in > that case? Similarly, is it an error if ecx is provided but not > needed? > > > +# > > +# @in_eax: CPUID argument in eax > > +# @in_ecx: CPUID argument in ecx > > Should be in-eax, in-ecx. > > > +# @eax: eax > > +# @ebx: ebx > > +# @ecx: ecx > > +# @edx: edx > > +# > > +# Since: 6.1 > > +## > > +{ 'struct': 'CpuidEntry', > > + 'data': { 'in_eax' : 'uint32', > > + '*in_ecx' : 'uint32', > > + 'eax' : 'uint32', > > + 'ebx' : 'uint32', > > + 'ecx' : 'uint32', > > + 'edx' : 'uint32' > > + }, > > + 'if': 'defined(TARGET_I386) && defined(CONFIG_KVM)' } > > + > > +## > > +# @query-kvm-cpuid: > > +# > > +# Returns raw data from the KVM CPUID table for the first VCPU. > > +# The KVM CPUID table defines the response to the CPUID > > +# instruction when executed by the guest operating system. > > +# > > +# Returns: a list of CpuidEntry > > +# > > +# Since: 6.1 > > +## > > +{ 'command': 'query-kvm-cpuid', > > + 'returns': ['CpuidEntry'], > > + 'if': 'defined(TARGET_I386) && defined(CONFIG_KVM)' } > > -- > Eric Blake, Principal Software Engineer > Red Hat, Inc. +1-919-301-3266 > Virtualization: qemu.org | libvirt.org >