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

Re: [Xen-devel] [PATCH 3 of 6 V2] libxl: QMP stop/resume & refactor QEMU suspend/resume/save



On 2012-02-01, at 6:14 AM, Stefano Stabellini 
<stefano.stabellini@xxxxxxxxxxxxx> wrote:

> On Wed, 1 Feb 2012, rshriram@xxxxxxxxx wrote:
>> # HG changeset patch
>> # User Shriram Rajagopalan <rshriram@xxxxxxxxx>
>> # Date 1328070813 28800
>> # Node ID 3ca830009da79443bb445d983a34f5f78664cdf4
>> # Parent  9f0a67bd54db89a23078913db578df72c5dba2e3
>> libxl: QMP stop/resume & refactor QEMU suspend/resume/save
>> 
>> Implement QMP stop and resume functionality and split
>> device model save into 3 parts:
>> suspend_dm(domid)
>> save_dm(domid, fd)
>> resume_dm(domid)
>> 
>> Integrate Device model suspend into suspend_common_callback
>> 
>> Signed-off-by: Shriram Rajagopalan <rshriram@xxxxxxxxx>
>> 
>> diff -r 9f0a67bd54db -r 3ca830009da7 tools/libxl/libxl_dom.c
>> --- a/tools/libxl/libxl_dom.c    Tue Jan 31 20:33:33 2012 -0800
>> +++ b/tools/libxl/libxl_dom.c    Tue Jan 31 20:33:33 2012 -0800
>> @@ -425,6 +425,61 @@ static int libxl__domain_suspend_common_
>>     return rc ? 0 : 1;
>> }
>> 
>> +int libxl__domain_suspend_device_model(libxl__gc *gc, uint32_t domid)
>> +{
>> +    libxl_ctx *ctx = libxl__gc_owner(gc);
>> +    int ret = 0, fd2 = -1;
>> +    const char *filename = libxl__device_model_savefile(gc, domid);
>> +
>> +    switch (libxl__device_model_version_running(gc, domid)) {
>> +    case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: {
>> +        LIBXL__LOG(ctx, LIBXL__LOG_DEBUG,
>> +                   "Saving device model state to %s", filename);
>> +        libxl__qemu_traditional_cmd(gc, domid, "save");
>> +        libxl__wait_for_device_model(gc, domid, "paused", NULL, NULL, NULL);
>> +        break;
>> +    }
>> +    case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
>> +        if (libxl__qmp_stop(gc, domid))
>> +            return ERROR_FAIL;
>> +        fd2 = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | 
>> S_IWUSR);
>> +        if (fd2 < 0) {
>> +            LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
>> +                             "Unable to create a QEMU save file\n");
>> +            return ERROR_FAIL;
>> +        }
>> +        /* Save DM state into fd2 */
>> +        ret = libxl__qmp_migrate(gc, domid, fd2);
>> +        if (ret)
>> +            unlink(filename);
>> +        close(fd2);
>> +        fd2 = -1;
>> +        break;
>> +    default:
>> +        return ERROR_INVAL;
>> +    }
>> +
> 
> Why do you need to introduce libxl__qmp_stop and libxl__qmp_resume?
> 
> Also keep in mind that I am about to change the command sent to save the
> state of devices to "save_devices" because "migrate" is not working
> properly with Xen.
> 

I was modeling the qmp stuff similar to the old style qemu. 

Please correct me if I am wrong. Until qmp_migrate, qemu could still be writing 
data to the guest's memory right? 

So, I thought qmp_stop was a sure shot way to ensure such stuff is not 
happening under the hood. 

With qmp_stop came qmp_resume.



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.