Skip to content

Commit

Permalink
vfio: Always report an error in vfio_save_setup()
Browse files Browse the repository at this point in the history
This will prepare ground for future changes adding an Error** argument
to the save_setup() handler. We need to make sure that on failure,
vfio_save_setup() always sets a new error.

Reviewed-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
Link: https://lore.kernel.org/r/20240320064911.545001-3-clg@redhat.com
Signed-off-by: Peter Xu <peterx@redhat.com>
  • Loading branch information
legoater authored and xzpeter committed Apr 23, 2024
1 parent e86f243 commit 31cf7c1
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions hw/vfio/migration.c
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@ static int vfio_save_setup(QEMUFile *f, void *opaque)
VFIODevice *vbasedev = opaque;
VFIOMigration *migration = vbasedev->migration;
uint64_t stop_copy_size = VFIO_MIG_DEFAULT_DATA_BUFFER_SIZE;
int ret;

qemu_put_be64(f, VFIO_MIG_FLAG_DEV_SETUP_STATE);

Expand All @@ -395,13 +396,13 @@ static int vfio_save_setup(QEMUFile *f, void *opaque)
}

if (vfio_precopy_supported(vbasedev)) {
int ret;

switch (migration->device_state) {
case VFIO_DEVICE_STATE_RUNNING:
ret = vfio_migration_set_state(vbasedev, VFIO_DEVICE_STATE_PRE_COPY,
VFIO_DEVICE_STATE_RUNNING);
if (ret) {
error_report("%s: Failed to set new PRE_COPY state",
vbasedev->name);
return ret;
}

Expand All @@ -412,6 +413,8 @@ static int vfio_save_setup(QEMUFile *f, void *opaque)
/* vfio_save_complete_precopy() will go to STOP_COPY */
break;
default:
error_report("%s: Invalid device state %d", vbasedev->name,
migration->device_state);
return -EINVAL;
}
}
Expand All @@ -420,7 +423,13 @@ static int vfio_save_setup(QEMUFile *f, void *opaque)

qemu_put_be64(f, VFIO_MIG_FLAG_END_OF_STATE);

return qemu_file_get_error(f);
ret = qemu_file_get_error(f);
if (ret < 0) {
error_report("%s: save setup failed : %s", vbasedev->name,
strerror(-ret));
}

return ret;
}

static void vfio_save_cleanup(void *opaque)
Expand Down

0 comments on commit 31cf7c1

Please sign in to comment.