diff mbox

[16/17] migration: adjust migration_thread() process for page flipping

Message ID 1382412341-1173-17-git-send-email-lilei@linux.vnet.ibm.com
State New
Headers show

Commit Message

Lei Li Oct. 22, 2013, 3:25 a.m. UTC
Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
---
 migration.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

Comments

Paolo Bonzini Oct. 24, 2013, 2:15 p.m. UTC | #1
Il 22/10/2013 04:25, Lei Li ha scritto:
> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
> ---
>  migration.c |   10 +++++++---
>  1 files changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/migration.c b/migration.c
> index 4ac466b..568b73a 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -579,10 +579,11 @@ static void *migration_thread(void *opaque)
>              pending_size = qemu_savevm_state_pending(s->file, max_size);
>              DPRINTF("pending size %" PRIu64 " max %" PRIu64 "\n",
>                      pending_size, max_size);
> -            if (pending_size && pending_size >= max_size) {
> +            if (pending_size && pending_size >= max_size &&
> +                !migrate_unix_page_flipping()) {

This is a bit ugly but I understand the need.  Perhaps "&&
!runstate_needs_reset()" like below?

Paolo

>                  qemu_savevm_state_iterate(s->file);
>              } else {
> -                int ret;
> +                int ret = 0;
>  
>                  DPRINTF("done iterating\n");
>                  qemu_mutex_lock_iothread();
> @@ -590,7 +591,10 @@ static void *migration_thread(void *opaque)
>                  qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
>                  old_vm_running = runstate_is_running();
>  
> -                ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
> +                if (!runstate_needs_reset()) {
> +                    ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
> +                }
> +
>                  if (ret >= 0) {
>                      qemu_file_set_rate_limit(s->file, INT_MAX);
>                      qemu_savevm_state_complete(s->file);
>
Lei Li Oct. 25, 2013, 4:33 a.m. UTC | #2
On 10/24/2013 10:15 PM, Paolo Bonzini wrote:
> Il 22/10/2013 04:25, Lei Li ha scritto:
>> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com>
>> ---
>>   migration.c |   10 +++++++---
>>   1 files changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/migration.c b/migration.c
>> index 4ac466b..568b73a 100644
>> --- a/migration.c
>> +++ b/migration.c
>> @@ -579,10 +579,11 @@ static void *migration_thread(void *opaque)
>>               pending_size = qemu_savevm_state_pending(s->file, max_size);
>>               DPRINTF("pending size %" PRIu64 " max %" PRIu64 "\n",
>>                       pending_size, max_size);
>> -            if (pending_size && pending_size >= max_size) {
>> +            if (pending_size && pending_size >= max_size &&
>> +                !migrate_unix_page_flipping()) {
> This is a bit ugly but I understand the need.  Perhaps "&&
> !runstate_needs_reset()" like below?

'&& !runstate_needs_reset()' is fine, thanks.

>
> Paolo
>
>>                   qemu_savevm_state_iterate(s->file);
>>               } else {
>> -                int ret;
>> +                int ret = 0;
>>   
>>                   DPRINTF("done iterating\n");
>>                   qemu_mutex_lock_iothread();
>> @@ -590,7 +591,10 @@ static void *migration_thread(void *opaque)
>>                   qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
>>                   old_vm_running = runstate_is_running();
>>   
>> -                ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
>> +                if (!runstate_needs_reset()) {
>> +                    ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
>> +                }
>> +
>>                   if (ret >= 0) {
>>                       qemu_file_set_rate_limit(s->file, INT_MAX);
>>                       qemu_savevm_state_complete(s->file);
>>
>
diff mbox

Patch

diff --git a/migration.c b/migration.c
index 4ac466b..568b73a 100644
--- a/migration.c
+++ b/migration.c
@@ -579,10 +579,11 @@  static void *migration_thread(void *opaque)
             pending_size = qemu_savevm_state_pending(s->file, max_size);
             DPRINTF("pending size %" PRIu64 " max %" PRIu64 "\n",
                     pending_size, max_size);
-            if (pending_size && pending_size >= max_size) {
+            if (pending_size && pending_size >= max_size &&
+                !migrate_unix_page_flipping()) {
                 qemu_savevm_state_iterate(s->file);
             } else {
-                int ret;
+                int ret = 0;
 
                 DPRINTF("done iterating\n");
                 qemu_mutex_lock_iothread();
@@ -590,7 +591,10 @@  static void *migration_thread(void *opaque)
                 qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
                 old_vm_running = runstate_is_running();
 
-                ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
+                if (!runstate_needs_reset()) {
+                    ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
+                }
+
                 if (ret >= 0) {
                     qemu_file_set_rate_limit(s->file, INT_MAX);
                     qemu_savevm_state_complete(s->file);