[11/17] migration: add is_active_iterate handler
diff mbox

Message ID 1479837270-79005-12-git-send-email-vsementsov@virtuozzo.com
State New
Headers show

Commit Message

Vladimir Sementsov-Ogievskiy Nov. 22, 2016, 5:54 p.m. UTC
Only-postcopy savevm states (dirty-bitmap) don't need live iteration, so
to disable them and stop transporting empty sections there is a new
savevm handler.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 include/migration/vmstate.h | 1 +
 migration/savevm.c          | 5 +++++
 2 files changed, 6 insertions(+)

Comments

Juan Quintela Jan. 24, 2017, 9:48 a.m. UTC | #1
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> wrote:
> Only-postcopy savevm states (dirty-bitmap) don't need live iteration, so
> to disable them and stop transporting empty sections there is a new
> savevm handler.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>  include/migration/vmstate.h | 1 +
>  migration/savevm.c          | 5 +++++
>  2 files changed, 6 insertions(+)
>
> diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
> index dc656be..2c53d0b 100644
> --- a/include/migration/vmstate.h
> +++ b/include/migration/vmstate.h
> @@ -47,6 +47,7 @@ typedef struct SaveVMHandlers {
>      /* This runs both outside and inside the iothread lock.  */
>      bool (*is_active)(void *opaque);
>      bool (*has_postcopy)(void *opaque);
> +    bool (*is_active_iterate)(void *opaque);
>  
>      /* This runs outside the iothread lock in the migration case, and
>       * within the lock in the savevm case.  The callback had better only
> diff --git a/migration/savevm.c b/migration/savevm.c
> index c58b9f9..4eb1640 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -988,6 +988,11 @@ int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy)
>                  continue;
>              }
>          }
> +        if (se->ops && se->ops->is_active_iterate) {
> +            if (!se->ops->is_active_iterate(se->opaque)) {
> +                continue;
> +            }
> +        }
>          /*
>           * In the postcopy phase, any device that doesn't know how to
>           * do postcopy should have saved it's state in the _complete

Reviewed-by: Juan Quintela <quintela@redhat.com>

I still don't see cleary why you can't "reuse" the is_active(), but
well, it will have to add magic there, so ....

BTW, in hindsight, this "is_active" functions are used mainly to check
if the thing is "not active" O:-)
Vladimir Sementsov-Ogievskiy Feb. 7, 2017, 12:44 p.m. UTC | #2
24.01.2017 12:48, Juan Quintela wrote:
> Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> wrote:
>> Only-postcopy savevm states (dirty-bitmap) don't need live iteration, so
>> to disable them and stop transporting empty sections there is a new
>> savevm handler.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>>   include/migration/vmstate.h | 1 +
>>   migration/savevm.c          | 5 +++++
>>   2 files changed, 6 insertions(+)
>>
>> diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
>> index dc656be..2c53d0b 100644
>> --- a/include/migration/vmstate.h
>> +++ b/include/migration/vmstate.h
>> @@ -47,6 +47,7 @@ typedef struct SaveVMHandlers {
>>       /* This runs both outside and inside the iothread lock.  */
>>       bool (*is_active)(void *opaque);
>>       bool (*has_postcopy)(void *opaque);
>> +    bool (*is_active_iterate)(void *opaque);
>>   
>>       /* This runs outside the iothread lock in the migration case, and
>>        * within the lock in the savevm case.  The callback had better only
>> diff --git a/migration/savevm.c b/migration/savevm.c
>> index c58b9f9..4eb1640 100644
>> --- a/migration/savevm.c
>> +++ b/migration/savevm.c
>> @@ -988,6 +988,11 @@ int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy)
>>                   continue;
>>               }
>>           }
>> +        if (se->ops && se->ops->is_active_iterate) {
>> +            if (!se->ops->is_active_iterate(se->opaque)) {
>> +                continue;
>> +            }
>> +        }
>>           /*
>>            * In the postcopy phase, any device that doesn't know how to
>>            * do postcopy should have saved it's state in the _complete
> Reviewed-by: Juan Quintela <quintela@redhat.com>
>
> I still don't see cleary why you can't "reuse" the is_active(), but
> well, it will have to add magic there, so ....

is_active_iterate=false blocks only qemu_savevm_state_iterate from 
handling the migration entity. Other qemu_savevm_state_* functions 
handle it, as is_active=true.

>
> BTW, in hindsight, this "is_active" functions are used mainly to check
> if the thing is "not active" O:-)

Patch
diff mbox

diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index dc656be..2c53d0b 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -47,6 +47,7 @@  typedef struct SaveVMHandlers {
     /* This runs both outside and inside the iothread lock.  */
     bool (*is_active)(void *opaque);
     bool (*has_postcopy)(void *opaque);
+    bool (*is_active_iterate)(void *opaque);
 
     /* This runs outside the iothread lock in the migration case, and
      * within the lock in the savevm case.  The callback had better only
diff --git a/migration/savevm.c b/migration/savevm.c
index c58b9f9..4eb1640 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -988,6 +988,11 @@  int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy)
                 continue;
             }
         }
+        if (se->ops && se->ops->is_active_iterate) {
+            if (!se->ops->is_active_iterate(se->opaque)) {
+                continue;
+            }
+        }
         /*
          * In the postcopy phase, any device that doesn't know how to
          * do postcopy should have saved it's state in the _complete