From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: [v3 1/5] Qemu-Xen-vTPM: Support for Xen stubdom vTPM command line options Date: Mon, 19 Jan 2015 18:31:07 +0100 Message-ID: <54BD3F5B.2020508__31807.0752815858$1421688770$gmane$org@redhat.com> References: <1419980578-18628-1-git-send-email-quan.xu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1419980578-18628-1-git-send-email-quan.xu@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Quan Xu , qemu-devel@nongnu.org Cc: xen-devel@lists.xen.org, armbru@redhat.com, lcapitulino@redhat.com List-Id: xen-devel@lists.xenproject.org On 31/12/2014 00:02, Quan Xu wrote: > Signed-off-by: Quan Xu > --- > configure | 14 ++++++++++++++ > hmp.c | 7 +++++++ > qapi-schema.json | 19 ++++++++++++++++--- > qemu-options.hx | 13 +++++++++++-- > tpm.c | 7 ++++++- > 5 files changed, 54 insertions(+), 6 deletions(-) > > diff --git a/configure b/configure > index a9e4d49..d63b8a1 100755 > --- a/configure > +++ b/configure > @@ -2942,6 +2942,16 @@ else > fi > > ########################################## > +# TPM xenstubdoms is only on x86 Linux > + > +if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64 && \ > + test "$xen" = "yes"; then > + tpm_xenstubdoms=$tpm > +else > + tpm_xenstubdoms=no > +fi > + > +########################################## > # attr probe > > if test "$attr" != "no" ; then > @@ -4333,6 +4343,7 @@ echo "gcov $gcov_tool" > echo "gcov enabled $gcov" > echo "TPM support $tpm" > echo "libssh2 support $libssh2" > +echo "TPM xenstubdoms $tpm_xenstubdoms" > echo "TPM passthrough $tpm_passthrough" > echo "QOM debugging $qom_cast_debug" > echo "vhdx $vhdx" > @@ -4810,6 +4821,9 @@ if test "$tpm" = "yes"; then > if test "$tpm_passthrough" = "yes"; then > echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak > fi > + if test "$tpm_xenstubdoms" = "yes"; then > + echo "CONFIG_TPM_XENSTUBDOMS=y" >> $config_host_mak > + fi > fi > > echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak > diff --git a/hmp.c b/hmp.c > index 63d7686..1df3ec7 100644 > --- a/hmp.c > +++ b/hmp.c > @@ -689,6 +689,7 @@ void hmp_info_tpm(Monitor *mon, const QDict *qdict) > Error *err = NULL; > unsigned int c = 0; > TPMPassthroughOptions *tpo; > + TPMXenstubdomsOptions *txo; > > info_list = qmp_query_tpm(&err); > if (err) { > @@ -718,6 +719,12 @@ void hmp_info_tpm(Monitor *mon, const QDict *qdict) > tpo->has_cancel_path ? ",cancel-path=" : "", > tpo->has_cancel_path ? tpo->cancel_path : ""); > break; > + case TPM_TYPE_OPTIONS_KIND_XENSTUBDOMS: > + txo = ti->options->xenstubdoms; > + if (!txo) { > + monitor_printf(mon, "null TPMXenstubdomsOptions error!\n"); > + } > + break; No need for the first four lines of code after the "case". > case TPM_TYPE_OPTIONS_KIND_MAX: > break; > } > diff --git a/qapi-schema.json b/qapi-schema.json > index 24379ab..9745c2b 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -2854,9 +2854,10 @@ > # > # @passthrough: TPM passthrough type > # > -# Since: 1.5 > +# @xenstubdoms: TPM xenstubdoms type (since 2.3)## Since 1.5 Cut-and-paste mistake. Paolo > +# > ## > -{ 'enum': 'TpmType', 'data': [ 'passthrough' ] } > +{ 'enum': 'TpmType', 'data': [ 'passthrough', 'xenstubdoms' ] } > > ## > # @query-tpm-types: > @@ -2884,6 +2885,16 @@ > { 'type': 'TPMPassthroughOptions', 'data': { '*path' : 'str', > '*cancel-path' : 'str'} } > > +# @TPMXenstubdomsOptions: > +# > +# Information about the TPM xenstubdoms type > +# > +# Since: 2.3 > +## > +{ 'type': 'TPMXenstubdomsOptions', 'data': { } } > +# > +## > + > ## > # @TpmTypeOptions: > # > @@ -2894,7 +2905,9 @@ > # Since: 1.5 > ## > { 'union': 'TpmTypeOptions', > - 'data': { 'passthrough' : 'TPMPassthroughOptions' } } > + 'data': { 'passthrough' : 'TPMPassthroughOptions', > + 'xenstubdoms' : 'TPMXenstubdomsOptions' } } > +## > > ## > # @TpmInfo: > diff --git a/qemu-options.hx b/qemu-options.hx > index 1e7d5b8..fd73f57 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -2485,7 +2485,8 @@ DEF("tpmdev", HAS_ARG, QEMU_OPTION_tpmdev, \ > "-tpmdev passthrough,id=id[,path=path][,cancel-path=path]\n" > " use path to provide path to a character device; default is /dev/tpm0\n" > " use cancel-path to provide path to TPM's cancel sysfs entry; if\n" > - " not provided it will be searched for in /sys/class/misc/tpm?/device\n", > + " not provided it will be searched for in /sys/class/misc/tpm?/device\n" > + "-tpmdev xenstubdoms,id=id\n", > QEMU_ARCH_ALL) > STEXI > > @@ -2495,7 +2496,8 @@ The general form of a TPM device option is: > @item -tpmdev @var{backend} ,id=@var{id} [,@var{options}] > @findex -tpmdev > Backend type must be: > -@option{passthrough}. > +@option{passthrough}, or > +@option{xenstubdoms}. > > The specific backend type will determine the applicable options. > The @code{-tpmdev} option creates the TPM backend and requires a > @@ -2545,6 +2547,13 @@ To create a passthrough TPM use the following two options: > Note that the @code{-tpmdev} id is @code{tpm0} and is referenced by > @code{tpmdev=tpm0} in the device option. > > +To create a xenstubdoms TPM use the following two options: > +@example > +-tpmdev xenstubdoms,id=tpm0 -device tpm-tis,tpmdev=tpm0 > +@end example > +Note that the @code{-tpmdev} id is @code{tpm0} and is referenced by > +@code{tpmdev=tpm0} in the device option. > + > @end table > > ETEXI > diff --git a/tpm.c b/tpm.c > index c371023..ee9acb8 100644 > --- a/tpm.c > +++ b/tpm.c > @@ -25,7 +25,7 @@ static QLIST_HEAD(, TPMBackend) tpm_backends = > > > #define TPM_MAX_MODELS 1 > -#define TPM_MAX_DRIVERS 1 > +#define TPM_MAX_DRIVERS 2 > > static TPMDriverOps const *be_drivers[TPM_MAX_DRIVERS] = { > NULL, > @@ -256,6 +256,7 @@ static TPMInfo *qmp_query_tpm_inst(TPMBackend *drv) > { > TPMInfo *res = g_new0(TPMInfo, 1); > TPMPassthroughOptions *tpo; > + TPMXenstubdomsOptions *txo; > > res->id = g_strdup(drv->id); > res->model = drv->fe_model; > @@ -275,6 +276,10 @@ static TPMInfo *qmp_query_tpm_inst(TPMBackend *drv) > tpo->has_cancel_path = true; > } > break; > + case TPM_TYPE_XENSTUBDOMS: > + res->options->kind = TPM_TYPE_OPTIONS_KIND_XENSTUBDOMS; > + txo = g_new0(TPMXenstubdomsOptions, 1); > + res->options->xenstubdoms = txo; > case TPM_TYPE_MAX: > break; > } >