Message ID | 1443515898-3594-48-git-send-email-dgilbert@redhat.com |
---|---|
State | New |
Headers | show |
"Dr. David Alan Gilbert (git)" <dgilbert@redhat.com> wrote: > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> > > RAMBlocks that are not a multiple of host pages in length > cause problems for postcopy (I've seen an ACPI table on aarch64 > be 5k in length - i.e. 5x target-page), so round RAMBlock sizes > up to a host-page. > > This potentially breaks migration compatibility due to changes > in RAMBlock sizes; however: > 1) x86 and s390 I think always have host=target page size > 2) When I've tried on Power the block sizes already seem aligned. > 3) I don't think there's anything else that maintains per-version > machine-types for compatibility. > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> We had this problem on the past when we moved the machines to be Megabyte rounded size, some machines where not. But in this particular case, I will clame that having a size that is _not_ of the size of the host pages is just asking for trouble.
diff --git a/exec.c b/exec.c index d7c50e3..f746409 100644 --- a/exec.c +++ b/exec.c @@ -1425,7 +1425,7 @@ int qemu_ram_resize(ram_addr_t base, ram_addr_t newsize, Error **errp) assert(block); - newsize = TARGET_PAGE_ALIGN(newsize); + newsize = HOST_PAGE_ALIGN(newsize); if (block->used_length == newsize) { return 0; @@ -1569,7 +1569,7 @@ ram_addr_t qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr, return -1; } - size = TARGET_PAGE_ALIGN(size); + size = HOST_PAGE_ALIGN(size); new_block = g_malloc0(sizeof(*new_block)); new_block->mr = mr; new_block->used_length = size; @@ -1604,8 +1604,8 @@ ram_addr_t qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size, ram_addr_t addr; Error *local_err = NULL; - size = TARGET_PAGE_ALIGN(size); - max_size = TARGET_PAGE_ALIGN(max_size); + size = HOST_PAGE_ALIGN(size); + max_size = HOST_PAGE_ALIGN(max_size); new_block = g_malloc0(sizeof(*new_block)); new_block->mr = mr; new_block->resized = resized;