Hi Peter,

On 2025-06-13 10:07, Peter Xu wrote:
> Now after merging the precopy and postcopy version of complete() hook,
> rename the precopy version from save_live_complete_precopy() to
> save_complete().
> 
> Dropping the "live" when at it, because it's in most cases not live when
> happening (in precopy).
> 
> No functional change intended.
> 
> Signed-off-by: Peter Xu <pet...@redhat.com>
> ---
>  include/migration/register.h   | 4 ++--
>  hw/ppc/spapr.c                 | 2 +-
>  hw/s390x/s390-stattrib.c       | 2 +-
>  hw/vfio/migration.c            | 2 +-
>  migration/block-dirty-bitmap.c | 2 +-
>  migration/ram.c                | 2 +-
>  migration/savevm.c             | 8 ++++----
>  7 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/include/migration/register.h b/include/migration/register.h
> index e022195785..0510534515 100644
> --- a/include/migration/register.h
> +++ b/include/migration/register.h
> @@ -78,7 +78,7 @@ typedef struct SaveVMHandlers {
>      void (*save_cleanup)(void *opaque);
>  
>      /**
> -     * @save_live_complete_precopy
> +     * @save_complete
>       *
>       * Transmits the last section for the device containing any
>       * remaining data at the end phase of migration.
> @@ -95,7 +95,7 @@ typedef struct SaveVMHandlers {
>       *
>       * Returns zero to indicate success and negative for error
>       */
> -    int (*save_live_complete_precopy)(QEMUFile *f, void *opaque);
> +    int (*save_complete)(QEMUFile *f, void *opaque);
>  
>      /**
>       * @save_live_complete_precopy_thread (invoked in a separate thread)
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 702f774cda..c5d30f2ebd 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -2518,7 +2518,7 @@ static void htab_save_cleanup(void *opaque)
>  static SaveVMHandlers savevm_htab_handlers = {
>      .save_setup = htab_save_setup,
>      .save_live_iterate = htab_save_iterate,
> -    .save_live_complete_precopy = htab_save_complete,
> +    .save_complete = htab_save_complete,
>      .save_cleanup = htab_save_cleanup,
>      .load_state = htab_load,
>  };
> diff --git a/hw/s390x/s390-stattrib.c b/hw/s390x/s390-stattrib.c
> index f74cf32636..13a678a803 100644
> --- a/hw/s390x/s390-stattrib.c
> +++ b/hw/s390x/s390-stattrib.c
> @@ -338,7 +338,7 @@ static const TypeInfo qemu_s390_stattrib_info = {
>  static SaveVMHandlers savevm_s390_stattrib_handlers = {
>      .save_setup = cmma_save_setup,
>      .save_live_iterate = cmma_save_iterate,
> -    .save_live_complete_precopy = cmma_save_complete,
> +    .save_complete = cmma_save_complete,
>      .state_pending_exact = cmma_state_pending,
>      .state_pending_estimate = cmma_state_pending,
>      .save_cleanup = cmma_save_cleanup,
> diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c
> index b76697bd1a..33a71f8999 100644
> --- a/hw/vfio/migration.c
> +++ b/hw/vfio/migration.c
> @@ -824,7 +824,7 @@ static const SaveVMHandlers savevm_vfio_handlers = {
>      .state_pending_exact = vfio_state_pending_exact,
>      .is_active_iterate = vfio_is_active_iterate,
>      .save_live_iterate = vfio_save_iterate,
> -    .save_live_complete_precopy = vfio_save_complete_precopy,
> +    .save_complete = vfio_save_complete_precopy,
>      .save_state = vfio_save_state,
>      .load_setup = vfio_load_setup,
>      .load_cleanup = vfio_load_cleanup,
> diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c
> index 6ee3c32a76..a061aad817 100644
> --- a/migration/block-dirty-bitmap.c
> +++ b/migration/block-dirty-bitmap.c
> @@ -1248,7 +1248,7 @@ static bool dirty_bitmap_has_postcopy(void *opaque)
>  
>  static SaveVMHandlers savevm_dirty_bitmap_handlers = {
>      .save_setup = dirty_bitmap_save_setup,
> -    .save_live_complete_precopy = dirty_bitmap_save_complete,
> +    .save_complete = dirty_bitmap_save_complete,
>      .has_postcopy = dirty_bitmap_has_postcopy,
>      .state_pending_exact = dirty_bitmap_state_pending,
>      .state_pending_estimate = dirty_bitmap_state_pending,
> diff --git a/migration/ram.c b/migration/ram.c
> index 8b43b9e1e8..ed380ac86f 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -4545,7 +4545,7 @@ void postcopy_preempt_shutdown_file(MigrationState *s)
>  static SaveVMHandlers savevm_ram_handlers = {
>      .save_setup = ram_save_setup,
>      .save_live_iterate = ram_save_iterate,
> -    .save_live_complete_precopy = ram_save_complete,
> +    .save_complete = ram_save_complete,
>      .has_postcopy = ram_has_postcopy,
>      .state_pending_exact = ram_state_pending_exact,
>      .state_pending_estimate = ram_state_pending_estimate,
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 3e20f8608a..454e914b56 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -1496,7 +1496,7 @@ void qemu_savevm_state_complete_postcopy(QEMUFile *f)
>      int ret;
>  
>      QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
> -        if (!se->ops || !se->ops->save_live_complete_precopy) {
> +        if (!se->ops || !se->ops->save_complete) {
>              continue;
>          }
>          if (se->ops->is_active) {
> @@ -1509,7 +1509,7 @@ void qemu_savevm_state_complete_postcopy(QEMUFile *f)
>          qemu_put_byte(f, QEMU_VM_SECTION_END);
>          qemu_put_be32(f, se->section_id);
>  
> -        ret = se->ops->save_live_complete_precopy(f, se->opaque);
> +        ret = se->ops->save_complete(f, se->opaque);
>          trace_savevm_section_end(se->idstr, se->section_id, ret);
>          save_section_footer(f, se);
>          if (ret < 0) {
> @@ -1583,7 +1583,7 @@ int 
> qemu_savevm_state_complete_precopy_iterable(QEMUFile *f, bool in_postcopy)
>          if (!se->ops ||
>              (in_postcopy && se->ops->has_postcopy &&
>               se->ops->has_postcopy(se->opaque)) ||
> -            !se->ops->save_live_complete_precopy) {
> +            !se->ops->save_complete) {
>              continue;
>          }
>  
> @@ -1598,7 +1598,7 @@ int 
> qemu_savevm_state_complete_precopy_iterable(QEMUFile *f, bool in_postcopy)
>  
>          save_section_header(f, se, QEMU_VM_SECTION_END);
>  
> -        ret = se->ops->save_live_complete_precopy(f, se->opaque);
> +        ret = se->ops->save_complete(f, se->opaque);
>          trace_savevm_section_end(se->idstr, se->section_id, ret);
>          save_section_footer(f, se);
>          if (ret < 0) {
> -- 
> 2.49.0
> 

There are still mentions of 'save_live_complete_precopy' in:

    include/migration/register.h:100
        * parallel with @save_live_complete_precopy handlers.
    docs/devel/migration/vfio.rst:78
        * A ``save_live_complete_precopy`` function that sets the VFIO device in
    docs/devel/migration/vfio.rst:198
        .save_live_complete_precopy() is called for each active device
    docs/devel/migration/vfio.rst:200
        .save_live_complete_precopy() until
    docs/devel/migration/main.rst:511
        - A ``save_live_complete_precopy`` function that must transmit the

Also, should we also drop "live" from
'save_live_complete_precopy_thread' as well? IIUC they are called
together with (now) 'save_complete()' during precopy.


Best regards

Juraj Marcin


Reply via email to