|
@@ -3506,12 +3506,13 @@ static void ram_state_pending_estimate(void *opaque, uint64_t *must_precopy,
|
|
static void ram_state_pending_exact(void *opaque, uint64_t *must_precopy,
|
|
static void ram_state_pending_exact(void *opaque, uint64_t *must_precopy,
|
|
uint64_t *can_postcopy)
|
|
uint64_t *can_postcopy)
|
|
{
|
|
{
|
|
|
|
+ MigrationState *s = migrate_get_current();
|
|
RAMState **temp = opaque;
|
|
RAMState **temp = opaque;
|
|
RAMState *rs = *temp;
|
|
RAMState *rs = *temp;
|
|
|
|
|
|
uint64_t remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
|
|
uint64_t remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
|
|
|
|
|
|
- if (!migration_in_postcopy()) {
|
|
|
|
|
|
+ if (!migration_in_postcopy() && remaining_size < s->threshold_size) {
|
|
qemu_mutex_lock_iothread();
|
|
qemu_mutex_lock_iothread();
|
|
WITH_RCU_READ_LOCK_GUARD() {
|
|
WITH_RCU_READ_LOCK_GUARD() {
|
|
migration_bitmap_sync_precopy(rs);
|
|
migration_bitmap_sync_precopy(rs);
|