Message ID | 20230222174915.5647-3-avihaih@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | vfio: Add migration pre-copy support and device dirty tracking | expand |
On 2/22/23 18:48, Avihai Horon wrote: > Refactor vfio_save_block() to return the size of saved data on success > and -errno on error. > > This will be used in next patch to implement VFIO migration pre-copy > support. > > Signed-off-by: Avihai Horon <avihaih@nvidia.com> LGTM Reviewed-by: Cédric Le Goater <clg@redhat.com> Thanks, C. > --- > hw/vfio/migration.c | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c > index 4fb7d01532..94a4df73d0 100644 > --- a/hw/vfio/migration.c > +++ b/hw/vfio/migration.c > @@ -240,8 +240,8 @@ static int vfio_query_stop_copy_size(VFIODevice *vbasedev, > return 0; > } > > -/* Returns 1 if end-of-stream is reached, 0 if more data and -errno if error */ > -static int vfio_save_block(QEMUFile *f, VFIOMigration *migration) > +/* Returns the size of saved data on success and -errno on error */ > +static ssize_t vfio_save_block(QEMUFile *f, VFIOMigration *migration) > { > ssize_t data_size; > > @@ -251,7 +251,7 @@ static int vfio_save_block(QEMUFile *f, VFIOMigration *migration) > return -errno; > } > if (data_size == 0) { > - return 1; > + return 0; > } > > qemu_put_be64(f, VFIO_MIG_FLAG_DEV_DATA_STATE); > @@ -261,7 +261,7 @@ static int vfio_save_block(QEMUFile *f, VFIOMigration *migration) > > trace_vfio_save_block(migration->vbasedev->name, data_size); > > - return qemu_file_get_error(f); > + return qemu_file_get_error(f) ?: data_size; > } > > /* ---------------------------------------------------------------------- */ > @@ -335,6 +335,7 @@ static void vfio_state_pending_exact(void *opaque, uint64_t threshold_size, > static int vfio_save_complete_precopy(QEMUFile *f, void *opaque) > { > VFIODevice *vbasedev = opaque; > + ssize_t data_size; > int ret; > > /* We reach here with device state STOP only */ > @@ -345,11 +346,11 @@ static int vfio_save_complete_precopy(QEMUFile *f, void *opaque) > } > > do { > - ret = vfio_save_block(f, vbasedev->migration); > - if (ret < 0) { > - return ret; > + data_size = vfio_save_block(f, vbasedev->migration); > + if (data_size < 0) { > + return data_size; > } > - } while (!ret); > + } while (data_size); > > qemu_put_be64(f, VFIO_MIG_FLAG_END_OF_STATE); > ret = qemu_file_get_error(f);
diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 4fb7d01532..94a4df73d0 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -240,8 +240,8 @@ static int vfio_query_stop_copy_size(VFIODevice *vbasedev, return 0; } -/* Returns 1 if end-of-stream is reached, 0 if more data and -errno if error */ -static int vfio_save_block(QEMUFile *f, VFIOMigration *migration) +/* Returns the size of saved data on success and -errno on error */ +static ssize_t vfio_save_block(QEMUFile *f, VFIOMigration *migration) { ssize_t data_size; @@ -251,7 +251,7 @@ static int vfio_save_block(QEMUFile *f, VFIOMigration *migration) return -errno; } if (data_size == 0) { - return 1; + return 0; } qemu_put_be64(f, VFIO_MIG_FLAG_DEV_DATA_STATE); @@ -261,7 +261,7 @@ static int vfio_save_block(QEMUFile *f, VFIOMigration *migration) trace_vfio_save_block(migration->vbasedev->name, data_size); - return qemu_file_get_error(f); + return qemu_file_get_error(f) ?: data_size; } /* ---------------------------------------------------------------------- */ @@ -335,6 +335,7 @@ static void vfio_state_pending_exact(void *opaque, uint64_t threshold_size, static int vfio_save_complete_precopy(QEMUFile *f, void *opaque) { VFIODevice *vbasedev = opaque; + ssize_t data_size; int ret; /* We reach here with device state STOP only */ @@ -345,11 +346,11 @@ static int vfio_save_complete_precopy(QEMUFile *f, void *opaque) } do { - ret = vfio_save_block(f, vbasedev->migration); - if (ret < 0) { - return ret; + data_size = vfio_save_block(f, vbasedev->migration); + if (data_size < 0) { + return data_size; } - } while (!ret); + } while (data_size); qemu_put_be64(f, VFIO_MIG_FLAG_END_OF_STATE); ret = qemu_file_get_error(f);
Refactor vfio_save_block() to return the size of saved data on success and -errno on error. This will be used in next patch to implement VFIO migration pre-copy support. Signed-off-by: Avihai Horon <avihaih@nvidia.com> --- hw/vfio/migration.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)