aboutsummaryrefslogtreecommitdiff
path: root/migration
diff options
context:
space:
mode:
authorPeter Xu <peterx@redhat.com>2024-01-17 15:58:47 +0800
committerPeter Xu <peterx@redhat.com>2024-01-29 11:02:12 +0800
commitb0504edd401dc77ddf09070bb0b22ad7573b4c77 (patch)
tree8da119b4e2ef9d3cd5effcc04845c948f33ff14b /migration
parenta8629e0c2f6778a96f161f15215060cfab5ef2a4 (diff)
downloadqemu-b0504edd401dc77ddf09070bb0b22ad7573b4c77.zip
qemu-b0504edd401dc77ddf09070bb0b22ad7573b4c77.tar.gz
qemu-b0504edd401dc77ddf09070bb0b22ad7573b4c77.tar.bz2
migration: Drop unnecessary check in ram's pending_exact()
When the migration frameworks fetches the exact pending sizes, it means this check: remaining_size < s->threshold_size Must have been done already, actually at migration_iteration_run(): if (must_precopy <= s->threshold_size) { qemu_savevm_state_pending_exact(&must_precopy, &can_postcopy); That should be after one round of ram_state_pending_estimate(). It makes the 2nd check meaningless and can be dropped. To say it in another way, when reaching ->state_pending_exact(), we unconditionally sync dirty bits for precopy. Then we can drop migrate_get_current() there too. Reviewed-by: Fabiano Rosas <farosas@suse.de> Link: https://lore.kernel.org/r/20240117075848.139045-3-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com>
Diffstat (limited to 'migration')
-rw-r--r--migration/ram.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/migration/ram.c b/migration/ram.c
index c0cdccc..d5b7cd5 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -3213,21 +3213,20 @@ static void ram_state_pending_estimate(void *opaque, uint64_t *must_precopy,
static void ram_state_pending_exact(void *opaque, uint64_t *must_precopy,
uint64_t *can_postcopy)
{
- MigrationState *s = migrate_get_current();
RAMState **temp = opaque;
RAMState *rs = *temp;
+ uint64_t remaining_size;
- uint64_t remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
-
- if (!migration_in_postcopy() && remaining_size < s->threshold_size) {
+ if (!migration_in_postcopy()) {
bql_lock();
WITH_RCU_READ_LOCK_GUARD() {
migration_bitmap_sync_precopy(rs, false);
}
bql_unlock();
- remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
}
+ remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
+
if (migrate_postcopy_ram()) {
/* We can do postcopy, and all the data is postcopiable */
*can_postcopy += remaining_size;