All of lore.kernel.org
 help / color / mirror / Atom feed
From: Orit Wasserman <owasserm@redhat.com>
To: Juan Quintela <quintela@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 02/12] savevm: Live migration handlers register the struct directly
Date: Sun, 01 Jul 2012 11:19:50 +0300	[thread overview]
Message-ID: <4FF00826.3080006@redhat.com> (raw)
In-Reply-To: <620debbcb9bc99dc6db54d87a8683efbc00c2b66.1340910651.git.quintela@redhat.com>

On 06/28/2012 10:22 PM, Juan Quintela wrote:
> Notice that the live migration users never unregister, so no problem
> about freeing the ops structure.
> 
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  arch_init.c       |    9 +++++++--
>  block-migration.c |   10 ++++++++--
>  migration.h       |    4 ++--
>  savevm.c          |   18 +++++++-----------
>  vl.c              |    3 +--
>  vmstate.h         |    5 +----
>  6 files changed, 26 insertions(+), 23 deletions(-)
> 
> diff --git a/arch_init.c b/arch_init.c
> index 7ce074e..0b7e31f 100644
> --- a/arch_init.c
> +++ b/arch_init.c
> @@ -298,7 +298,7 @@ static void migration_end(void)
> 
>  #define MAX_WAIT 50 /* ms, half buffered_file limit */
> 
> -int ram_save_live(QEMUFile *f, int stage, void *opaque)
> +static int ram_save_live(QEMUFile *f, int stage, void *opaque)
>  {
>      ram_addr_t addr;
>      uint64_t bytes_transferred_last;
> @@ -436,7 +436,7 @@ static inline void *host_from_stream_offset(QEMUFile *f,
>      return NULL;
>  }
> 
> -int ram_load(QEMUFile *f, void *opaque, int version_id)
> +static int ram_load(QEMUFile *f, void *opaque, int version_id)
>  {
>      ram_addr_t addr;
>      int flags, ret = 0;
> @@ -533,6 +533,11 @@ done:
>      return ret;
>  }
> 
> +SaveVMHandlers savevm_ram_handlers = {
> +    .save_live_state = ram_save_live,
> +    .load_state = ram_load,
> +};
> +
>  #ifdef HAS_AUDIO
>  struct soundhw {
>      const char *name;
> diff --git a/block-migration.c b/block-migration.c
> index b95b4e1..00151a0 100644
> --- a/block-migration.c
> +++ b/block-migration.c
> @@ -709,11 +709,17 @@ static void block_set_params(const MigrationParams *params, void *opaque)
>      block_mig_state.blk_enable |= params->shared;
>  }
> 
> +SaveVMHandlers savevm_block_handlers = {
> +    .set_params = block_set_params,
> +    .save_live_state = block_save_live,
> +    .load_state = block_load,
> +};
> +
>  void blk_mig_init(void)
>  {
>      QSIMPLEQ_INIT(&block_mig_state.bmds_list);
>      QSIMPLEQ_INIT(&block_mig_state.blk_list);
> 
> -    register_savevm_live(NULL, "block", 0, 1, block_set_params,
> -                         block_save_live, NULL, block_load, &block_mig_state);
> +    register_savevm_live(NULL, "block", 0, 1, &savevm_block_handlers,
> +                         &block_mig_state);
>  }
> diff --git a/migration.h b/migration.h
> index 3990771..98bceda 100644
> --- a/migration.h
> +++ b/migration.h
> @@ -18,6 +18,7 @@
>  #include "qemu-common.h"
>  #include "notify.h"
>  #include "error.h"
> +#include "vmstate.h"
> 
>  struct MigrationParams {
>      int blk;
> @@ -81,8 +82,7 @@ uint64_t ram_bytes_remaining(void);
>  uint64_t ram_bytes_transferred(void);
>  uint64_t ram_bytes_total(void);
> 
> -int ram_save_live(QEMUFile *f, int stage, void *opaque);
> -int ram_load(QEMUFile *f, void *opaque, int version_id);
> +extern SaveVMHandlers savevm_ram_handlers;
> 
>  /**
>   * @migrate_add_blocker - prevent migration from proceeding
> diff --git a/savevm.c b/savevm.c
> index 73626d4..a451be2 100644
> --- a/savevm.c
> +++ b/savevm.c
> @@ -1223,10 +1223,7 @@ int register_savevm_live(DeviceState *dev,
>                           const char *idstr,
>                           int instance_id,
>                           int version_id,
> -                         SaveSetParamsHandler *set_params,
> -                         SaveLiveStateHandler *save_live_state,
> -                         SaveStateHandler *save_state,
> -                         LoadStateHandler *load_state,
> +                         SaveVMHandlers *ops,
>                           void *opaque)
>  {
>      SaveStateEntry *se;
> @@ -1234,16 +1231,12 @@ int register_savevm_live(DeviceState *dev,
>      se = g_malloc0(sizeof(SaveStateEntry));
>      se->version_id = version_id;
>      se->section_id = global_section_id++;
> -    se->ops = g_malloc0(sizeof(SaveVMHandlers));
> -    se->ops->set_params = set_params;
> -    se->ops->save_live_state = save_live_state;
> -    se->ops->save_state = save_state;
> -    se->ops->load_state = load_state;
> +    se->ops = ops;
>      se->opaque = opaque;
>      se->vmsd = NULL;
>      se->no_migrate = 0;
>      /* if this is a live_savem then set is_ram */
> -    if (save_live_state != NULL) {
> +    if (ops->save_live_state != NULL) {
>          se->is_ram = 1;
>      }
> 
> @@ -1282,8 +1275,11 @@ int register_savevm(DeviceState *dev,
>                      LoadStateHandler *load_state,
>                      void *opaque)
>  {
> +    SaveVMHandlers *ops = g_malloc0(sizeof(SaveVMHandlers));
> +    ops->save_state = save_state;
> +    ops->load_state = load_state;
>      return register_savevm_live(dev, idstr, instance_id, version_id,
> -                                NULL, NULL, save_state, load_state, opaque);
> +                                ops, opaque);
>  }
> 
>  void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque)
> diff --git a/vl.c b/vl.c
> index 1329c30..b1f31e8 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -3438,8 +3438,7 @@ int main(int argc, char **argv, char **envp)
>      default_drive(default_sdcard, snapshot, machine->use_scsi,
>                    IF_SD, 0, SD_OPTS);
> 
> -    register_savevm_live(NULL, "ram", 0, 4, NULL, ram_save_live, NULL,
> -                         ram_load, NULL);
> +    register_savevm_live(NULL, "ram", 0, 4, &savevm_ram_handlers, NULL);
> 

Juan,
Can't we move it migration.c (migrate_init and qemu_start_incoming migration)?
this will remove to use an extern for savevm_ram_handlers.

Orit
>      if (nb_numa_nodes > 0) {
>          int i;
> diff --git a/vmstate.h b/vmstate.h
> index 909af69..4bce53b 100644
> --- a/vmstate.h
> +++ b/vmstate.h
> @@ -50,10 +50,7 @@ int register_savevm_live(DeviceState *dev,
>                           const char *idstr,
>                           int instance_id,
>                           int version_id,
> -                         SaveSetParamsHandler *set_params,
> -                         SaveLiveStateHandler *save_live_state,
> -                         SaveStateHandler *save_state,
> -                         LoadStateHandler *load_state,
> +                         SaveVMHandlers *ops,
>                           void *opaque);
> 
>  void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque);
> 

  parent reply	other threads:[~2012-07-01  8:19 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <cover.1340910651.git.quintela@redhat.com>
     [not found] ` <39651e275488caec46861cb5b11ba1c7961a429c.1340910651.git.quintela@redhat.com>
2012-07-01  8:05   ` [Qemu-devel] [PATCH 01/12] savevm: Use a struct to pass all handlers Orit Wasserman
     [not found]   ` <4FEF3843.1000907@weilnetz.de>
2012-07-01 10:16     ` [Qemu-devel] Bad mail header? Juan Quintela
2012-07-01 10:56       ` Peter Maydell
2012-07-13  7:26         ` Juan Quintela
     [not found] ` <620debbcb9bc99dc6db54d87a8683efbc00c2b66.1340910651.git.quintela@redhat.com>
2012-07-01  8:19   ` Orit Wasserman [this message]
2012-07-01 10:20     ` [Qemu-devel] [PATCH 02/12] savevm: Live migration handlers register the struct directly Juan Quintela
2012-07-01 11:24       ` Orit Wasserman
2012-07-11 17:01         ` Juan Quintela
2012-07-11 17:28           ` Orit Wasserman
     [not found] ` <704b60a0d2b32fbf6bf229b115082c2b929a4731.1340910651.git.quintela@redhat.com>
2012-07-01  9:40   ` [Qemu-devel] [PATCH 03/12] savevm: remove SaveSetParamsHandler Orit Wasserman
     [not found] ` <509b501d09f18212b4165ee116ddef4ceba59097.1340910651.git.quintela@redhat.com>
2012-07-01  9:40   ` [Qemu-devel] [PATCH 04/12] savevm: remove SaveLiveStateHandler Orit Wasserman
     [not found] ` <3dad4b557fac0c11eb6fdb06121859d16247e4f0.1340910651.git.quintela@redhat.com>
2012-07-01  9:47   ` [Qemu-devel] [PATCH 05/12] savevm: Refactor cancel operation in its own operation Orit Wasserman
     [not found] ` <1e9e8749f384425d04c74bc76fc502621e226352.1340910651.git.quintela@redhat.com>
     [not found]   ` <4FEF7C5F.5010700@gmail.com>
2012-07-01 10:44     ` [Qemu-devel] [PATCH 06/12] savevm: introduce is_active method Juan Quintela
     [not found] ` <5a3139cd92ad66e5028ad0120e4de63c1a089d65.1340910651.git.quintela@redhat.com>
2012-07-01 12:14   ` [Qemu-devel] [PATCH 07/12] savevm: split save_live_setup from save_live_state Orit Wasserman
     [not found] ` <cd73a246dbbb7a688e0000204f5af2040afe6578.1340910651.git.quintela@redhat.com>
2012-07-01 12:17   ` [Qemu-devel] [PATCH 11/12] ram: iterate phase Igor Mitsyanko
2012-07-03 10:48     ` Juan Quintela
     [not found] ` <d1e17271bb9fdc52dbd0b591e471b096aca2e721.1340910651.git.quintela@redhat.com>
2012-07-02 11:57   ` [Qemu-devel] [PATCH 08/12] savevm: split save_live into stage2 and stage3 Orit Wasserman
     [not found] ` <07c8945d9b633bc509ebec0ff6646834ec974ccb.1340910651.git.quintela@redhat.com>
2012-07-02 12:00   ` [Qemu-devel] [PATCH 09/12] ram: save_live_setup() don't need to sent pages Orit Wasserman
     [not found] ` <be6bed86c792fb6f237f016aadfb3fcbda746f15.1340910651.git.quintela@redhat.com>
2012-07-02 12:00   ` [Qemu-devel] [PATCH 10/12] ram: save_live_complete() only do one loop Orit Wasserman
     [not found] ` <ab1ca756b1cfe67df94f7c6674ea86f6d7232a2f.1340910651.git.quintela@redhat.com>
2012-07-02 12:05   ` [Qemu-devel] [PATCH 12/12] ram: save_live_setup() we don't need to synchronize the dirty bitmap Orit Wasserman

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=4FF00826.3080006@redhat.com \
    --to=owasserm@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.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.