diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2021-04-08 14:00:57 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2021-04-08 14:00:57 +0100 |
commit | d8724020dd13c88a72fc391a6a2cf63abbd3dcca (patch) | |
tree | 5ff191d498a3f787c5353cf08e9e0f69832c3272 /migration/migration.c | |
parent | 9692c7b0373677badcf8bb299ab8e2597244d436 (diff) | |
parent | e999fa47b220274082cb238d5ccb2c9bacd42bf1 (diff) |
Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20210407b' into staging
V2 migration+virtiofs fixes pull 2021-04-07
A seg fix in virtiofsd, a bunch of fixes for background snapshots, and
a migration test fix.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
v2
Fix for !linux build
# gpg: Signature made Wed 07 Apr 2021 18:53:13 BST
# gpg: using RSA key 45F5C71B4A0CB7FB977A9FA90516331EBC5BFDE7
# gpg: Good signature from "Dr. David Alan Gilbert (RH2) <dgilbert@redhat.com>" [full]
# Primary key fingerprint: 45F5 C71B 4A0C B7FB 977A 9FA9 0516 331E BC5B FDE7
* remotes/dgilbert/tags/pull-migration-20210407b:
tests/migration: fix parameter of auto-converge migration
migration: Rename 'bs' to 'block' in background snapshot code
migration: Pre-fault memory before starting background snasphot
migration: Inhibit virtio-balloon for the duration of background snapshot
migration: Fix missing qemu_fflush() on buffer file in bg_migration_thread
virtiofsd: Fix security.capability comparison
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'migration/migration.c')
-rw-r--r-- | migration/migration.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/migration/migration.c b/migration/migration.c index ca8b97baa5..8ca034136b 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1976,6 +1976,14 @@ bool migration_in_incoming_postcopy(void) return ps >= POSTCOPY_INCOMING_DISCARD && ps < POSTCOPY_INCOMING_END; } +bool migration_in_bg_snapshot(void) +{ + MigrationState *s = migrate_get_current(); + + return migrate_background_snapshot() && + migration_is_setup_or_active(s->state); +} + bool migration_is_idle(void) { MigrationState *s = current_migration; @@ -3812,13 +3820,21 @@ static void *bg_migration_thread(void *opaque) * with vCPUs running and, finally, write stashed non-RAM part of * the vmstate from the buffer to the migration stream. */ - s->bioc = qio_channel_buffer_new(128 * 1024); + s->bioc = qio_channel_buffer_new(512 * 1024); qio_channel_set_name(QIO_CHANNEL(s->bioc), "vmstate-buffer"); fb = qemu_fopen_channel_output(QIO_CHANNEL(s->bioc)); object_unref(OBJECT(s->bioc)); update_iteration_initial_status(s); + /* + * Prepare for tracking memory writes with UFFD-WP - populate + * RAM pages before protecting. + */ +#ifdef __linux__ + ram_write_tracking_prepare(); +#endif + qemu_savevm_state_header(s->to_dst_file); qemu_savevm_state_setup(s->to_dst_file); @@ -3866,6 +3882,12 @@ static void *bg_migration_thread(void *opaque) if (qemu_savevm_state_complete_precopy_non_iterable(fb, false, false)) { goto fail; } + /* + * Since we are going to get non-iterable state data directly + * from s->bioc->data, explicit flush is needed here. + */ + qemu_fflush(fb); + /* Now initialize UFFD context and start tracking RAM writes */ if (ram_write_tracking_start()) { goto fail; |