From: Peter Xu <peterx@redhat.com>
To: qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Tian Kevin <kevin.tian@intel.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
peterx@redhat.com, Juan Quintela <quintela@redhat.com>
Subject: [PATCH RFC 3/4] vl: Sync dirty bits for system resets during precopy
Date: Tue, 28 Apr 2020 15:42:18 -0400 [thread overview]
Message-ID: <20200428194219.10963-4-peterx@redhat.com> (raw)
In-Reply-To: <20200428194219.10963-1-peterx@redhat.com>
System resets will also reset system memory layout. Although the memory layout
after the reset should probably the same as before the reset, we still need to
do frequent memory section removals and additions during the reset process.
Those operations could accidentally lose per-mem-section information like KVM
memslot dirty bitmaps.
Previously we keep those dirty bitmaps by sync it during memory removal.
However that's hard to make it right after all [1]. Instead, we sync dirty
pages before system reset if we know we're during a precopy migration. This
should solve the same problem explicitly.
[1] https://lore.kernel.org/qemu-devel/20200327150425.GJ422390@xz-x1/
Signed-off-by: Peter Xu <peterx@redhat.com>
---
softmmu/vl.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/softmmu/vl.c b/softmmu/vl.c
index 32c0047889..8f864fee43 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -1387,6 +1387,22 @@ void qemu_system_reset(ShutdownCause reason)
cpu_synchronize_all_states();
+ /*
+ * System reboot could reset memory layout. Although the final status of
+ * the memory layout should be the same as before the reset, the memory
+ * sections can still be removed and added back frequently due to the reset
+ * process. This could potentially drop dirty bits in track for those
+ * memory sections before the reset.
+ *
+ * Do a global dirty sync before the reset happens if we are during a
+ * precopy, so we don't lose the dirty bits during the memory shuffles.
+ */
+ if (migration_is_precopy()) {
+ WITH_RCU_READ_LOCK_GUARD() {
+ migration_bitmap_sync_precopy();
+ }
+ }
+
if (mc && mc->reset) {
mc->reset(current_machine);
} else {
--
2.24.1
next prev parent reply other threads:[~2020-04-28 19:47 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-28 19:42 [PATCH RFC 0/4] vl: Sync dirty bitmap when system resets Peter Xu
2020-04-28 19:42 ` [PATCH RFC 1/4] migration: Export migration_bitmap_sync_precopy() Peter Xu
2020-05-06 9:58 ` Dr. David Alan Gilbert
2020-04-28 19:42 ` [PATCH RFC 2/4] migration: Introduce migrate_is_precopy() Peter Xu
2020-05-06 10:05 ` Dr. David Alan Gilbert
2020-05-06 14:52 ` Peter Xu
2020-04-28 19:42 ` Peter Xu [this message]
2020-05-06 10:53 ` [PATCH RFC 3/4] vl: Sync dirty bits for system resets during precopy Dr. David Alan Gilbert
2020-05-06 15:38 ` Peter Xu
2020-04-28 19:42 ` [PATCH RFC 4/4] kvm: No need to sync dirty bitmap before memslot removal any more Peter Xu
2020-04-29 13:26 ` [PATCH RFC 0/4] vl: Sync dirty bitmap when system resets Dr. David Alan Gilbert
2020-04-29 14:32 ` Peter Xu
2020-05-02 21:04 ` Peter Xu
2020-05-23 22:49 ` Peter Xu
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=20200428194219.10963-4-peterx@redhat.com \
--to=peterx@redhat.com \
--cc=dgilbert@redhat.com \
--cc=kevin.tian@intel.com \
--cc=pbonzini@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).