[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v8] qapi: introduce 'query-kvm-cpuid' action
From: |
Valeriy Vdovin |
Subject: |
Re: [PATCH v8] qapi: introduce 'query-kvm-cpuid' action |
Date: |
Thu, 3 Jun 2021 11:21:12 +0300 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
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
>