mirror of
https://github.com/qemu/qemu.git
synced 2024-11-26 12:23:36 +08:00
migration: ensure htab_save_first completes after timeout
htab_save_first_pass could return without finishing its work due to timeout. The patch checks if another invocation of it is necessary and will call it in htab_save_complete if necessary. Signed-off-by: Jianjun Duan <duanj@linux.vnet.ibm.com> Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com> [removed overlong line] Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
fa48b4328c
commit
378bc21756
@ -1312,6 +1312,7 @@ static int htab_save_setup(QEMUFile *f, void *opaque)
|
|||||||
static void htab_save_first_pass(QEMUFile *f, sPAPRMachineState *spapr,
|
static void htab_save_first_pass(QEMUFile *f, sPAPRMachineState *spapr,
|
||||||
int64_t max_ns)
|
int64_t max_ns)
|
||||||
{
|
{
|
||||||
|
bool has_timeout = max_ns != -1;
|
||||||
int htabslots = HTAB_SIZE(spapr) / HASH_PTE_SIZE_64;
|
int htabslots = HTAB_SIZE(spapr) / HASH_PTE_SIZE_64;
|
||||||
int index = spapr->htab_save_index;
|
int index = spapr->htab_save_index;
|
||||||
int64_t starttime = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
|
int64_t starttime = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
|
||||||
@ -1345,7 +1346,8 @@ static void htab_save_first_pass(QEMUFile *f, sPAPRMachineState *spapr,
|
|||||||
qemu_put_buffer(f, HPTE(spapr->htab, chunkstart),
|
qemu_put_buffer(f, HPTE(spapr->htab, chunkstart),
|
||||||
HASH_PTE_SIZE_64 * n_valid);
|
HASH_PTE_SIZE_64 * n_valid);
|
||||||
|
|
||||||
if ((qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - starttime) > max_ns) {
|
if (has_timeout &&
|
||||||
|
(qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - starttime) > max_ns) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1498,6 +1500,9 @@ static int htab_save_complete(QEMUFile *f, void *opaque)
|
|||||||
}
|
}
|
||||||
close_htab_fd(spapr);
|
close_htab_fd(spapr);
|
||||||
} else {
|
} else {
|
||||||
|
if (spapr->htab_first_pass) {
|
||||||
|
htab_save_first_pass(f, spapr, -1);
|
||||||
|
}
|
||||||
htab_save_later_pass(f, spapr, -1);
|
htab_save_later_pass(f, spapr, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user