diff mbox series

[v2,02/20] vfio/migration: Refactor vfio_save_block() to return saved data size

Message ID 20230222174915.5647-3-avihaih@nvidia.com
State New
Headers show
Series vfio: Add migration pre-copy support and device dirty tracking | expand

Commit Message

Avihai Horon Feb. 22, 2023, 5:48 p.m. UTC
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(-)

Comments

Cédric Le Goater Feb. 27, 2023, 2:10 p.m. UTC | #1
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 mbox series

Patch

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);