* Juan Quintela (quint...@redhat.com) wrote: > It was only used for RAM, and in that case, it means that this amount > of data was sent for memory. Just delete the field in all callers. > > Signed-off-by: Juan Quintela <quint...@redhat.com> > --- > include/migration/register.h | 20 ++++++++++---------- > migration/savevm.h | 4 +--- > hw/s390x/s390-stattrib.c | 6 ++---- > hw/vfio/migration.c | 10 ++++------ > migration/block-dirty-bitmap.c | 7 +++---- > migration/block.c | 7 +++---- > migration/migration.c | 9 ++++----- > migration/ram.c | 8 +++----- > migration/savevm.c | 14 +++++--------- > hw/vfio/trace-events | 2 +- > migration/trace-events | 2 +- > 11 files changed, 37 insertions(+), 52 deletions(-) > > diff --git a/include/migration/register.h b/include/migration/register.h > index c1dcff0f90..1950fee6a8 100644 > --- a/include/migration/register.h > +++ b/include/migration/register.h > @@ -48,18 +48,18 @@ typedef struct SaveVMHandlers { > int (*save_setup)(QEMUFile *f, void *opaque); > void (*save_live_pending)(QEMUFile *f, void *opaque, > uint64_t threshold_size, > - uint64_t *res_precopy_only, > - uint64_t *res_compatible, > - uint64_t *res_postcopy_only); > + uint64_t *rest_precopy, > + uint64_t *rest_postcopy); > /* Note for save_live_pending: > - * - res_precopy_only is for data which must be migrated in precopy phase > - * or in stopped state, in other words - before target vm start > - * - res_compatible is for data which may be migrated in any phase > - * - res_postcopy_only is for data which must be migrated in postcopy > phase > - * or in stopped state, in other words - after source vm stop > + * - res_precopy is for data which must be migrated in precopy > + * phase or in stopped state, in other words - before target > + * vm start > + * - res_postcopy is for data which must be migrated in postcopy > + * phase or in stopped state, in other words - after source vm > + * stop > * > - * Sum of res_postcopy_only, res_compatible and res_postcopy_only is the > - * whole amount of pending data. > + * Sum of res_precopy and res_postcopy is the whole amount of > + * pending data.
I'm not sure if this is correct; I think we really do have three different kinds of device: a) Those that don't know how to postcopy b) Those that can only send data in postcopy (which I think is what the dirty-bitmap block stuff does) c) Devices that know how to postcopy, like RAM <snip> > diff --git a/migration/ram.c b/migration/ram.c > index dc1de9ddbc..20167e1102 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -3435,9 +3435,7 @@ static int ram_save_complete(QEMUFile *f, void *opaque) > } > > static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size, > - uint64_t *res_precopy_only, > - uint64_t *res_compatible, > - uint64_t *res_postcopy_only) > + uint64_t *res_precopy, uint64_t *res_postcopy) > { > RAMState **temp = opaque; > RAMState *rs = *temp; > @@ -3457,9 +3455,9 @@ static void ram_save_pending(QEMUFile *f, void *opaque, > uint64_t max_size, > > if (migrate_postcopy_ram()) { > /* We can do postcopy, and all the data is postcopiable */ > - *res_compatible += remaining_size; > + *res_postcopy += remaining_size; migrate_postcopy_ram() says that postcopy is enabled, not active, so here you are saying that ram is 'postcopy only' according to your definition above. I don't think it actually changes behaviour though at the moment; but it doesn't feel right to assign that to something that says 'postcopy only' migration_iteration_run doesn't enforce the postcopy-only part very hard; it's just part of the threshold as far as I can tell. Dave > } else { > - *res_precopy_only += remaining_size; > + *res_precopy += remaining_size; > } > } > diff --git a/migration/migration.c b/migration/migration.c > index bb8bbddfe4..440aa62f16 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -3734,15 +3734,14 @@ typedef enum { > */ > static MigIterateState migration_iteration_run(MigrationState *s) > { > - uint64_t pending_size, pend_pre, pend_compat, pend_post; > + uint64_t pending_size, pend_pre, pend_post; > bool in_postcopy = s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE; > > qemu_savevm_state_pending(s->to_dst_file, s->threshold_size, &pend_pre, > - &pend_compat, &pend_post); > - pending_size = pend_pre + pend_compat + pend_post; > + &pend_post); > + pending_size = pend_pre + pend_post; > > - trace_migrate_pending(pending_size, s->threshold_size, > - pend_pre, pend_compat, pend_post); > + trace_migrate_pending(pending_size, s->threshold_size, pend_pre, > pend_post); > > if (pending_size && pending_size >= s->threshold_size) { > /* Still a significant amount to transfer */ > diff --git a/migration/savevm.c b/migration/savevm.c > index 48e85c052c..a752ff9ea1 100644 > --- a/migration/savevm.c > +++ b/migration/savevm.c > @@ -1472,16 +1472,13 @@ flush: > * for units that can't do postcopy. > */ > void qemu_savevm_state_pending(QEMUFile *f, uint64_t threshold_size, > - uint64_t *res_precopy_only, > - uint64_t *res_compatible, > - uint64_t *res_postcopy_only) > + uint64_t *res_precopy, > + uint64_t *res_postcopy) > { > SaveStateEntry *se; > > - *res_precopy_only = 0; > - *res_compatible = 0; > - *res_postcopy_only = 0; > - > + *res_precopy = 0; > + *res_postcopy = 0; > > QTAILQ_FOREACH(se, &savevm_state.handlers, entry) { > if (!se->ops || !se->ops->save_live_pending) { > @@ -1493,8 +1490,7 @@ void qemu_savevm_state_pending(QEMUFile *f, uint64_t > threshold_size, > } > } > se->ops->save_live_pending(f, se->opaque, threshold_size, > - res_precopy_only, res_compatible, > - res_postcopy_only); > + res_precopy, res_postcopy); > } > } > > diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events > index 73dffe9e00..a21cbd2a56 100644 > --- a/hw/vfio/trace-events > +++ b/hw/vfio/trace-events > @@ -157,7 +157,7 @@ vfio_save_cleanup(const char *name) " (%s)" > vfio_save_buffer(const char *name, uint64_t data_offset, uint64_t data_size, > uint64_t pending) " (%s) Offset 0x%"PRIx64" size 0x%"PRIx64" pending > 0x%"PRIx64 > vfio_update_pending(const char *name, uint64_t pending) " (%s) pending > 0x%"PRIx64 > vfio_save_device_config_state(const char *name) " (%s)" > -vfio_save_pending(const char *name, uint64_t precopy, uint64_t postcopy, > uint64_t compatible) " (%s) precopy 0x%"PRIx64" postcopy 0x%"PRIx64" > compatible 0x%"PRIx64 > +vfio_save_pending(const char *name, uint64_t precopy, uint64_t postcopy) " > (%s) precopy 0x%"PRIx64" postcopy 0x%"PRIx64 > vfio_save_iterate(const char *name, int data_size) " (%s) data_size %d" > vfio_save_complete_precopy(const char *name) " (%s)" > vfio_load_device_config_state(const char *name) " (%s)" > diff --git a/migration/trace-events b/migration/trace-events > index 57003edcbd..f2a873fd6c 100644 > --- a/migration/trace-events > +++ b/migration/trace-events > @@ -150,7 +150,7 @@ migrate_fd_cleanup(void) "" > migrate_fd_error(const char *error_desc) "error=%s" > migrate_fd_cancel(void) "" > migrate_handle_rp_req_pages(const char *rbname, size_t start, size_t len) > "in %s at 0x%zx len 0x%zx" > -migrate_pending(uint64_t size, uint64_t max, uint64_t pre, uint64_t compat, > uint64_t post) "pending size %" PRIu64 " max %" PRIu64 " (pre = %" PRIu64 " > compat=%" PRIu64 " post=%" PRIu64 ")" > +migrate_pending(uint64_t size, uint64_t max, uint64_t pre, uint64_t post) > "pending size %" PRIu64 " max %" PRIu64 " (pre = %" PRIu64 " post=%" PRIu64 > ")" > migrate_send_rp_message(int msg_type, uint16_t len) "%d: len %d" > migrate_send_rp_recv_bitmap(char *name, int64_t size) "block '%s' size > 0x%"PRIi64 > migration_completion_file_err(void) "" > -- > 2.37.2 > > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK