All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: aarcange@redhat.com, yamahata@private.email.ne.jp,
	quintela@redhat.com, qemu-devel@nongnu.org, amit.shah@redhat.com,
	pbonzini@redhat.com, yanghy@cn.fujitsu.com
Subject: Re: [Qemu-devel] [PATCH v5 17/45] Add wrappers and handlers for sending/receiving the postcopy-ram migration messages.
Date: Fri, 27 Mar 2015 15:13:53 +1100	[thread overview]
Message-ID: <20150327041353.GD2900@voom.fritz.box> (raw)
In-Reply-To: <20150326163327.GG2370@work-vm>

[-- Attachment #1: Type: text/plain, Size: 11226 bytes --]

On Thu, Mar 26, 2015 at 04:33:28PM +0000, Dr. David Alan Gilbert wrote:
> (Only replying to some of the items in this mail - the others I'll get
> to another time).
> 
> * David Gibson (david@gibson.dropbear.id.au) wrote:
> > On Wed, Feb 25, 2015 at 04:51:40PM +0000, Dr. David Alan Gilbert (git) wrote:
> > > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > > 
> > > The state of the postcopy process is managed via a series of messages;
> > >    * Add wrappers and handlers for sending/receiving these messages
> > >    * Add state variable that track the current state of postcopy
> > > 
> > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > > ---
> > >  include/migration/migration.h |  15 ++
> > >  include/sysemu/sysemu.h       |  23 +++
> > >  migration/migration.c         |  13 ++
> > >  savevm.c                      | 325 ++++++++++++++++++++++++++++++++++++++++++
> > >  trace-events                  |  11 ++
> > >  5 files changed, 387 insertions(+)
> > > 
> > > diff --git a/include/migration/migration.h b/include/migration/migration.h
> > > index f94af5b..81cd1f2 100644
> > > --- a/include/migration/migration.h
> > > +++ b/include/migration/migration.h
> > > @@ -52,6 +52,14 @@ typedef struct MigrationState MigrationState;
> > >  
> > >  typedef QLIST_HEAD(, LoadStateEntry) LoadStateEntry_Head;
> > >  
> > > +typedef enum {
> > > +    POSTCOPY_INCOMING_NONE = 0,  /* Initial state - no postcopy */
> > > +    POSTCOPY_INCOMING_ADVISE,
> > > +    POSTCOPY_INCOMING_LISTENING,
> > > +    POSTCOPY_INCOMING_RUNNING,
> > > +    POSTCOPY_INCOMING_END
> > > +} PostcopyState;
> > > +
> > >  /* State for the incoming migration */
> > >  struct MigrationIncomingState {
> > >      QEMUFile *file;
> > > @@ -59,6 +67,8 @@ struct MigrationIncomingState {
> > >      /* See savevm.c */
> > >      LoadStateEntry_Head loadvm_handlers;
> > >  
> > > +    PostcopyState postcopy_state;
> > > +
> > >      QEMUFile *return_path;
> > >      QemuMutex      rp_mutex;    /* We send replies from multiple threads */
> > >  };
> > > @@ -219,4 +229,9 @@ size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset,
> > >                               ram_addr_t offset, size_t size,
> > >                               int *bytes_sent);
> > >  
> > > +PostcopyState postcopy_state_get(MigrationIncomingState *mis);
> > > +
> > > +/* Set the state and return the old state */
> > > +PostcopyState postcopy_state_set(MigrationIncomingState *mis,
> > > +                                 PostcopyState new_state);
> > >  #endif
> > > diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> > > index 8da879f..d6a6d51 100644
> > > --- a/include/sysemu/sysemu.h
> > > +++ b/include/sysemu/sysemu.h
> > > @@ -87,6 +87,18 @@ enum qemu_vm_cmd {
> > >      MIG_CMD_INVALID = 0,       /* Must be 0 */
> > >      MIG_CMD_OPEN_RETURN_PATH,  /* Tell the dest to open the Return path */
> > >      MIG_CMD_PING,              /* Request a PONG on the RP */
> > > +
> > > +    MIG_CMD_POSTCOPY_ADVISE = 20,  /* Prior to any page transfers, just
> > > +                                      warn we might want to do PC */
> > > +    MIG_CMD_POSTCOPY_LISTEN,       /* Start listening for incoming
> > > +                                      pages as it's running. */
> > > +    MIG_CMD_POSTCOPY_RUN,          /* Start execution */
> > > +    MIG_CMD_POSTCOPY_END,          /* Postcopy is finished. */
> > > +
> > > +    MIG_CMD_POSTCOPY_RAM_DISCARD,  /* A list of pages to discard that
> > > +                                      were previously sent during
> > > +                                      precopy but are dirty. */
> > > +
> > >  };
> > >  
> > >  bool qemu_savevm_state_blocked(Error **errp);
> > > @@ -101,6 +113,17 @@ void qemu_savevm_command_send(QEMUFile *f, enum qemu_vm_cmd command,
> > >                                uint16_t len, uint8_t *data);
> > >  void qemu_savevm_send_ping(QEMUFile *f, uint32_t value);
> > >  void qemu_savevm_send_open_return_path(QEMUFile *f);
> > > +void qemu_savevm_send_postcopy_advise(QEMUFile *f);
> > > +void qemu_savevm_send_postcopy_listen(QEMUFile *f);
> > > +void qemu_savevm_send_postcopy_run(QEMUFile *f);
> > > +void qemu_savevm_send_postcopy_end(QEMUFile *f, uint8_t status);
> > > +
> > > +void qemu_savevm_send_postcopy_ram_discard(QEMUFile *f, const char *name,
> > > +                                           uint16_t len, uint8_t offset,
> > > +                                           uint64_t *addrlist,
> > > +                                           uint32_t *masklist);
> > > +
> > > +
> > >  int qemu_loadvm_state(QEMUFile *f);
> > >  
> > >  /* SLIRP */
> > > diff --git a/migration/migration.c b/migration/migration.c
> > > index 434864a..957115a 100644
> > > --- a/migration/migration.c
> > > +++ b/migration/migration.c
> > > @@ -971,3 +971,16 @@ void migrate_fd_connect(MigrationState *s)
> > >      qemu_thread_create(&s->thread, "migration", migration_thread, s,
> > >                         QEMU_THREAD_JOINABLE);
> > >  }
> > > +
> > > +PostcopyState  postcopy_state_get(MigrationIncomingState *mis)
> > > +{
> > > +    return atomic_fetch_add(&mis->postcopy_state, 0);
> > > +}
> > > +
> > > +/* Set the state and return the old state */
> > > +PostcopyState postcopy_state_set(MigrationIncomingState *mis,
> > > +                                 PostcopyState new_state)
> > > +{
> > > +    return atomic_xchg(&mis->postcopy_state, new_state);
> > 
> > Is there anything explaining what the overall atomicity requirements
> > are for this state variable?  It's a bit hard to tell if an atomic
> > xchg is necessary or sufficient without a description of what the
> > overall concurrency scheme is with regards to this variable.
> 
> Can you tell me how to define the requirements?

Well, that is always the tricky question.

> It's a state variable tested and changed by at least two threads and
> it's got to go through a correct sequence of states.
> So generally you're doing a 'I expect to be in .... now change to ....'
> so the exchange works well for that.

So.. in this case.  It seems what might make sense as a basic
atomicity option here is a cmpxchg.  So your state_set function takes
old_state and new_state.  It will atomically update old_state to
new_state, returning an error if somebody else changed the state away
from old_state in the meantime.

Then you can have a blurb next to the state_set helper explaining why
you need this atomic op for updates to the state variable from
multiple threads.

> > > + *  n x
> > > + *      be64   Page addresses for start of an invalidation range
> > > + *      be32   mask of 32 pages, '1' to discard'
> > 
> > Is the extra compactness from this semi-sparse bitmap encoding
> > actually worth it?  A simple list of page addresses, or address ranges
> > to discard would be substantially simpler to get one's head around,
> > and also seems like it might be more robust against future
> > implementation changes as a wire format.
> 
> As previously discussed I really think it is;  what I'm tending to
> see when I've been looking at these in debug is something that's
> sparse but tends to be blobby with sets of pages discarded near
> by.  However you do this you're going to have to walk this
> bitmap and format out some sort of set of messages.

I'd really need to see some numbers to be convinced.  The semi-sparse
bitmap introduces a huge amount of code and complexity at both ends.

Remember, using ranges, you can still coalesce adjacent discarded
pages.  Even using some compat differential encodings of the range
endpoints might work out simpler than the bitmap fragments.

Plus, ranges handle the host versus target page size distinctions very
naturally.

[snip]
> > DISCARD will typically immediately precede LISTEN, won't it?  Is there
> > a reason not to put the discard data into the LISTEN command?
> 
> Discard data can be quite large, so I potentially send multiple discard
> commands.
> (Also as you can tell generally I've got a preference for one message does one
> thing, and thus I have tried to keep them separate).

So, I like the idea of one message per action in principle - but only
if that action really is well-defined without reference to what
operations come before and after it.  If there are hidden dependencies
about what actions have to come in what order, I'd rather bake that
into the command structure.

> > > +static int loadvm_postcopy_handle_advise(MigrationIncomingState *mis,
> > > +                                         uint64_t remote_hps,
> > > +                                         uint64_t remote_tps)
> > > +{
> > > +    PostcopyState ps = postcopy_state_get(mis);
> > > +    trace_loadvm_postcopy_handle_advise();
> > > +    if (ps != POSTCOPY_INCOMING_NONE) {
> > > +        error_report("CMD_POSTCOPY_ADVISE in wrong postcopy state (%d)", ps);
> > > +        return -1;
> > > +    }
> > > +
> > > +    if (remote_hps != getpagesize())  {
> > > +        /*
> > > +         * Some combinations of mismatch are probably possible but it gets
> > > +         * a bit more complicated.  In particular we need to place whole
> > > +         * host pages on the dest at once, and we need to ensure that we
> > > +         * handle dirtying to make sure we never end up sending part of
> > > +         * a hostpage on it's own.
> > > +         */
> > > +        error_report("Postcopy needs matching host page sizes (s=%d d=%d)",
> > > +                     (int)remote_hps, getpagesize());
> > > +        return -1;
> > > +    }
> > > +
> > > +    if (remote_tps != (1ul << qemu_target_page_bits())) {
> > > +        /*
> > > +         * Again, some differences could be dealt with, but for now keep it
> > > +         * simple.
> > > +         */
> > > +        error_report("Postcopy needs matching target page sizes (s=%d d=%d)",
> > > +                     (int)remote_tps, 1 << qemu_target_page_bits());
> > > +        return -1;
> > > +    }
> > > +
> > > +    postcopy_state_set(mis, POSTCOPY_INCOMING_ADVISE);
> > 
> > Should you be checking the return value here to make sure it's still
> > POSTCOPY_INCOMING_NONE?  Atomic xchgs seem overkill if you still have
> > a race between the fetch at the top and the set here.
> > 
> > Or, in fact, should you be just doing an atomic exchange-then-check at
> > the top, rather than checking at the top, then changing at the bottom.
> 
> There's no race at this point yet; going from None->advise we still only
> have one thread.  The check at the top is a check against protocol
> violations (e.g. getting two advise or something like that).

Yeah.. and having to have intimate knowledge of the thread structure
at each point in order to analyze the atomic operation correctness is
exactly what bothers me about it.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2015-03-27  4:18 UTC|newest]

Thread overview: 181+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-25 16:51 [Qemu-devel] [PATCH v5 00/45] Postcopy implementation Dr. David Alan Gilbert (git)
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 01/45] Start documenting how postcopy works Dr. David Alan Gilbert (git)
2015-03-05  3:21   ` David Gibson
2015-03-05  9:21     ` Dr. David Alan Gilbert
2015-03-10  1:04       ` David Gibson
2015-03-13 13:07         ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 02/45] Split header writing out of qemu_save_state_begin Dr. David Alan Gilbert (git)
2015-03-10  1:05   ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 03/45] qemu_ram_foreach_block: pass up error value, and down the ramblock name Dr. David Alan Gilbert (git)
2015-03-10 15:30   ` Eric Blake
2015-03-10 16:21     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 04/45] Add qemu_get_counted_string to read a string prefixed by a count byte Dr. David Alan Gilbert (git)
2015-03-10  1:12   ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 05/45] Create MigrationIncomingState Dr. David Alan Gilbert (git)
2015-03-10  2:37   ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 06/45] Provide runtime Target page information Dr. David Alan Gilbert (git)
2015-03-10  2:38   ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 07/45] Return path: Open a return path on QEMUFile for sockets Dr. David Alan Gilbert (git)
2015-03-10  2:49   ` David Gibson
2015-03-13 13:14     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 08/45] Return path: socket_writev_buffer: Block even on non-blocking fd's Dr. David Alan Gilbert (git)
2015-03-10  2:56   ` David Gibson
2015-03-10 13:35     ` Dr. David Alan Gilbert
2015-03-11  1:51       ` David Gibson
2015-03-28 15:30   ` Paolo Bonzini
2015-03-29  4:07     ` David Gibson
2015-03-29  9:03       ` Paolo Bonzini
2015-03-30 16:50         ` Dr. David Alan Gilbert
2015-03-30 18:22           ` Markus Armbruster
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 09/45] Migration commands Dr. David Alan Gilbert (git)
2015-03-10  4:58   ` David Gibson
2015-03-10 11:04     ` Dr. David Alan Gilbert
2015-03-10 11:06       ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 10/45] Return path: Control commands Dr. David Alan Gilbert (git)
2015-03-10  5:40   ` David Gibson
2015-03-28 15:32   ` Paolo Bonzini
2015-03-30 17:34     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 11/45] Return path: Send responses from destination to source Dr. David Alan Gilbert (git)
2015-03-10  5:47   ` David Gibson
2015-03-10 14:34     ` Dr. David Alan Gilbert
2015-03-11  1:54       ` David Gibson
2015-03-25 18:47         ` Dr. David Alan Gilbert
2015-03-28 15:34     ` Paolo Bonzini
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 12/45] Return path: Source handling of return path Dr. David Alan Gilbert (git)
2015-03-10  6:08   ` David Gibson
2015-03-20 18:17     ` Dr. David Alan Gilbert
2015-03-23  2:37       ` David Gibson
2015-04-01 15:14         ` Dr. David Alan Gilbert
2015-04-07  3:07           ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 13/45] ram_debug_dump_bitmap: Dump a migration bitmap as text Dr. David Alan Gilbert (git)
2015-03-10  6:11   ` David Gibson
2015-03-20 18:48     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 14/45] Move loadvm_handlers into MigrationIncomingState Dr. David Alan Gilbert (git)
2015-03-10  6:19   ` David Gibson
2015-03-10 10:12     ` Dr. David Alan Gilbert
2015-03-10 11:03       ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 15/45] Rework loadvm path for subloops Dr. David Alan Gilbert (git)
2015-03-12  6:11   ` David Gibson
2015-04-14 12:04     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 16/45] Add migration-capability boolean for postcopy-ram Dr. David Alan Gilbert (git)
2015-03-12  6:14   ` David Gibson
2015-03-13 12:58     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 17/45] Add wrappers and handlers for sending/receiving the postcopy-ram migration messages Dr. David Alan Gilbert (git)
2015-03-12  9:30   ` David Gibson
2015-03-26 16:33     ` Dr. David Alan Gilbert
2015-03-27  4:13       ` David Gibson [this message]
2015-03-27 10:48         ` Dr. David Alan Gilbert
2015-03-28 16:00           ` Paolo Bonzini
2015-03-30  4:03           ` David Gibson
2015-03-28 15:58         ` Paolo Bonzini
2015-03-28 15:43   ` Paolo Bonzini
2015-03-30 17:46     ` Dr. David Alan Gilbert
2015-03-30 19:23       ` Paolo Bonzini
2015-03-31 11:05         ` Dr. David Alan Gilbert
2015-03-31 11:10           ` Paolo Bonzini
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 18/45] MIG_CMD_PACKAGED: Send a packaged chunk of migration stream Dr. David Alan Gilbert (git)
2015-03-13  0:55   ` David Gibson
2015-03-13 11:51     ` Dr. David Alan Gilbert
2015-03-16  6:16       ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 19/45] migrate_init: Call from savevm Dr. David Alan Gilbert (git)
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 20/45] Modify savevm handlers for postcopy Dr. David Alan Gilbert (git)
2015-03-13  1:00   ` David Gibson
2015-03-13 10:19     ` Dr. David Alan Gilbert
2015-03-16  6:18       ` David Gibson
2015-03-20 12:37         ` Dr. David Alan Gilbert
2015-03-23  2:25           ` David Gibson
2015-03-24 20:04             ` Dr. David Alan Gilbert
2015-03-24 22:32               ` David Gibson
2015-03-25 15:00                 ` Dr. David Alan Gilbert
2015-03-25 16:40                   ` Dr. David Alan Gilbert
2015-03-26  1:35                     ` David Gibson
2015-03-26 11:44                       ` Dr. David Alan Gilbert
2015-03-27  3:56                         ` David Gibson
2015-03-26  1:35                   ` David Gibson
2015-03-30  8:10                 ` Paolo Bonzini
2015-03-31  0:10                   ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 21/45] Add Linux userfaultfd header Dr. David Alan Gilbert (git)
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 22/45] postcopy: OS support test Dr. David Alan Gilbert (git)
2015-03-13  1:23   ` David Gibson
2015-03-13 10:41     ` Dr. David Alan Gilbert
2015-03-16  6:22       ` David Gibson
2015-03-30  8:14       ` Paolo Bonzini
2015-03-30 14:07         ` Dr. David Alan Gilbert
2015-03-30 14:09           ` Paolo Bonzini
2015-06-16 10:49             ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 23/45] migrate_start_postcopy: Command to trigger transition to postcopy Dr. David Alan Gilbert (git)
2015-03-13  1:26   ` David Gibson
2015-03-13 11:19     ` Dr. David Alan Gilbert
2015-03-16  6:23       ` David Gibson
2015-03-18 17:59         ` Dr. David Alan Gilbert
2015-03-19  4:18           ` David Gibson
2015-03-19  9:33             ` Dr. David Alan Gilbert
2015-03-23  2:20               ` David Gibson
2015-03-30  8:19                 ` Paolo Bonzini
2015-03-30 17:04                   ` Dr. David Alan Gilbert
2015-03-30 19:22                     ` Paolo Bonzini
2015-03-31 11:21                       ` Dr. David Alan Gilbert
2015-03-30  8:17               ` Paolo Bonzini
2015-03-31  2:23                 ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 24/45] MIG_STATE_POSTCOPY_ACTIVE: Add new migration state Dr. David Alan Gilbert (git)
2015-03-13  4:45   ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 25/45] qemu_savevm_state_complete: Postcopy changes Dr. David Alan Gilbert (git)
2015-03-13  4:58   ` David Gibson
2015-03-13 12:25     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 26/45] Postcopy page-map-incoming (PMI) structure Dr. David Alan Gilbert (git)
2015-03-13  5:19   ` David Gibson
2015-03-13 13:47     ` Dr. David Alan Gilbert
2015-03-16  6:30       ` David Gibson
2015-03-18 17:58         ` Dr. David Alan Gilbert
2015-03-23  2:48           ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 27/45] Postcopy: Maintain sentmap and calculate discard Dr. David Alan Gilbert (git)
2015-03-23  3:30   ` David Gibson
2015-03-23 14:36     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 28/45] postcopy: Incoming initialisation Dr. David Alan Gilbert (git)
2015-03-23  3:41   ` David Gibson
2015-03-23 13:46     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 29/45] postcopy: ram_enable_notify to switch on userfault Dr. David Alan Gilbert (git)
2015-03-23  3:45   ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 30/45] Postcopy: Postcopy startup in migration thread Dr. David Alan Gilbert (git)
2015-03-23  4:20   ` David Gibson
2015-03-26 11:05     ` Dr. David Alan Gilbert
2015-03-30  8:31       ` Paolo Bonzini
2015-04-13 11:35         ` Dr. David Alan Gilbert
2015-04-13 13:26           ` Paolo Bonzini
2015-04-13 14:58             ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 31/45] Postcopy end in migration_thread Dr. David Alan Gilbert (git)
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 32/45] Page request: Add MIG_RP_CMD_REQ_PAGES reverse command Dr. David Alan Gilbert (git)
2015-03-23  5:00   ` David Gibson
2015-03-25 18:16     ` Dr. David Alan Gilbert
2015-03-26  1:28       ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 33/45] Page request: Process incoming page request Dr. David Alan Gilbert (git)
2015-03-24  1:53   ` David Gibson
2015-03-25 17:37     ` Dr. David Alan Gilbert
2015-03-26  1:31       ` David Gibson
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 34/45] Page request: Consume pages off the post-copy queue Dr. David Alan Gilbert (git)
2015-03-24  2:15   ` David Gibson
2015-06-16 10:48     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 35/45] postcopy_ram.c: place_page and helpers Dr. David Alan Gilbert (git)
2015-03-24  2:33   ` David Gibson
2015-03-25 17:46     ` Dr. David Alan Gilbert
2015-02-25 16:51 ` [Qemu-devel] [PATCH v5 36/45] Postcopy: Use helpers to map pages during migration Dr. David Alan Gilbert (git)
2015-03-24  4:51   ` David Gibson
2015-02-25 16:52 ` [Qemu-devel] [PATCH v5 37/45] qemu_ram_block_from_host Dr. David Alan Gilbert (git)
2015-03-24  4:55   ` David Gibson
2015-02-25 16:52 ` [Qemu-devel] [PATCH v5 38/45] Don't sync dirty bitmaps in postcopy Dr. David Alan Gilbert (git)
2015-03-24  4:58   ` David Gibson
2015-03-24  9:05     ` Dr. David Alan Gilbert
2015-02-25 16:52 ` [Qemu-devel] [PATCH v5 39/45] Host page!=target page: Cleanup bitmaps Dr. David Alan Gilbert (git)
2015-03-24  5:23   ` David Gibson
2015-02-25 16:52 ` [Qemu-devel] [PATCH v5 40/45] Postcopy; Handle userfault requests Dr. David Alan Gilbert (git)
2015-03-24  5:38   ` David Gibson
2015-03-26 11:59     ` Dr. David Alan Gilbert
2015-02-25 16:52 ` [Qemu-devel] [PATCH v5 41/45] Start up a postcopy/listener thread ready for incoming page data Dr. David Alan Gilbert (git)
2015-02-25 16:52 ` [Qemu-devel] [PATCH v5 42/45] postcopy: Wire up loadvm_postcopy_handle_{run, end} commands Dr. David Alan Gilbert (git)
2015-02-25 16:52 ` [Qemu-devel] [PATCH v5 43/45] End of migration for postcopy Dr. David Alan Gilbert (git)
2015-02-25 16:52 ` [Qemu-devel] [PATCH v5 44/45] Disable mlock around incoming postcopy Dr. David Alan Gilbert (git)
2015-03-23  4:33   ` David Gibson
2015-02-25 16:52 ` [Qemu-devel] [PATCH v5 45/45] Inhibit ballooning during postcopy Dr. David Alan Gilbert (git)
2015-03-23  4:32   ` David Gibson
2015-03-23 12:21     ` Dr. David Alan Gilbert
2015-03-24  1:25       ` David Gibson

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=20150327041353.GD2900@voom.fritz.box \
    --to=david@gibson.dropbear.id.au \
    --cc=aarcange@redhat.com \
    --cc=amit.shah@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=yamahata@private.email.ne.jp \
    --cc=yanghy@cn.fujitsu.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.