From: Hongyang Yang <yanghy@cn.fujitsu.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>, xen-devel@lists.xen.org
Cc: wei.liu2@citrix.com, ian.campbell@citrix.com,
wency@cn.fujitsu.com, eddie.dong@intel.com,
yunhong.jiang@intel.com, ian.jackson@eu.citrix.com,
rshriram@cs.ubc.ca
Subject: Re: [PATCH Remus v1 4/8] tools/libxc: split read/handle qemu info
Date: Thu, 7 May 2015 21:55:22 +0800 [thread overview]
Message-ID: <554B6ECA.4070001@cn.fujitsu.com> (raw)
In-Reply-To: <554B4300.1070109@citrix.com>
On 05/07/2015 06:48 PM, Andrew Cooper wrote:
> On 07/05/15 07:37, Yang Hongyang wrote:
>> Split read/handle qemu info. The receiving of qemu info
>> should be done while we receive the migration stream,
>> handle_qemu will be called when the stream complete.
>> Otherwise, it will break Remus because read_record()
>> won't read qemu info and stream_complete will be called
>> at failover.
>>
>> Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com>
>
> I presume this is because Remus sends multiple qemu records in the stream?
>
> I will be fixing the qemu record layer violation as part of libxl
> migration v2, at which point all the XG_LIBXL_HVM_COMPAT code shall
> disappear.
ye, this patch should disappear with your fix :)
>
> As all this code appears to live inside XG_LIBXL_HVM_COMPAT, I am
> willing to trust that it DoesTheRightThing, if you have confirmed that
> plain HVM migration with migration v2 and XG_LIBXL_HVM_COMPAT continues
> to work (I am slightly suspicious of the 3rd hunk in this regard).
I tested both pv&hvm, normal migration are all work as it is.
>
> ~Andrew
>
>> ---
>> tools/libxc/xc_sr_common.h | 5 +++++
>> tools/libxc/xc_sr_restore.c | 12 ++++++++++++
>> tools/libxc/xc_sr_restore_x86_hvm.c | 28 +++++++++++++++++++++++++---
>> 3 files changed, 42 insertions(+), 3 deletions(-)
>>
>> diff --git a/tools/libxc/xc_sr_common.h b/tools/libxc/xc_sr_common.h
>> index ef42412..6f099b8 100644
>> --- a/tools/libxc/xc_sr_common.h
>> +++ b/tools/libxc/xc_sr_common.h
>> @@ -279,6 +279,11 @@ struct xc_sr_context
>> /* HVM context blob. */
>> void *context;
>> size_t contextsz;
>> +
>> +#ifdef XG_LIBXL_HVM_COMPAT
>> + uint32_t qlen;
>> + void *qbuf;
>> +#endif
>> } restore;
>> };
>> } x86_hvm;
>> diff --git a/tools/libxc/xc_sr_restore.c b/tools/libxc/xc_sr_restore.c
>> index 53bd674..8022c3d 100644
>> --- a/tools/libxc/xc_sr_restore.c
>> +++ b/tools/libxc/xc_sr_restore.c
>> @@ -510,6 +510,9 @@ static int process_record(struct xc_sr_context *ctx, struct xc_sr_record *rec)
>> return rc;
>> }
>>
>> +#ifdef XG_LIBXL_HVM_COMPAT
>> +extern int read_qemu(struct xc_sr_context *ctx);
>> +#endif
>> /*
>> * Restore a domain.
>> */
>> @@ -546,6 +549,15 @@ static int restore(struct xc_sr_context *ctx)
>>
>> } while ( rec.type != REC_TYPE_END );
>>
>> +#ifdef XG_LIBXL_HVM_COMPAT
>> + if ( ctx->dominfo.hvm )
>> + {
>> + rc = read_qemu(ctx);
>> + if ( rc )
>> + goto err;
>> + }
>> +#endif
>> +
>> rc = ctx->restore.ops.stream_complete(ctx);
>> if ( rc )
>> goto err;
>> diff --git a/tools/libxc/xc_sr_restore_x86_hvm.c b/tools/libxc/xc_sr_restore_x86_hvm.c
>> index 6e9b318..6f5af0e 100644
>> --- a/tools/libxc/xc_sr_restore_x86_hvm.c
>> +++ b/tools/libxc/xc_sr_restore_x86_hvm.c
>> @@ -94,14 +94,14 @@ static int handle_hvm_params(struct xc_sr_context *ctx,
>> }
>>
>> #ifdef XG_LIBXL_HVM_COMPAT
>> -static int handle_qemu(struct xc_sr_context *ctx)
>> +int read_qemu(struct xc_sr_context *ctx);
>> +int read_qemu(struct xc_sr_context *ctx)
>> {
>> xc_interface *xch = ctx->xch;
>> - char qemusig[21], path[256];
>> + char qemusig[21];
>> uint32_t qlen;
>> void *qbuf = NULL;
>> int rc = -1;
>> - FILE *fp = NULL;
>>
>> if ( read_exact(ctx->fd, qemusig, sizeof(qemusig)) )
>> {
>> @@ -137,6 +137,28 @@ static int handle_qemu(struct xc_sr_context *ctx)
>> goto out;
>> }
>>
>> + /* With Remus, this could be read many times */
>> + if ( ctx->x86_hvm.restore.qbuf )
>> + free(ctx->x86_hvm.restore.qbuf);
>> + ctx->x86_hvm.restore.qbuf = qbuf;
>> + ctx->x86_hvm.restore.qlen = qlen;
>> + rc = 0;
>> +
>> +out:
>> + if (rc)
>> + free(qbuf);
>> + return rc;
>> +}
>> +
>> +static int handle_qemu(struct xc_sr_context *ctx)
>> +{
>> + xc_interface *xch = ctx->xch;
>> + char path[256];
>> + uint32_t qlen = ctx->x86_hvm.restore.qlen;
>> + void *qbuf = ctx->x86_hvm.restore.qbuf;
>> + int rc = -1;
>> + FILE *fp = NULL;
>> +
>> sprintf(path, XC_DEVICE_MODEL_RESTORE_FILE".%u", ctx->domid);
>> fp = fopen(path, "wb");
>> if ( !fp )
>
> .
>
--
Thanks,
Yang.
next prev parent reply other threads:[~2015-05-07 13:55 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-07 6:37 [PATCH Remus v1 0/8] Remus support for Migration-v2 Yang Hongyang
2015-05-07 6:37 ` [PATCH Remus v1 1/8] tools/libxc: adjust the memory allocation for migration Yang Hongyang
2015-05-07 9:48 ` Andrew Cooper
2015-05-07 13:42 ` Hongyang Yang
2015-05-07 13:57 ` Ian Campbell
2015-05-08 9:11 ` Hongyang Yang
2015-05-08 16:27 ` David Vrabel
2015-05-08 16:42 ` Ian Campbell
2015-05-07 14:01 ` Andrew Cooper
2015-05-07 6:37 ` [PATCH Remus v1 2/8] tools/libxc: reuse send_some_pages() in send_all_pages() Yang Hongyang
2015-05-07 10:08 ` Andrew Cooper
2015-05-07 13:48 ` Hongyang Yang
2015-05-07 6:37 ` [PATCH Remus v1 3/8] tools/libxc: introduce process_record() Yang Hongyang
2015-05-07 10:12 ` Andrew Cooper
2015-05-07 6:37 ` [PATCH Remus v1 4/8] tools/libxc: split read/handle qemu info Yang Hongyang
2015-05-07 10:48 ` Andrew Cooper
2015-05-07 13:55 ` Hongyang Yang [this message]
2015-05-07 6:37 ` [PATCH Remus v1 5/8] tools/libxc: defer the setting of HVM_PARAM_IDENT_PT Yang Hongyang
2015-05-07 10:35 ` Andrew Cooper
2015-05-07 13:59 ` Hongyang Yang
2015-05-07 15:24 ` Andrew Cooper
2015-05-08 4:49 ` Hongyang Yang
2015-05-08 8:19 ` Andrew Cooper
2015-05-07 6:37 ` [PATCH Remus v1 6/8] tools/libxc: implement Remus checkpointed save Yang Hongyang
2015-05-07 6:37 ` [PATCH Remus v1 7/8] tools/libxc: implement Remus checkpointed restore Yang Hongyang
2015-05-07 6:37 ` [PATCH Remus v1 8/8] tools/libxc: X86_PV_INFO can be sent multiple times under Remus Yang Hongyang
2015-05-07 10:58 ` Andrew Cooper
2015-05-07 14:03 ` Hongyang Yang
2015-05-07 7:04 ` [PATCH Remus v1 0/8] Remus support for Migration-v2 Hongyang Yang
2015-05-07 9:31 ` Andrew Cooper
2015-05-07 15:07 ` Hongyang Yang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=554B6ECA.4070001@cn.fujitsu.com \
--to=yanghy@cn.fujitsu.com \
--cc=andrew.cooper3@citrix.com \
--cc=eddie.dong@intel.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=rshriram@cs.ubc.ca \
--cc=wei.liu2@citrix.com \
--cc=wency@cn.fujitsu.com \
--cc=xen-devel@lists.xen.org \
--cc=yunhong.jiang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.