qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@redhat.com>
To: Eric Auger <eauger@redhat.com>, qemu-devel@nongnu.org
Cc: "Peter Xu" <peterx@redhat.com>, "Fabiano Rosas" <farosas@suse.de>,
	"Alex Williamson" <alex.williamson@redhat.com>,
	"Avihai Horon" <avihaih@nvidia.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Prasad Pandit" <pjp@fedoraproject.org>
Subject: Re: [PATCH v4 20/25] vfio: Add Error** argument to .vfio_save_config() handler
Date: Thu, 7 Mar 2024 14:55:12 +0100	[thread overview]
Message-ID: <dd7a8253-39f0-477e-88a0-2592a9134bbc@redhat.com> (raw)
In-Reply-To: <c036626a-f1ff-46fd-ae34-a2b493f1720a@redhat.com>

On 3/7/24 10:13, Eric Auger wrote:
> 
> 
> On 3/6/24 14:34, Cédric Le Goater wrote:
>> Use vmstate_save_state_with_err() to improve error reporting in the
>> callers and store a reported error under the migration stream. Add
>> documentation while at it.
>>
>> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> Signed-off-by: Cédric Le Goater <clg@redhat.com>
>> ---
>>   include/hw/vfio/vfio-common.h | 25 ++++++++++++++++++++++++-
>>   hw/vfio/migration.c           | 18 ++++++++++++------
>>   hw/vfio/pci.c                 |  5 +++--
>>   3 files changed, 39 insertions(+), 9 deletions(-)
>>
>> diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
>> index b9da6c08ef41174610eb92726c590309a53696a3..46f88493634b5634a9c14a5caa33a463fbf2c50d 100644
>> --- a/include/hw/vfio/vfio-common.h
>> +++ b/include/hw/vfio/vfio-common.h
>> @@ -133,7 +133,30 @@ struct VFIODeviceOps {
>>       int (*vfio_hot_reset_multi)(VFIODevice *vdev);
>>       void (*vfio_eoi)(VFIODevice *vdev);
>>       Object *(*vfio_get_object)(VFIODevice *vdev);
>> -    void (*vfio_save_config)(VFIODevice *vdev, QEMUFile *f);
>> +
>> +    /**
>> +     * @vfio_save_config
>> +     *
>> +     * Save device config state
>> +     *
>> +     * @vdev: #VFIODevice for which to save the config
>> +     * @f: #QEMUFile where to send the data
>> +     * @errp: pointer to Error*, to store an error if it happens.
>> +     *
>> +     * Returns zero to indicate success and negative for error
>> +     */
>> +    int (*vfio_save_config)(VFIODevice *vdev, QEMUFile *f, Error **errp);
>> +
>> +    /**
>> +     * @vfio_load_config
>> +     *
>> +     * Load device config state
>> +     *
>> +     * @vdev: #VFIODevice for which to load the config
>> +     * @f: #QEMUFile where to get the data
>> +     *
>> +     * Returns zero to indicate success and negative for error
>> +     */
>>       int (*vfio_load_config)(VFIODevice *vdev, QEMUFile *f);
>>   };
>>   
>> diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c
>> index 71ade14a7942358094371a86c00718f5979113ea..bd48f2ee472a5230c2c84bff829dae1e217db33f 100644
>> --- a/hw/vfio/migration.c
>> +++ b/hw/vfio/migration.c
>> @@ -190,14 +190,19 @@ static int vfio_load_buffer(QEMUFile *f, VFIODevice *vbasedev,
>>       return ret;
>>   }
>>   
>> -static int vfio_save_device_config_state(QEMUFile *f, void *opaque)
>> +static int vfio_save_device_config_state(QEMUFile *f, void *opaque,
>> +                                         Error **errp)
>>   {
>>       VFIODevice *vbasedev = opaque;
>> +    int ret;
>>   
>>       qemu_put_be64(f, VFIO_MIG_FLAG_DEV_CONFIG_STATE);
>>   
>>       if (vbasedev->ops && vbasedev->ops->vfio_save_config) {
>> -        vbasedev->ops->vfio_save_config(vbasedev, f);
>> +        ret = vbasedev->ops->vfio_save_config(vbasedev, f, errp);
>> +        if (ret) {
> I am not familiar enough with that case but don't you still want to set
> the VFIO_MIG_FLAG_END_OF_STATE to "close" the state?

This is a delimiter used on the target side when loading the state.

When QEMU fails to capture the device state, the whole migration is marked
as in error. There is no need to end cleanly the device state, it is bogus
anyhow.

Thanks,

C.


> 
> Eric
>> +            return ret;
>> +        }
>>       }
>>   
>>       qemu_put_be64(f, VFIO_MIG_FLAG_END_OF_STATE);
>> @@ -587,13 +592,14 @@ static int vfio_save_complete_precopy(QEMUFile *f, void *opaque)
>>   static void vfio_save_state(QEMUFile *f, void *opaque)
>>   {
>>       VFIODevice *vbasedev = opaque;
>> +    Error *local_err = NULL;
>>       int ret;
>>   
>> -    ret = vfio_save_device_config_state(f, opaque);
>> +    ret = vfio_save_device_config_state(f, opaque, &local_err);
>>       if (ret) {
>> -        error_report("%s: Failed to save device config space",
>> -                     vbasedev->name);
>> -        qemu_file_set_error(f, ret);
>> +        error_prepend(&local_err, "%s: Failed to save device config space",
>> +                      vbasedev->name);
>> +        qemu_file_set_error_obj(f, ret, local_err);
>>       }
>>   }
>>   
>> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
>> index 4fa387f0430d62ca2ba1b5ae5b7037f8f06b33f9..99d86e1d40ef25133fc76ad6e58294b07bd20843 100644
>> --- a/hw/vfio/pci.c
>> +++ b/hw/vfio/pci.c
>> @@ -2585,11 +2585,12 @@ const VMStateDescription vmstate_vfio_pci_config = {
>>       }
>>   };
>>   
>> -static void vfio_pci_save_config(VFIODevice *vbasedev, QEMUFile *f)
>> +static int vfio_pci_save_config(VFIODevice *vbasedev, QEMUFile *f, Error **errp)
>>   {
>>       VFIOPCIDevice *vdev = container_of(vbasedev, VFIOPCIDevice, vbasedev);
>>   
>> -    vmstate_save_state(f, &vmstate_vfio_pci_config, vdev, NULL);
>> +    return vmstate_save_state_with_err(f, &vmstate_vfio_pci_config, vdev, NULL,
>> +                                       errp);
>>   }
>>   
>>   static int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f)
> 



  reply	other threads:[~2024-03-07 13:56 UTC|newest]

Thread overview: 111+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-06 13:34 [PATCH v4 00/25] migration: Improve error reporting Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 01/25] migration: Report error when shutdown fails Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 02/25] migration: Remove SaveStateHandler and LoadStateHandler typedefs Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 03/25] migration: Add documentation for SaveVMHandlers Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 04/25] migration: Do not call PRECOPY_NOTIFY_SETUP notifiers in case of error Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 05/25] s390/stattrib: Add Error** argument to set_migrationmode() handler Cédric Le Goater
2024-03-07 12:18   ` Fabiano Rosas
2024-03-08  8:11   ` Peter Xu
2024-03-08  8:45   ` Thomas Huth
2024-03-06 13:34 ` [PATCH v4 06/25] vfio: Always report an error in vfio_save_setup() Cédric Le Goater
2024-03-07  9:36   ` Eric Auger
2024-03-06 13:34 ` [PATCH v4 07/25] migration: Always report an error in block_save_setup() Cédric Le Goater
2024-03-07 12:28   ` Fabiano Rosas
2024-03-08  6:59   ` Peter Xu
2024-03-11 15:22     ` Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 08/25] migration: Always report an error in ram_save_setup() Cédric Le Goater
2024-03-07 12:28   ` Fabiano Rosas
2024-03-06 13:34 ` [PATCH v4 09/25] migration: Add Error** argument to vmstate_save() Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 10/25] migration: Add Error** argument to qemu_savevm_state_setup() Cédric Le Goater
2024-03-07 12:45   ` Fabiano Rosas
2024-03-08 12:56   ` Peter Xu
2024-03-08 13:14     ` Cédric Le Goater
2024-03-08 13:39       ` Cédric Le Goater
2024-03-08 13:55         ` Cédric Le Goater
2024-03-08 14:17           ` Peter Xu
2024-03-11 18:12             ` Cédric Le Goater
2024-03-11 20:15               ` Peter Xu
2024-03-08 14:11     ` Fabiano Rosas
2024-03-08 14:36   ` Fabiano Rosas
2024-03-11 18:15     ` Cédric Le Goater
2024-03-11 19:03       ` Fabiano Rosas
2024-03-11 20:10         ` Peter Xu
2024-03-12 13:01           ` Cédric Le Goater
2024-03-12 12:32         ` Cédric Le Goater
2024-03-12 13:34           ` Cédric Le Goater
2024-03-12 14:01             ` Cédric Le Goater
2024-03-12 14:24               ` Fabiano Rosas
2024-03-12 15:18                 ` Peter Xu
2024-03-12 18:06                   ` Cédric Le Goater
2024-03-12 18:28                   ` Fabiano Rosas
2024-03-15 10:17                     ` Cédric Le Goater
2024-03-15 11:01                       ` Peter Xu
2024-03-15 12:20                         ` Cédric Le Goater
2024-03-15 13:09                           ` Peter Xu
2024-03-15 14:30                             ` Cédric Le Goater
2024-03-15 13:11                           ` Peter Xu
2024-03-15 14:31                             ` Cédric Le Goater
2024-03-15 14:57                               ` Peter Xu
2024-03-15 14:21                           ` Cédric Le Goater
2024-03-15 14:52                             ` Peter Xu
2024-03-19 10:46                               ` Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 11/25] migration: Add Error** argument to .save_setup() handler Cédric Le Goater
2024-03-07  9:53   ` Vladimir Sementsov-Ogievskiy
2024-03-07 10:31     ` Cédric Le Goater
2024-03-07 11:39       ` Vladimir Sementsov-Ogievskiy
2024-03-08  7:11         ` Peter Xu
2024-03-08  8:08           ` Peter Xu
2024-03-06 13:34 ` [PATCH v4 12/25] migration: Add Error** argument to .load_setup() handler Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 13/25] memory: Add Error** argument to .log_global_start() handler Cédric Le Goater
2024-03-15 11:18   ` Peter Xu
2024-03-18 14:33     ` Cédric Le Goater
2024-03-18 14:54     ` Cédric Le Goater
2024-03-18 16:27       ` Peter Xu
2024-03-06 13:34 ` [PATCH v4 14/25] memory: Add Error** argument to the global_dirty_log routines Cédric Le Goater
2024-03-15 11:34   ` Peter Xu
2024-03-18 10:43     ` Cédric Le Goater
2024-03-18 16:03     ` Cédric Le Goater
2024-03-18 16:08     ` Cédric Le Goater
2024-03-18 16:31       ` Peter Xu
2024-03-16  2:41   ` Yong Huang
2024-03-18 16:19     ` Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 15/25] migration: Modify ram_init_bitmaps() to report dirty tracking errors Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 16/25] vfio: Add Error** argument to .set_dirty_page_tracking() handler Cédric Le Goater
2024-03-07  8:09   ` Eric Auger
2024-03-07 12:06     ` Cédric Le Goater
2024-03-08  7:39       ` Eric Auger
2024-03-08 13:00         ` Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 17/25] vfio: Add Error** argument to vfio_devices_dma_logging_start() Cédric Le Goater
2024-03-07  8:15   ` Eric Auger
2024-03-07 13:15     ` Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 18/25] vfio: Add Error** argument to vfio_devices_dma_logging_stop() Cédric Le Goater
2024-03-07  8:53   ` Eric Auger
2024-03-07 14:05     ` Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 19/25] vfio: Use new Error** argument in vfio_save_setup() Cédric Le Goater
2024-03-07  9:04   ` Eric Auger
2024-03-07 13:35     ` Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 20/25] vfio: Add Error** argument to .vfio_save_config() handler Cédric Le Goater
2024-03-07  9:13   ` Eric Auger
2024-03-07 13:55     ` Cédric Le Goater [this message]
2024-03-08  7:41       ` Eric Auger
2024-03-06 13:34 ` [PATCH v4 21/25] vfio: Reverse test on vfio_get_dirty_bitmap() Cédric Le Goater
2024-03-06 20:51   ` Philippe Mathieu-Daudé
2024-03-07  7:13     ` Cédric Le Goater
2024-03-06 13:34 ` [PATCH v4 22/25] memory: Add Error** argument to memory_get_xlat_addr() Cédric Le Goater
2024-03-15 15:06   ` Peter Xu
2024-03-06 13:34 ` [PATCH v4 23/25] vfio: Add Error** argument to .get_dirty_bitmap() handler Cédric Le Goater
2024-03-07  9:23   ` Eric Auger
2024-03-06 13:34 ` [PATCH v4 24/25] vfio: Also trace event failures in vfio_save_complete_precopy() Cédric Le Goater
2024-03-07  9:28   ` Eric Auger
2024-03-07 13:36     ` Cédric Le Goater
2024-03-08  7:42       ` Eric Auger
2024-03-06 13:34 ` [PATCH v4 25/25] vfio: Extend vfio_set_migration_error() with Error* argument Cédric Le Goater
2024-03-07  9:30   ` Eric Auger
2024-03-08  8:15 ` [PATCH v4 00/25] migration: Improve error reporting Peter Xu
2024-03-08 13:03   ` Cédric Le Goater
2024-03-11 20:24   ` Peter Xu
2024-03-12  7:16     ` Cédric Le Goater
2024-03-12  9:58       ` Cédric Le Goater
2024-03-12 11:50         ` Peter Xu
2024-03-12 12:09           ` Cédric Le Goater
2024-03-12 12:25             ` Peter Xu

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=dd7a8253-39f0-477e-88a0-2592a9134bbc@redhat.com \
    --to=clg@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=armbru@redhat.com \
    --cc=avihaih@nvidia.com \
    --cc=eauger@redhat.com \
    --cc=farosas@suse.de \
    --cc=peterx@redhat.com \
    --cc=philmd@linaro.org \
    --cc=pjp@fedoraproject.org \
    --cc=qemu-devel@nongnu.org \
    /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).