qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 6/6] qapi: Convert migrate


From: Jan Kiszka
Subject: Re: [Qemu-devel] [PATCH 6/6] qapi: Convert migrate
Date: Wed, 15 Feb 2012 14:44:46 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666

On 2012-02-15 14:31, Jan Kiszka wrote:
> On 2012-02-10 20:31, Luiz Capitulino wrote:
>> The migrate command is one of those commands where HMP and QMP completely
>> mix up together. This made the conversion to the QAPI (which separates the
>> command into QMP and HMP parts) a bit difficult.
>>
>> The first important change to be noticed is that this commit completes the
>> removal of the Monitor object from migration code, started by the previous
>> commit.
>>
>> Another important and tricky change is about supporting the non-detached
>> mode. That's, if the user doesn't pass '-d' the migrate command will lock
>> the monitor and will only release it when migration is finished.
>>
>> To support that in the new HMP command (hmp_migrate()), it was necessary
>> to create a timer which runs every second and checks if the migration is
>> still active. If it's, the timer callback will re-schedule itself to run
>> one second in the future. If the migration has already finished, the
>> monitor lock is relased and the user can use it normally.
>>
>> All these changes should be transparent to the user.
>>
>> Signed-off-by: Anthony Liguori <address@hidden>
>> Signed-off-by: Luiz Capitulino <address@hidden>
>> ---
>>  hmp-commands.hx  |    3 +-
>>  hmp.c            |   51 +++++++++++++++++++++++++++++++++++++++++
>>  hmp.h            |    1 +
>>  migration-fd.c   |    2 +-
>>  migration.c      |   66 
>> ++++++++++++++----------------------------------------
>>  migration.h      |    3 --
>>  qapi-schema.json |   21 +++++++++++++++++
>>  qmp-commands.hx  |    9 +------
>>  savevm.c         |   13 +++++-----
>>  sysemu.h         |    2 +-
>>  10 files changed, 100 insertions(+), 71 deletions(-)
>>
>> diff --git a/hmp-commands.hx b/hmp-commands.hx
>> index 573b823..10d3f1b 100644
>> --- a/hmp-commands.hx
>> +++ b/hmp-commands.hx
>> @@ -792,8 +792,7 @@ ETEXI
>>                    " full copy of disk\n\t\t\t -i for migration without "
>>                    "shared storage with incremental copy of disk "
>>                    "(base image shared between src and destination)",
>> -        .user_print = monitor_user_noop,    
>> -    .mhandler.cmd_new = do_migrate,
>> +        .mhandler.cmd = hmp_migrate,
>>      },
>>  
>>  
>> diff --git a/hmp.c b/hmp.c
>> index 8ff8c94..70bd574 100644
>> --- a/hmp.c
>> +++ b/hmp.c
>> @@ -14,6 +14,7 @@
>>   */
>>  
>>  #include "hmp.h"
>> +#include "qemu-timer.h"
>>  #include "qmp-commands.h"
>>  
>>  static void hmp_handle_error(Monitor *mon, Error **errp)
>> @@ -851,3 +852,53 @@ void hmp_block_job_cancel(Monitor *mon, const QDict 
>> *qdict)
>>  
>>      hmp_handle_error(mon, &error);
>>  }
>> +
>> +typedef struct MigrationStatus
>> +{
>> +    QEMUTimer *timer;
>> +    Monitor *mon;
>> +} MigrationStatus;
>> +
>> +static void hmp_migrate_status_cb(void *opaque)
>> +{
>> +    MigrationStatus *status = opaque;
>> +    MigrationInfo *info;
>> +
>> +    info = qmp_query_migrate(NULL);
>> +    if (!info->has_status || strcmp(info->status, "active") == 0) {
>> +        qemu_mod_timer(status->timer, qemu_get_clock_ms(rt_clock) + 1000);
>> +        goto out;
>> +    }
>> +
>> +    monitor_resume(status->mon);
> 
> status->mon can be NULL if suspend is not supported, see below.
> 
>> +    qemu_del_timer(status->timer);
>> +    g_free(status);
>> +
>> +out:

Ah, and "else" please, no need for goto here.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux



reply via email to

[Prev in Thread] Current Thread [Next in Thread]