Files
Yaya48 cf256aa081 Import QEMU upstream snapshot d2e570c
Upstream: https://gitlab.com/qemu-project/qemu.git

Upstream-Commit: d2e570cc0f97b936902a5b1b86b73c0f5998b475
2026-08-31 02:15:30 +02:00

42 lines
1.2 KiB
C

/*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* multifd colo implementation
*
* Copyright (c) Lukas Straub <[email protected]>
*/
#include "qemu/osdep.h"
#include "multifd.h"
#include "multifd-colo.h"
#include "migration/colo.h"
#include "system/ramblock.h"
void multifd_colo_prepare_recv(MultiFDRecvParams *p)
{
/*
* While we're still in precopy state (not yet in colo state), we copy
* received pages to both guest and cache. No need to set dirty bits,
* since guest and cache memory are in sync.
*/
if (migration_incoming_in_colo_state()) {
colo_record_bitmap(p->block, p->normal, p->normal_num);
colo_record_bitmap(p->block, p->zero, p->zero_num);
}
}
void multifd_colo_process_recv(MultiFDRecvParams *p)
{
if (!migration_incoming_in_colo_state()) {
for (int i = 0; i < p->normal_num; i++) {
void *guest = p->block->host + p->normal[i];
void *cache = p->host + p->normal[i];
memcpy(guest, cache, multifd_ram_page_size());
}
for (int i = 0; i < p->zero_num; i++) {
void *guest = p->block->host + p->zero[i];
memset(guest, 0, multifd_ram_page_size());
}
}
}