public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, lvivier@redhat.com,
	thuth@redhat.com, mtosatti@redhat.com, pbonzini@redhat.com,
	richard.henderson@linaro.org, eblake@redhat.com,
	philmd@redhat.com, marcel.apfelbaum@gmail.com,
	eduardo@habkost.net, den@openvz.org, valery.vdovin.s@gmail.com,
	Valeriy Vdovin <valeriy.vdovin@virtuozzo.com>
Subject: Re: [PATCH v16] qapi: introduce 'x-query-x86-cpuid' QMP command.
Date: Fri, 21 Jan 2022 19:33:47 +0300	[thread overview]
Message-ID: <2f3416bf-c6af-fe23-79f6-70c65adc50de@virtuozzo.com> (raw)
In-Reply-To: <87lezbdc59.fsf@dusky.pond.sub.org>

19.01.2022 17:37, Markus Armbruster wrote:
> Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes:
> 
>> From: Valeriy Vdovin <valeriy.vdovin@virtuozzo.com>
>>
>> Introducing new QMP command 'query-x86-cpuid'. This command can be used to
>> get virtualized cpu model info generated by QEMU during VM initialization in
>> the form of cpuid representation.
>>
>> Diving into more details about virtual CPU generation: QEMU first parses '-cpu'
>> command line option. From there it takes the name of the model as the basis for
>> feature set of the new virtual CPU. After that it uses trailing '-cpu' options,
>> that state if additional cpu features should be present on the virtual CPU or
>> excluded from it (tokens '+'/'-' or '=on'/'=off').
>> After that QEMU checks if the host's cpu can actually support the derived
>> feature set and applies host limitations to it.
>> After this initialization procedure, virtual CPU has it's model and
>> vendor names, and a working feature set and is ready for identification
>> instructions such as CPUID.
>>
>> To learn exactly how virtual CPU is presented to the guest machine via CPUID
>> instruction, new QMP command can be used. By calling 'query-x86-cpuid'
>> command, one can get a full listing of all CPUID leaves with subleaves which are
>> supported by the initialized virtual CPU.
>>
>> Other than debug, the command is useful in cases when we would like to
>> utilize QEMU's virtual CPU initialization routines and put the retrieved
>> values into kernel CPUID overriding mechanics for more precise control
>> over how various processes perceive its underlying hardware with
>> container processes as a good example.
>>
>> The command is specific to x86. It is currenly only implemented for KVM acceleator.
> 
> Please wrap your commit messages around column 70.
> 
>>
>> Output format:
>> The output is a plain list of leaf/subleaf argument combinations, that
>> return 4 words in registers EAX, EBX, ECX, EDX.
>>
>> Use example:
>> qmp_request: {
>>    "execute": "x-query-x86-cpuid"
>> }
>>
>> qmp_response: {
>>    "return": [
>>      {
>>        "eax": 1073741825,
>>        "edx": 77,
>>        "in-eax": 1073741824,
>>        "ecx": 1447775574,
>>        "ebx": 1263359563
>>      },
>>      {
>>        "eax": 16777339,
>>        "edx": 0,
>>        "in-eax": 1073741825,
>>        "ecx": 0,
>>        "ebx": 0
>>      },
>>      {
>>        "eax": 13,
>>        "edx": 1231384169,
>>        "in-eax": 0,
>>        "ecx": 1818588270,
>>        "ebx": 1970169159
>>      },
>>      {
>>        "eax": 198354,
>>        "edx": 126614527,
>>        "in-eax": 1,
>>        "ecx": 2176328193,
>>        "ebx": 2048
>>      },
>>      ....
>>      {
>>        "eax": 12328,
>>        "edx": 0,
>>        "in-eax": 2147483656,
>>        "ecx": 0,
>>        "ebx": 0
>>      }
>>    ]
>> }
>>
>> Signed-off-by: Valeriy Vdovin <valeriy.vdovin@virtuozzo.com>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> 
> This needs review from x86 CPU maintainers.  Eduardo?
> 
> [...]
> 
>> diff --git a/qapi/machine-target.json b/qapi/machine-target.json
>> index f5ec4bc172..0ac575b1b9 100644
>> --- a/qapi/machine-target.json
>> +++ b/qapi/machine-target.json
>> @@ -341,3 +341,49 @@
>>                      'TARGET_I386',
>>                      'TARGET_S390X',
>>                      '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 arguments to that instruction. ecx is an optional argument as
>> +# not all of the leaves support it.
>> +#
>> +# @in-eax: CPUID argument in eax
>> +# @in-ecx: CPUID argument in ecx
>> +# @eax: CPUID result in eax
>> +# @ebx: CPUID result in ebx
>> +# @ecx: CPUID result in ecx
>> +# @edx: CPUID result in edx
>> +#
>> +# Since: 7.0
>> +##
>> +{ 'struct': 'CpuidEntry',
>> +  'data': { 'in-eax' : 'uint32',
>> +            '*in-ecx' : 'uint32',
>> +            'eax' : 'uint32',
>> +            'ebx' : 'uint32',
>> +            'ecx' : 'uint32',
>> +            'edx' : 'uint32'
>> +          },
>> +  'if': 'TARGET_I386' }
>> +
>> +##
>> +# @x-query-x86-cpuid:
>> +#
>> +# Returns raw data from the emulated CPUID table for the first VCPU.
>> +# The emulated CPUID table defines the response to the CPUID
>> +# instruction when executed by the guest operating system.
>> +#
>> +#
>> +# Returns: a list of CpuidEntry. Returns error when qemu is configured with
>> +#          --disable-kvm flag or if qemu is run with any other accelerator than KVM.
> 
> Long line, please wrap around column 70.
> 
>> +#
>> +# Since: 7.0
>> +##
>> +{ 'command': 'x-query-x86-cpuid',
>> +  'returns': ['CpuidEntry'],
>> +  'if': 'TARGET_I386' }
> 
> Needs feature 'unstable' now; see commit a3c45b3e62 'qapi: New special
> feature flag "unstable"' and also commit 57df0dff1a "qapi: Extend
> -compat to set policy for unstable interfaces".  Incremental patch
> appended for your convenience.
> 
> 
> diff --git a/qapi/machine-target.json b/qapi/machine-target.json
> index 0ac575b1b9..049fa48a35 100644
> --- a/qapi/machine-target.json
> +++ b/qapi/machine-target.json
> @@ -378,6 +378,8 @@
>   # The emulated CPUID table defines the response to the CPUID
>   # instruction when executed by the guest operating system.
>   #
> +# Features:
> +# @unstable: This command is experimental.
>   #
>   # Returns: a list of CpuidEntry. Returns error when qemu is configured with
>   #          --disable-kvm flag or if qemu is run with any other accelerator than KVM.
> @@ -386,4 +388,5 @@
>   ##
>   { 'command': 'x-query-x86-cpuid',
>     'returns': ['CpuidEntry'],
> -  'if': 'TARGET_I386' }
> +  'if': 'TARGET_I386',
> +  'features': [ 'unstable' ] }
> 

Thanks! I'll resend for convenience.

-- 
Best regards,
Vladimir

      reply	other threads:[~2022-01-21 16:33 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-22 12:31 [PATCH v16] qapi: introduce 'x-query-x86-cpuid' QMP command Vladimir Sementsov-Ogievskiy
2022-01-19 14:37 ` Markus Armbruster
2022-01-21 16:33   ` Vladimir Sementsov-Ogievskiy [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2f3416bf-c6af-fe23-79f6-70c65adc50de@virtuozzo.com \
    --to=vsementsov@virtuozzo.com \
    --cc=armbru@redhat.com \
    --cc=den@openvz.org \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=kvm@vger.kernel.org \
    --cc=lvivier@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    --cc=valeriy.vdovin@virtuozzo.com \
    --cc=valery.vdovin.s@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox