All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Arun Menon <armenon@redhat.com>
Cc: qemu-devel@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Cornelia Huck" <cohuck@redhat.com>,
	"Halil Pasic" <pasic@linux.ibm.com>,
	"Eric Farman" <farman@linux.ibm.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"David Hildenbrand" <david@redhat.com>,
	"Ilya Leoshkevich" <iii@linux.ibm.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Fam Zheng" <fam@euphon.net>,
	"Nicholas Piggin" <npiggin@gmail.com>,
	"Daniel Henrique Barboza" <danielhb413@gmail.com>,
	"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
	"Alex Williamson" <alex.williamson@redhat.com>,
	"Cédric Le Goater" <clg@redhat.com>,
	"Peter Xu" <peterx@redhat.com>, "Fabiano Rosas" <farosas@suse.de>,
	"Hailiang Zhang" <zhanghailiang@xfusion.com>,
	"Steve Sistare" <steven.sistare@oracle.com>,
	qemu-s390x@nongnu.org, qemu-ppc@nongnu.org,
	"Stefan Berger" <stefanb@linux.vnet.ibm.com>
Subject: Re: [PATCH v3 3/3] backends/tpm: Propagate vTPM error on migration failure
Date: Wed, 2 Jul 2025 12:55:53 +0100	[thread overview]
Message-ID: <aGUeSRYXgzpKbrxp@redhat.com> (raw)
In-Reply-To: <20250702-propagate_tpm_error-v3-3-986d94540528@redhat.com>

On Wed, Jul 02, 2025 at 05:06:52PM +0530, Arun Menon wrote:
> - Use the post_load_with_error() hook to propagate TPM
>   errors.
> - The error object is set if the loading of state fails.
>   It can then be retrieved using QMP command:
>   {"execute" : "query-migrate"}

This is only describing what has been done - good commit messages
should primarily describe why it is being done.

> Buglink: https://issues.redhat.com/browse/RHEL-82826

We shouldn't rely on people reading through the buglink to
learn the 'why' - please summarize the important contextual
info and problem scenario here.

> 
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Arun Menon <armenon@redhat.com>
> ---
>  backends/tpm/tpm_emulator.c | 39 ++++++++++++++++++++-------------------
>  1 file changed, 20 insertions(+), 19 deletions(-)
> 
> diff --git a/backends/tpm/tpm_emulator.c b/backends/tpm/tpm_emulator.c
> index 4a234ab2c0b19b2604bf0dd8cb5f4540c72a9438..816134d7b4de00a75a3d0b928d160595b17be810 100644
> --- a/backends/tpm/tpm_emulator.c
> +++ b/backends/tpm/tpm_emulator.c
> @@ -819,7 +819,8 @@ static int tpm_emulator_get_state_blobs(TPMEmulator *tpm_emu)
>  static int tpm_emulator_set_state_blob(TPMEmulator *tpm_emu,
>                                         uint32_t type,
>                                         TPMSizedBuffer *tsb,
> -                                       uint32_t flags)
> +                                       uint32_t flags,
> +                                       Error **errp)
>  {
>      ssize_t n;
>      ptm_setstate pss;
> @@ -838,17 +839,17 @@ static int tpm_emulator_set_state_blob(TPMEmulator *tpm_emu,
>      /* write the header only */
>      if (tpm_emulator_ctrlcmd(tpm_emu, CMD_SET_STATEBLOB, &pss,
>                               offsetof(ptm_setstate, u.req.data), 0, 0) < 0) {
> -        error_report("tpm-emulator: could not set state blob type %d : %s",
> -                     type, strerror(errno));
> +        error_setg(errp, "tpm-emulator: could not set state blob type %d : %s",
> +                   type, strerror(errno));
>          return -1;
>      }
>  
>      /* now the body */
>      n = qemu_chr_fe_write_all(&tpm_emu->ctrl_chr, tsb->buffer, tsb->size);
>      if (n != tsb->size) {
> -        error_report("tpm-emulator: Writing the stateblob (type %d) "
> -                     "failed; could not write %u bytes, but only %zd",
> -                     type, tsb->size, n);
> +        error_setg(errp, "tpm-emulator: Writing the stateblob (type %d) "
> +                   "failed; could not write %u bytes, but only %zd",
> +                   type, tsb->size, n);
>          return -1;
>      }
>  
> @@ -856,17 +857,17 @@ static int tpm_emulator_set_state_blob(TPMEmulator *tpm_emu,
>      n = qemu_chr_fe_read_all(&tpm_emu->ctrl_chr,
>                               (uint8_t *)&pss, sizeof(pss.u.resp));
>      if (n != sizeof(pss.u.resp)) {
> -        error_report("tpm-emulator: Reading response from writing stateblob "
> -                     "(type %d) failed; expected %zu bytes, got %zd", type,
> -                     sizeof(pss.u.resp), n);
> +        error_setg(errp, "tpm-emulator: Reading response from writing "
> +                   "stateblob (type %d) failed; expected %zu bytes, "
> +                   "got %zd", type, sizeof(pss.u.resp), n);
>          return -1;
>      }
>  
>      tpm_result = be32_to_cpu(pss.u.resp.tpm_result);
>      if (tpm_result != 0) {
> -        error_report("tpm-emulator: Setting the stateblob (type %d) failed "
> -                     "with a TPM error 0x%x %s", type, tpm_result,
> -                     tpm_emulator_strerror(tpm_result));
> +        error_setg(errp, "tpm-emulator: Setting the stateblob (type %d) "
> +                   "failed with a TPM error 0x%x %s", type, tpm_result,
> +                   tpm_emulator_strerror(tpm_result));
>          return -1;
>      }
>  
> @@ -880,7 +881,7 @@ static int tpm_emulator_set_state_blob(TPMEmulator *tpm_emu,
>   *
>   * Returns a negative errno code in case of error.
>   */
> -static int tpm_emulator_set_state_blobs(TPMBackend *tb)
> +static int tpm_emulator_set_state_blobs(TPMBackend *tb, Error **errp)
>  {
>      TPMEmulator *tpm_emu = TPM_EMULATOR(tb);
>      TPMBlobBuffers *state_blobs = &tpm_emu->state_blobs;
> @@ -894,13 +895,13 @@ static int tpm_emulator_set_state_blobs(TPMBackend *tb)
>  
>      if (tpm_emulator_set_state_blob(tpm_emu, PTM_BLOB_TYPE_PERMANENT,
>                                      &state_blobs->permanent,
> -                                    state_blobs->permanent_flags) < 0 ||
> +                                    state_blobs->permanent_flags, errp) < 0 ||
>          tpm_emulator_set_state_blob(tpm_emu, PTM_BLOB_TYPE_VOLATILE,
>                                      &state_blobs->volatil,
> -                                    state_blobs->volatil_flags) < 0 ||
> +                                    state_blobs->volatil_flags, errp) < 0 ||
>          tpm_emulator_set_state_blob(tpm_emu, PTM_BLOB_TYPE_SAVESTATE,
>                                      &state_blobs->savestate,
> -                                    state_blobs->savestate_flags) < 0) {
> +                                    state_blobs->savestate_flags, errp) < 0) {
>          return -EIO;
>      }
>  
> @@ -948,12 +949,12 @@ static void tpm_emulator_vm_state_change(void *opaque, bool running,
>   *
>   * Returns negative errno codes in case of error.
>   */
> -static int tpm_emulator_post_load(void *opaque, int version_id)
> +static int tpm_emulator_post_load(void *opaque, int version_id, Error **errp)
>  {
>      TPMBackend *tb = opaque;
>      int ret;
>  
> -    ret = tpm_emulator_set_state_blobs(tb);
> +    ret = tpm_emulator_set_state_blobs(tb, errp);
>      if (ret < 0) {
>          return ret;
>      }
> @@ -969,7 +970,7 @@ static const VMStateDescription vmstate_tpm_emulator = {
>      .name = "tpm-emulator",
>      .version_id = 0,
>      .pre_save = tpm_emulator_pre_save,
> -    .post_load = tpm_emulator_post_load,
> +    .post_load_with_error = tpm_emulator_post_load,
>      .fields = (const VMStateField[]) {
>          VMSTATE_UINT32(state_blobs.permanent_flags, TPMEmulator),
>          VMSTATE_UINT32(state_blobs.permanent.size, TPMEmulator),
> 
> -- 
> 2.49.0
> 
> 

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



      reply	other threads:[~2025-07-02 11:57 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-02 11:36 [PATCH v3 0/3] migration: propagate vTPM errors using Error objects Arun Menon
2025-07-02 11:36 ` [PATCH v3 1/3] migration: Pass Error object errp into vm state loading functions Arun Menon
2025-07-02 12:08   ` Daniel P. Berrangé
2025-07-02 14:42     ` Arun Menon
2025-07-02 13:01   ` Markus Armbruster
2025-07-02 14:53     ` Arun Menon
2025-07-02 11:36 ` [PATCH v3 2/3] migration: Introduce a post_load_with_error hook Arun Menon
2025-07-02 11:53   ` Daniel P. Berrangé
2025-07-02 11:36 ` [PATCH v3 3/3] backends/tpm: Propagate vTPM error on migration failure Arun Menon
2025-07-02 11:55   ` Daniel P. Berrangé [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=aGUeSRYXgzpKbrxp@redhat.com \
    --to=berrange@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=armenon@redhat.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=clg@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=danielhb413@gmail.com \
    --cc=david@redhat.com \
    --cc=fam@euphon.net \
    --cc=farman@linux.ibm.com \
    --cc=farosas@suse.de \
    --cc=harshpb@linux.ibm.com \
    --cc=iii@linux.ibm.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=npiggin@gmail.com \
    --cc=pasic@linux.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=steven.sistare@oracle.com \
    --cc=thuth@redhat.com \
    --cc=zhanghailiang@xfusion.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.