From: Corey Bryant <coreyb@linux.vnet.ibm.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
lcapitulino@redhat.com, qemu-devel@nongnu.org,
Stefan Berger <stefanb@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH] QMP: TPM QMP and man page documentation updates
Date: Tue, 19 Mar 2013 10:59:50 -0400 [thread overview]
Message-ID: <51487D66.8010007@linux.vnet.ibm.com> (raw)
In-Reply-To: <87d2uvu9yk.fsf@blackfin.pond.sub.org>
On 03/19/2013 03:26 AM, Markus Armbruster wrote:
> [Note cc: Anthony for QAPI schema expertise]
>
> Stefan Berger <stefanb@linux.vnet.ibm.com> writes:
>
>> On 03/18/2013 12:16 PM, Markus Armbruster wrote:
>>> Corey Bryant <coreyb@linux.vnet.ibm.com> writes:
>>>
>>>> Signed-off-by: Corey Bryant <coreyb@linux.vnet.ibm.com>
>>>> ---
>>>> qemu-options.hx | 3 ++-
>>>> qmp-commands.hx | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>> 2 files changed, 61 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/qemu-options.hx b/qemu-options.hx
>>>> index 30fb85d..3b3cd0f 100644
>>>> --- a/qemu-options.hx
>>>> +++ b/qemu-options.hx
>>>> @@ -2237,7 +2237,8 @@ Backend type must be:
>>>> @option{passthrough}.
>>>> The specific backend type will determine the applicable
>>>> options.
>>>> -The @code{-tpmdev} option requires a @code{-device} option.
>>>> +The @code{-tpmdev} option creates the TPM backend and requires a
>>>> +@code{-device} option that specifies the TPM frontend interface model.
>>>> Options to each backend are described below.
>>>> diff --git a/qmp-commands.hx b/qmp-commands.hx
>>>> index b370060..4eda5ea 100644
>>>> --- a/qmp-commands.hx
>>>> +++ b/qmp-commands.hx
>>>> @@ -2721,18 +2721,77 @@ EQMP
>>>> .mhandler.cmd_new = qmp_marshal_input_query_tpm,
>>>> },
>>>> +SQMP
>>>> +query-tpm
>>>> +---------
>>>> +
>>>> +Return information about the TPM device.
>>>> +
>>>> +Arguments: None
>>>> +
>>>> +Example:
>>>> +
>>>> +-> { "execute": "query-tpm" }
>>>> +<- { "return":
>>>> + [
>>>> + { "model": "tpm-tis",
>>>> + "tpm-options":
>>>> + { "type": "tpm-passthrough-options",
>>>> + "data":
>>>> + { "cancel-path": "/sys/class/misc/tpm0/device/cancel",
>>>> + "path": "/dev/tpm0"
>>>> + }
>>>> + },
>>>> + "type": "passthrough",
>>>> + "id": "tpm0"
>>>> + }
>>>> + ]
>>>> + }
>>>> +
>>>> +EQMP
>>>> +
>>> "tpm-options" is a discriminated union. How is its discriminator "type"
>>> (here: "tpm-passthrough-options") related to the outer "type" (here:
>>> "passthrough")?
>>
>> It gives you similar information twice. So there is a direct
>> relationship between the two types.
>
> Awkward and undocumented.
>
> Relevant parts of qapi-schema.json:
>
> { 'enum': 'TpmType', 'data': [ 'passthrough' ] }
>
> { 'union': 'TpmTypeOptions',
> 'data': { 'tpm-passthrough-options' : 'TPMPassthroughOptions' } }
>
> { 'type': 'TPMInfo',
> 'data': {'id': 'str',
> 'model': 'TpmModel',
> 'type': 'TpmType',
> 'tpm-options': 'TpmTypeOptions' } }
>
> Type Netdev solves the same problem more elegantly:
>
> { 'union': 'NetClientOptions',
> 'data': {
> 'none': 'NetdevNoneOptions',
> 'nic': 'NetLegacyNicOptions',
> 'user': 'NetdevUserOptions',
> 'tap': 'NetdevTapOptions',
> 'socket': 'NetdevSocketOptions',
> 'vde': 'NetdevVdeOptions',
> 'dump': 'NetdevDumpOptions',
> 'bridge': 'NetdevBridgeOptions',
> 'hubport': 'NetdevHubPortOptions' } }
>
> { 'type': 'Netdev',
> 'data': {
> 'id': 'str',
> 'opts': 'NetClientOptions' } }
>
> Uses the union's discriminator. Straightforward.
>
> Following Netdev precedence, we get:
>
> { 'union': 'TpmTypeOptions',
> 'data': { 'passthrough' : 'TPMPassthroughOptions' } }
>
> { 'type': 'TPMInfo',
> 'data': {'id': 'str',
> 'model': 'TpmModel',
> 'opts': 'TpmTypeOptions' } }
>
I can send a patch for this update if you'd like.
> Duplication of type is gone. No need for documentation.
>
> Since enum TpmType is used elsewhere, it still gets duplicated in the
> union's discriminator. Anthony, is there a way to name the implicit
> discriminator enum type for reference elsewhere in the schema?
>
Are you saying it still gets duplicated with this fix? I'm not sure
what you mean.
--
Regards,
Corey Bryant
next prev parent reply other threads:[~2013-03-19 15:00 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-15 17:17 [Qemu-devel] [PATCH] QMP: TPM QMP and man page documentation updates Corey Bryant
2013-03-15 17:54 ` Eric Blake
2013-03-18 16:16 ` Markus Armbruster
2013-03-18 17:46 ` Stefan Berger
2013-03-18 18:35 ` Corey Bryant
2013-03-19 7:26 ` Markus Armbruster
2013-03-19 14:59 ` Corey Bryant [this message]
2013-03-20 12:32 ` Markus Armbruster
2013-03-20 13:26 ` Corey Bryant
2013-03-20 16:36 ` Corey Bryant
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=51487D66.8010007@linux.vnet.ibm.com \
--to=coreyb@linux.vnet.ibm.com \
--cc=aliguori@us.ibm.com \
--cc=armbru@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanb@linux.vnet.ibm.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;
as well as URLs for NNTP newsgroup(s).