VFIO used to report different things in its fast/slow version of query pending results. It was likely because it wants to make sure precopy data can reach 0 hence trigger sync queries.
Now with stopcopy size reporting facility it doesn't need this hack anymore. Fix this. Copy stable might be too much; just skip it and skip the Fixes. Cc: Avihai Horon <[email protected]> Signed-off-by: Peter Xu <[email protected]> --- hw/vfio/migration.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index c054c749b0..9dbe5ad9e9 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -591,6 +591,10 @@ static void vfio_state_pending_sync(VFIODevice *vbasedev) __func__, migration->precopy_init_size, migration->precopy_dirty_size, migration->stopcopy_size); + migration->stopcopy_size = 0; + } else { + migration->stopcopy_size -= + (migration->precopy_init_size + migration->precopy_dirty_size); } } @@ -598,19 +602,18 @@ static void vfio_state_pending(void *opaque, MigPendingData *pending) { VFIODevice *vbasedev = opaque; VFIOMigration *migration = vbasedev->migration; - uint64_t remain; if (pending->fastpath) { if (!vfio_device_state_is_precopy(vbasedev)) { return; } - remain = migration->precopy_init_size + migration->precopy_dirty_size; } else { vfio_state_pending_sync(vbasedev); - remain = migration->stopcopy_size; } - pending->precopy_bytes += remain; + pending->precopy_bytes += + migration->precopy_init_size + migration->precopy_dirty_size; + pending->stopcopy_bytes += migration->stopcopy_size; trace_vfio_state_pending(vbasedev->name, migration->stopcopy_size, migration->precopy_init_size, -- 2.50.1
