On 10/09/2017 06:56 PM, Marc-André Lureau wrote:
> Backend can give more accurate error description, and lift out the job
> from the frontend.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
> ---
> include/sysemu/tpm_backend.h | 3 ++-
> backends/tpm.c | 3 ++-
> hw/tpm/tpm_tis.c | 4 +---
> 3 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h
> index dd4fb288ea..51dfc0de9c 100644
> --- a/include/sysemu/tpm_backend.h
> +++ b/include/sysemu/tpm_backend.h
> @@ -100,12 +100,13 @@ enum TpmType tpm_backend_get_type(TPMBackend *s);
> * @s: the backend to initialized
> * @tpmif: TPM interface
> * @datacb: callback for sending data to frontend
> + * @errp: a pointer to return the #Error object if an error occurs.
> *
> * Initialize the backend with the given variables.
> *
> * Returns 0 on success.
> */
> -int tpm_backend_init(TPMBackend *s, TPMIf *tpmif);
> +int tpm_backend_init(TPMBackend *s, TPMIf *tpmif, Error **errp);
>
> /**
> * tpm_backend_startup_tpm:
> diff --git a/backends/tpm.c b/backends/tpm.c
> index 58f823d54c..7b108bd5d8 100644
> --- a/backends/tpm.c
> +++ b/backends/tpm.c
> @@ -54,9 +54,10 @@ enum TpmType tpm_backend_get_type(TPMBackend *s)
> return k->type;
> }
>
> -int tpm_backend_init(TPMBackend *s, TPMIf *tpmif)
> +int tpm_backend_init(TPMBackend *s, TPMIf *tpmif, Error **errp)
> {
> if (s->tpmif) {
> + error_setg(errp, "TPM backend '%s' is already initialized", s->id);
> return -1;
> }
>
> diff --git a/hw/tpm/tpm_tis.c b/hw/tpm/tpm_tis.c
> index 355427ab29..2fbc760730 100644
> --- a/hw/tpm/tpm_tis.c
> +++ b/hw/tpm/tpm_tis.c
> @@ -1069,9 +1069,7 @@ static void tpm_tis_realizefn(DeviceState *dev, Error **errp)
>
> s->be_driver->fe_model = TPM_MODEL_TPM_TIS;
>
> - if (tpm_backend_init(s->be_driver, TPM_IF(s))) {
> - error_setg(errp, "tpm_tis: backend driver with id %s could not be "
> - "initialized", s->backend);
> + if (tpm_backend_init(s->be_driver, TPM_IF(s), errp)) {
> return;
> }
>