mirror of https://github.com/xemu-project/xemu.git
migration: Fix migration crash when target psize larger than host
Commitd9e474ea56
overlooked the case where the target psize is even larger than the host psize. One example is Alpha has 8K page size and migration will start to crash the source QEMU when running Alpha migration on x86. Fix it by detecting that case and set host start/end just to cover the single page to be migrated. This will slightly optimize the common case where host psize equals to guest psize so we don't even need to do the roundups, but that's trivial. Cc: qemu-stable@nongnu.org Reported-by: Thomas Huth <thuth@redhat.com> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1456 Fixes:d9e474ea56
("migration: Teach PSS about host page") Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
6661b8c7fe
commit
301d7ffe5f
|
@ -2319,9 +2319,26 @@ static void pss_host_page_prepare(PageSearchStatus *pss)
|
|||
size_t guest_pfns = qemu_ram_pagesize(pss->block) >> TARGET_PAGE_BITS;
|
||||
|
||||
pss->host_page_sending = true;
|
||||
if (guest_pfns <= 1) {
|
||||
/*
|
||||
* This covers both when guest psize == host psize, or when guest
|
||||
* has larger psize than the host (guest_pfns==0).
|
||||
*
|
||||
* For the latter, we always send one whole guest page per
|
||||
* iteration of the host page (example: an Alpha VM on x86 host
|
||||
* will have guest psize 8K while host psize 4K).
|
||||
*/
|
||||
pss->host_page_start = pss->page;
|
||||
pss->host_page_end = pss->page + 1;
|
||||
} else {
|
||||
/*
|
||||
* The host page spans over multiple guest pages, we send them
|
||||
* within the same host page iteration.
|
||||
*/
|
||||
pss->host_page_start = ROUND_DOWN(pss->page, guest_pfns);
|
||||
pss->host_page_end = ROUND_UP(pss->page + 1, guest_pfns);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Whether the page pointed by PSS is within the host page being sent.
|
||||
|
|
Loading…
Reference in New Issue