All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Yang Hongyang <yanghy@cn.fujitsu.com>, xen-devel@lists.xen.org
Cc: wei.liu2@citrix.com, ian.campbell@citrix.com,
	wency@cn.fujitsu.com, ian.jackson@eu.citrix.com,
	yunhong.jiang@intel.com, eddie.dong@intel.com,
	rshriram@cs.ubc.ca
Subject: Re: [PATCH v4 14/14] libxc/restore: split read/handle qemu info
Date: Tue, 12 May 2015 13:20:01 +0100	[thread overview]
Message-ID: <5551EFF1.9040805@citrix.com> (raw)
In-Reply-To: <1431429922-15344-15-git-send-email-yanghy@cn.fujitsu.com>

On 12/05/15 12:25, 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>
> CC: Ian Campbell <Ian.Campbell@citrix.com>
> CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
> CC: Wei Liu <wei.liu2@citrix.com>
> CC: Andrew Cooper <andrew.cooper3@citrix.com>

Tools Maintainers: I have not reviewed this in detail but I am happy
with it.  It is all just changes to the compat code which will disappear
anyway when I get full libxl/migrationv2 working.

~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 276d00a..0ba9728 100644
> --- a/tools/libxc/xc_sr_common.h
> +++ b/tools/libxc/xc_sr_common.h
> @@ -288,6 +288,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 )

      reply	other threads:[~2015-05-12 12:20 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-12 11:25 [PATCH v4 00/14] Misc patches to aid migration v2 Remus support Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 01/14] libxc/migration: Be rather stricter with illformed callers Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 02/14] libxc/save: Adjust stream-position callbacks for checkpointed streams Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 03/14] libxc/migration: Specification update for CHECKPOINT records Yang Hongyang
2015-05-12 12:05   ` Andrew Cooper
2015-05-13  0:47     ` Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 04/14] libxc/migration: Pass checkpoint information into the save algorithm Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 05/14] tools/libxc: unused attribute in DECLARE_HYPERCALL_BUFFER_SHADOW Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 06/14] tools/libxc: add a check in xc_hypercall_buffer_free_pages macro Yang Hongyang
2015-05-12 12:10   ` Andrew Cooper
2015-05-13  0:48     ` Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 07/14] libxc/save: introduce setup() and cleanup() on save Yang Hongyang
2015-05-12 12:11   ` Andrew Cooper
2015-05-13  0:48     ` Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 08/14] libxc/save: rename to_send to dirty_bitmap Yang Hongyang
2015-05-12 12:11   ` Andrew Cooper
2015-05-12 11:25 ` [PATCH v4 09/14] libxc/save: adjust the memory allocation for migration Yang Hongyang
2015-05-12 12:14   ` Andrew Cooper
2015-05-13  0:49     ` Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 10/14] libxc/save: remove bitmap param from send_some_pages Yang Hongyang
2015-05-12 12:15   ` Andrew Cooper
2015-05-12 11:25 ` [PATCH v4 11/14] libxc/save: rename send_some_pages to send_dirty_pages Yang Hongyang
2015-05-12 12:15   ` Andrew Cooper
2015-05-12 11:25 ` [PATCH v4 12/14] libxc/save: reuse send_dirty_pages() in send_all_pages() Yang Hongyang
2015-05-12 12:17   ` Andrew Cooper
2015-05-12 11:25 ` [PATCH v4 13/14] libxc/restore: introduce process_record() Yang Hongyang
2015-05-12 11:25 ` [PATCH v4 14/14] libxc/restore: split read/handle qemu info Yang Hongyang
2015-05-12 12:20   ` Andrew Cooper [this message]

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=5551EFF1.9040805@citrix.com \
    --to=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=yanghy@cn.fujitsu.com \
    --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.