All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Juan Quintela <quintela@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 30/51] ram: Move src_page_req* to RAMState
Date: Fri, 31 Mar 2017 17:52:28 +0100	[thread overview]
Message-ID: <20170331165227.GP4514@work-vm> (raw)
In-Reply-To: <20170323204544.12015-31-quintela@redhat.com>

* Juan Quintela (quintela@redhat.com) wrote:
> This are the last postcopy fields still at MigrationState.  Once there
> Move MigrationSrcPageRequest to ram.c and remove MigrationState
> parameters where appropiate.
> 
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  include/migration/migration.h | 17 +-----------
>  migration/migration.c         |  5 +---
>  migration/ram.c               | 62 ++++++++++++++++++++++++++-----------------
>  3 files changed, 40 insertions(+), 44 deletions(-)
> 
> diff --git a/include/migration/migration.h b/include/migration/migration.h
> index e032fb0..8a6caa3 100644
> --- a/include/migration/migration.h
> +++ b/include/migration/migration.h
> @@ -128,18 +128,6 @@ struct MigrationIncomingState {
>  MigrationIncomingState *migration_incoming_get_current(void);
>  void migration_incoming_state_destroy(void);
>  
> -/*
> - * An outstanding page request, on the source, having been received
> - * and queued
> - */
> -struct MigrationSrcPageRequest {
> -    RAMBlock *rb;
> -    hwaddr    offset;
> -    hwaddr    len;
> -
> -    QSIMPLEQ_ENTRY(MigrationSrcPageRequest) next_req;
> -};
> -
>  struct MigrationState
>  {
>      size_t bytes_xfer;
> @@ -186,9 +174,6 @@ struct MigrationState
>      /* Flag set once the migration thread called bdrv_inactivate_all */
>      bool block_inactive;
>  
> -    /* Queue of outstanding page requests from the destination */
> -    QemuMutex src_page_req_mutex;
> -    QSIMPLEQ_HEAD(src_page_requests, MigrationSrcPageRequest) src_page_requests;
>      /* The semaphore is used to notify COLO thread that failover is finished */
>      QemuSemaphore colo_exit_sem;
>  
> @@ -371,7 +356,7 @@ void savevm_skip_configuration(void);
>  int global_state_store(void);
>  void global_state_store_running(void);
>  
> -void flush_page_queue(MigrationState *ms);
> +void flush_page_queue(void);
>  int ram_save_queue_pages(MigrationState *ms, const char *rbname,
>                           ram_addr_t start, ram_addr_t len);
>  uint64_t ram_pagesize_summary(void);
> diff --git a/migration/migration.c b/migration/migration.c
> index b220941..58c1587 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -109,7 +109,6 @@ MigrationState *migrate_get_current(void)
>      };
>  
>      if (!once) {
> -        qemu_mutex_init(&current_migration.src_page_req_mutex);
>          current_migration.parameters.tls_creds = g_strdup("");
>          current_migration.parameters.tls_hostname = g_strdup("");
>          once = true;
> @@ -949,7 +948,7 @@ static void migrate_fd_cleanup(void *opaque)
>      qemu_bh_delete(s->cleanup_bh);
>      s->cleanup_bh = NULL;
>  
> -    flush_page_queue(s);
> +    flush_page_queue();
>  
>      if (s->to_dst_file) {
>          trace_migrate_fd_cleanup();
> @@ -1123,8 +1122,6 @@ MigrationState *migrate_init(const MigrationParams *params)
>  
>      migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_SETUP);
>  
> -    QSIMPLEQ_INIT(&s->src_page_requests);
> -
>      s->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
>      return s;
>  }
> diff --git a/migration/ram.c b/migration/ram.c
> index 325a0f3..601370c 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -151,6 +151,18 @@ struct RAMBitmap {
>  };
>  typedef struct RAMBitmap RAMBitmap;
>  
> +/*
> + * An outstanding page request, on the source, having been received
> + * and queued
> + */
> +struct RAMSrcPageRequest {
> +    RAMBlock *rb;
> +    hwaddr    offset;
> +    hwaddr    len;
> +
> +    QSIMPLEQ_ENTRY(RAMSrcPageRequest) next_req;
> +};
> +
>  /* State of RAM for migration */
>  struct RAMState {
>      /* Last block that we have visited searching for dirty pages */
> @@ -205,6 +217,9 @@ struct RAMState {
>      RAMBitmap *ram_bitmap;
>      /* The RAMBlock used in the last src_page_request */
>      RAMBlock *last_req_rb;
> +    /* Queue of outstanding page requests from the destination */
> +    QemuMutex src_page_req_mutex;
> +    QSIMPLEQ_HEAD(src_page_requests, RAMSrcPageRequest) src_page_requests;
>  };
>  typedef struct RAMState RAMState;
>  
> @@ -1084,20 +1099,20 @@ static bool find_dirty_block(RAMState *rs, QEMUFile *f, PageSearchStatus *pss,
>   *
>   * Returns the block of the page (or NULL if none available)
>   *
> - * @ms: current migration state
> + * @rs: current RAM state
>   * @offset: used to return the offset within the RAMBlock
>   * @ram_addr_abs: pointer into which to store the address of the dirty page
>   *                within the global ram_addr space
>   */
> -static RAMBlock *unqueue_page(MigrationState *ms, ram_addr_t *offset,
> +static RAMBlock *unqueue_page(RAMState *rs, ram_addr_t *offset,
>                                ram_addr_t *ram_addr_abs)
>  {
>      RAMBlock *block = NULL;
>  
> -    qemu_mutex_lock(&ms->src_page_req_mutex);
> -    if (!QSIMPLEQ_EMPTY(&ms->src_page_requests)) {
> -        struct MigrationSrcPageRequest *entry =
> -                                QSIMPLEQ_FIRST(&ms->src_page_requests);
> +    qemu_mutex_lock(&rs->src_page_req_mutex);
> +    if (!QSIMPLEQ_EMPTY(&rs->src_page_requests)) {
> +        struct RAMSrcPageRequest *entry =
> +                                QSIMPLEQ_FIRST(&rs->src_page_requests);
>          block = entry->rb;
>          *offset = entry->offset;
>          *ram_addr_abs = (entry->offset + entry->rb->offset) &
> @@ -1108,11 +1123,11 @@ static RAMBlock *unqueue_page(MigrationState *ms, ram_addr_t *offset,
>              entry->offset += TARGET_PAGE_SIZE;
>          } else {
>              memory_region_unref(block->mr);
> -            QSIMPLEQ_REMOVE_HEAD(&ms->src_page_requests, next_req);
> +            QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
>              g_free(entry);
>          }
>      }
> -    qemu_mutex_unlock(&ms->src_page_req_mutex);
> +    qemu_mutex_unlock(&rs->src_page_req_mutex);
>  
>      return block;
>  }
> @@ -1125,13 +1140,11 @@ static RAMBlock *unqueue_page(MigrationState *ms, ram_addr_t *offset,
>   * Returns if a queued page is found
>   *
>   * @rs: current RAM state
> - * @ms: current migration state
>   * @pss: data about the state of the current dirty page scan
>   * @ram_addr_abs: pointer into which to store the address of the dirty page
>   *                within the global ram_addr space
>   */
> -static bool get_queued_page(RAMState *rs, MigrationState *ms,
> -                            PageSearchStatus *pss,
> +static bool get_queued_page(RAMState *rs, PageSearchStatus *pss,
>                              ram_addr_t *ram_addr_abs)
>  {
>      RAMBlock  *block;
> @@ -1139,7 +1152,7 @@ static bool get_queued_page(RAMState *rs, MigrationState *ms,
>      bool dirty;
>  
>      do {
> -        block = unqueue_page(ms, &offset, ram_addr_abs);
> +        block = unqueue_page(rs, &offset, ram_addr_abs);
>          /*
>           * We're sending this page, and since it's postcopy nothing else
>           * will dirty it, and we must make sure it doesn't get sent again
> @@ -1191,19 +1204,18 @@ static bool get_queued_page(RAMState *rs, MigrationState *ms,
>   *
>   * It should be empty at the end anyway, but in error cases there may
>   * xbe some left.
> - *
> - * @ms: current migration state
>   */
> -void flush_page_queue(MigrationState *ms)
> +void flush_page_queue(void)

I'm not sure this is safe;  it's called from migrate_fd_cleanup right at
the end, if you do any finalisation/cleanup of the RAMState in ram_save_complete
then when is it safe to run this?

>  {
> -    struct MigrationSrcPageRequest *mspr, *next_mspr;
> +    struct RAMSrcPageRequest *mspr, *next_mspr;
> +    RAMState *rs = &ram_state;
>      /* This queue generally should be empty - but in the case of a failed
>       * migration might have some droppings in.
>       */
>      rcu_read_lock();
> -    QSIMPLEQ_FOREACH_SAFE(mspr, &ms->src_page_requests, next_req, next_mspr) {
> +    QSIMPLEQ_FOREACH_SAFE(mspr, &rs->src_page_requests, next_req, next_mspr) {
>          memory_region_unref(mspr->rb->mr);
> -        QSIMPLEQ_REMOVE_HEAD(&ms->src_page_requests, next_req);
> +        QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
>          g_free(mspr);
>      }
>      rcu_read_unlock();
> @@ -1260,16 +1272,16 @@ int ram_save_queue_pages(MigrationState *ms, const char *rbname,
>          goto err;
>      }
>  
> -    struct MigrationSrcPageRequest *new_entry =
> -        g_malloc0(sizeof(struct MigrationSrcPageRequest));
> +    struct RAMSrcPageRequest *new_entry =
> +        g_malloc0(sizeof(struct RAMSrcPageRequest));
>      new_entry->rb = ramblock;
>      new_entry->offset = start;
>      new_entry->len = len;
>  
>      memory_region_ref(ramblock->mr);
> -    qemu_mutex_lock(&ms->src_page_req_mutex);
> -    QSIMPLEQ_INSERT_TAIL(&ms->src_page_requests, new_entry, next_req);
> -    qemu_mutex_unlock(&ms->src_page_req_mutex);
> +    qemu_mutex_lock(&rs->src_page_req_mutex);
> +    QSIMPLEQ_INSERT_TAIL(&rs->src_page_requests, new_entry, next_req);
> +    qemu_mutex_unlock(&rs->src_page_req_mutex);

Hmm ok where did it get it's rs from?
Anyway, the thing I needed to convince myself of was that there was any guarantee that
RAMState would exist by the time the first request came in, something that we now need
to be careful of.
I think we're mostly OK; we call qemu_savevm_state_begin() at the top
of migration_thread so the ram_save_setup should be done and allocate
the RAMState before we get into the main loop and thus before we ever
look at the 'start_postcopy' flag and thus before we ever ask the destination
to send us stuff.

>      rcu_read_unlock();
>  
>      return 0;
> @@ -1408,7 +1420,7 @@ static int ram_find_and_save_block(RAMState *rs, QEMUFile *f, bool last_stage)
>  
>      do {
>          again = true;
> -        found = get_queued_page(rs, ms, &pss, &dirty_ram_abs);
> +        found = get_queued_page(rs, &pss, &dirty_ram_abs);
>  
>          if (!found) {
>              /* priority queue empty, so just search for something dirty */
> @@ -1968,6 +1980,8 @@ static int ram_state_init(RAMState *rs)
>  
>      memset(rs, 0, sizeof(*rs));
>      qemu_mutex_init(&rs->bitmap_mutex);
> +    qemu_mutex_init(&rs->src_page_req_mutex);
> +    QSIMPLEQ_INIT(&rs->src_page_requests);

Similar question to above; that mutex is going to get reinit'd
on a new migration and it shouldn't be without it being destroyed.
Maybe make it a once.

Dave

>  
>      if (migrate_use_xbzrle()) {
>          XBZRLE_cache_lock();
> -- 
> 2.9.3
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

  parent reply	other threads:[~2017-03-31 16:52 UTC|newest]

Thread overview: 167+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-23 20:44 [Qemu-devel] [PATCH v2 00/51] Creating RAMState for migration Juan Quintela
2017-03-23 20:44 ` [Qemu-devel] [PATCH 01/51] ram: Update all functions comments Juan Quintela
2017-03-24  9:55   ` Peter Xu
2017-03-24 11:44     ` Juan Quintela
2017-03-26 13:43       ` Peter Xu
2017-03-28 18:32         ` Juan Quintela
2017-03-31 14:43     ` Dr. David Alan Gilbert
2017-04-03 20:40       ` Juan Quintela
2017-03-31 15:51   ` Dr. David Alan Gilbert
2017-04-04 17:12     ` Juan Quintela
2017-03-23 20:44 ` [Qemu-devel] [PATCH 02/51] ram: rename block_name to rbname Juan Quintela
2017-03-24 11:11   ` Dr. David Alan Gilbert
2017-03-24 17:15   ` Eric Blake
2017-03-28 10:52     ` Juan Quintela
2017-03-23 20:44 ` [Qemu-devel] [PATCH 03/51] ram: Create RAMState Juan Quintela
2017-03-27  4:43   ` Peter Xu
2017-03-23 20:44 ` [Qemu-devel] [PATCH 04/51] ram: Add dirty_rate_high_cnt to RAMState Juan Quintela
2017-03-27  7:24   ` Peter Xu
2017-03-23 20:44 ` [Qemu-devel] [PATCH 05/51] ram: Move bitmap_sync_count into RAMState Juan Quintela
2017-03-27  7:34   ` Peter Xu
2017-03-28 10:56     ` Juan Quintela
2017-03-29  6:55       ` Peter Xu
2017-03-29  8:56         ` Juan Quintela
2017-03-29  9:07           ` Peter Xu
2017-03-23 20:44 ` [Qemu-devel] [PATCH 06/51] ram: Move start time " Juan Quintela
2017-03-27  7:54   ` Peter Xu
2017-03-28 11:00     ` Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 07/51] ram: Move bytes_xfer_prev " Juan Quintela
2017-03-27  8:04   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 08/51] ram: Move num_dirty_pages_period " Juan Quintela
2017-03-27  8:07   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 09/51] ram: Move xbzrle_cache_miss_prev " Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 10/51] ram: Move iterations_prev " Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 11/51] ram: Move dup_pages " Juan Quintela
2017-03-27  9:23   ` Peter Xu
2017-03-28 18:43     ` Juan Quintela
2017-03-29  7:02       ` Peter Xu
2017-03-29  8:26         ` Juan Quintela
2017-03-31 14:58       ` Dr. David Alan Gilbert
2017-03-23 20:45 ` [Qemu-devel] [PATCH 12/51] ram: Remove unused dup_mig_bytes_transferred() Juan Quintela
2017-03-27  9:24   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 13/51] ram: Remove unused pages_skipped variable Juan Quintela
2017-03-27  9:26   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 14/51] ram: Move norm_pages to RAMState Juan Quintela
2017-03-27  9:43   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 15/51] ram: Remove norm_mig_bytes_transferred Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 16/51] ram: Move iterations into RAMState Juan Quintela
2017-03-27 10:46   ` Peter Xu
2017-03-28 18:34     ` Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 17/51] ram: Move xbzrle_bytes " Juan Quintela
2017-03-24 10:12   ` Dr. David Alan Gilbert
2017-03-27 10:48   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 18/51] ram: Move xbzrle_pages " Juan Quintela
2017-03-24 10:13   ` Dr. David Alan Gilbert
2017-03-27 10:59   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 19/51] ram: Move xbzrle_cache_miss " Juan Quintela
2017-03-24 10:15   ` Dr. David Alan Gilbert
2017-03-27 11:00   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 20/51] ram: Move xbzrle_cache_miss_rate " Juan Quintela
2017-03-24 10:17   ` Dr. David Alan Gilbert
2017-03-27 11:01   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 21/51] ram: Move xbzrle_overflows " Juan Quintela
2017-03-24 10:22   ` Dr. David Alan Gilbert
2017-03-27 11:03   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 22/51] ram: Move migration_dirty_pages to RAMState Juan Quintela
2017-03-30  6:24   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 23/51] ram: Everything was init to zero, so use memset Juan Quintela
2017-03-29 17:14   ` Dr. David Alan Gilbert
2017-03-30  6:25   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 24/51] ram: Move migration_bitmap_mutex into RAMState Juan Quintela
2017-03-30  6:25   ` Peter Xu
2017-03-30  8:49   ` Dr. David Alan Gilbert
2017-03-23 20:45 ` [Qemu-devel] [PATCH 25/51] ram: Move migration_bitmap_rcu " Juan Quintela
2017-03-30  6:25   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 26/51] ram: Move bytes_transferred " Juan Quintela
2017-03-29 17:38   ` Dr. David Alan Gilbert
2017-03-30  6:26   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 27/51] ram: Use the RAMState bytes_transferred parameter Juan Quintela
2017-03-30  6:27   ` Peter Xu
2017-03-30 16:05     ` Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 28/51] ram: Remove ram_save_remaining Juan Quintela
2017-03-24 15:34   ` Dr. David Alan Gilbert
2017-03-30  6:24   ` Peter Xu
2017-03-30 16:07     ` Juan Quintela
2017-03-31  2:57       ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 29/51] ram: Move last_req_rb to RAMState Juan Quintela
2017-03-30  6:49   ` Peter Xu
2017-03-30 16:08     ` Juan Quintela
2017-03-31  3:00       ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 30/51] ram: Move src_page_req* " Juan Quintela
2017-03-30  6:56   ` Peter Xu
2017-03-30 16:09     ` Juan Quintela
2017-03-31 15:25     ` Dr. David Alan Gilbert
2017-04-01  7:15       ` Peter Xu
2017-04-05 10:27         ` Dr. David Alan Gilbert
2017-03-31 16:52   ` Dr. David Alan Gilbert [this message]
2017-04-04 17:42     ` Juan Quintela
2017-04-05 10:34       ` Dr. David Alan Gilbert
2017-03-23 20:45 ` [Qemu-devel] [PATCH 31/51] ram: Create ram_dirty_sync_count() Juan Quintela
2017-03-29  9:06   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 32/51] ram: Remove dirty_bytes_rate Juan Quintela
2017-03-30  7:00   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 33/51] ram: Move dirty_pages_rate to RAMState Juan Quintela
2017-03-30  7:04   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 34/51] ram: Move postcopy_requests into RAMState Juan Quintela
2017-03-30  7:06   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 35/51] ram: Add QEMUFile to RAMState Juan Quintela
2017-03-24 10:52   ` Dr. David Alan Gilbert
2017-03-24 11:14     ` Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 36/51] ram: Move QEMUFile into RAMState Juan Quintela
2017-03-31 14:21   ` Dr. David Alan Gilbert
2017-03-23 20:45 ` [Qemu-devel] [PATCH 37/51] ram: Move compression_switch to RAMState Juan Quintela
2017-03-29 18:02   ` Dr. David Alan Gilbert
2017-03-30 16:19     ` Juan Quintela
2017-03-30 16:27     ` Juan Quintela
2017-03-30  7:52   ` Peter Xu
2017-03-30 16:30     ` Juan Quintela
2017-03-31  3:04       ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 38/51] migration: Remove MigrationState from migration_in_postcopy Juan Quintela
2017-03-24 15:27   ` Dr. David Alan Gilbert
2017-03-30  8:06   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 39/51] ram: We don't need MigrationState parameter anymore Juan Quintela
2017-03-24 15:28   ` Dr. David Alan Gilbert
2017-03-30  8:05   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 40/51] ram: Rename qemu_target_page_bits() to qemu_target_page_size() Juan Quintela
2017-03-24 15:32   ` Dr. David Alan Gilbert
2017-03-30  8:03   ` Peter Xu
2017-03-30  8:55     ` Dr. David Alan Gilbert
2017-03-30  9:11     ` Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 41/51] Add page-size to output in 'info migrate' Juan Quintela
2017-03-24 17:17   ` Eric Blake
2017-03-23 20:45 ` [Qemu-devel] [PATCH 42/51] ram: Pass RAMBlock to bitmap_sync Juan Quintela
2017-03-24  1:10   ` Yang Hongyang
2017-03-24  8:29     ` Juan Quintela
2017-03-24  9:11       ` Yang Hongyang
2017-03-24 10:05         ` Juan Quintela
2017-03-28 17:12       ` Dr. David Alan Gilbert
2017-03-28 18:45         ` Juan Quintela
2017-03-30  9:07   ` Dr. David Alan Gilbert
2017-03-30 11:38     ` Juan Quintela
2017-03-30 19:10       ` Dr. David Alan Gilbert
2017-04-04 17:46         ` Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 43/51] ram: ram_discard_range() don't use the mis parameter Juan Quintela
2017-03-29 18:43   ` Dr. David Alan Gilbert
2017-03-30 10:28   ` Peter Xu
2017-03-23 20:45 ` [Qemu-devel] [PATCH 44/51] ram: reorganize last_sent_block Juan Quintela
2017-03-31  8:35   ` Peter Xu
2017-03-31  8:40   ` Dr. David Alan Gilbert
2017-03-23 20:45 ` [Qemu-devel] [PATCH 45/51] ram: Use page number instead of an address for the bitmap operations Juan Quintela
2017-03-31 12:22   ` Dr. David Alan Gilbert
2017-04-04 18:21     ` Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 46/51] ram: Remember last_page instead of last_offset Juan Quintela
2017-03-31  9:09   ` Dr. David Alan Gilbert
2017-04-04 18:24     ` Juan Quintela
2017-03-23 20:45 ` [Qemu-devel] [PATCH 47/51] ram: Change offset field in PageSearchStatus to page Juan Quintela
2017-03-31 12:31   ` Dr. David Alan Gilbert
2017-03-23 20:45 ` [Qemu-devel] [PATCH 48/51] ram: Use ramblock and page offset instead of absolute offset Juan Quintela
2017-03-31 17:17   ` Dr. David Alan Gilbert
2017-03-23 20:45 ` [Qemu-devel] [PATCH 49/51] ram: rename last_ram_offset() last_ram_pages() Juan Quintela
2017-03-31 14:23   ` Dr. David Alan Gilbert
2017-03-23 20:45 ` [Qemu-devel] [PATCH 50/51] ram: Use RAMBitmap type for coherence Juan Quintela
2017-03-31 14:27   ` Dr. David Alan Gilbert
2017-03-23 20:45 ` [Qemu-devel] [PATCH 51/51] migration: Remove MigrationState parameter from migration_is_idle() Juan Quintela
2017-03-24 16:38   ` Dr. David Alan Gilbert
2017-03-31 14:34 ` [Qemu-devel] [PATCH v2 00/51] Creating RAMState for migration Dr. David Alan Gilbert
2017-04-04 17:22   ` Juan Quintela
2017-04-04 17:36     ` Dr. David Alan Gilbert

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=20170331165227.GP4514@work-vm \
    --to=dgilbert@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.