migration/ram: Discard RAM when growing RAM blocks after ram_postcopy_incoming_init()
commitcc61c703b6a8b9dfdfb92d5f3fa1961f6d232926
authorDavid Hildenbrand <david@redhat.com>
Thu, 29 Apr 2021 11:27:04 +0000 (29 13:27 +0200)
committerDr. David Alan Gilbert <dgilbert@redhat.com>
Thu, 13 May 2021 17:21:13 +0000 (13 18:21 +0100)
treec1b98f0c29c97c9457c5e357e94e2aea220d26fb
parentdcdc460767ed0a650e06ff256fa2a52ff1b57047
migration/ram: Discard RAM when growing RAM blocks after ram_postcopy_incoming_init()

In case we grow our RAM after ram_postcopy_incoming_init() (e.g., when
synchronizing the RAM block state with the migration source), the resized
part would not get discarded. Let's perform that when being notified
about a resize while postcopy has been advised, but is not listening
yet. With precopy, the process is as following:

1. VM created
- RAM blocks are created
2. Incomming migration started
- Postcopy is advised
- All pages in RAM blocks are discarded
3. Precopy starts
- RAM blocks are resized to match the size on the migration source.
- RAM pages from precopy stream are loaded
- Uffd handler is registered, postcopy starts listening
4. Guest started, postcopy running
- Pagefaults get resolved, pages get placed

Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20210429112708.12291-7-david@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
migration/ram.c