On Thu, 13 Jun 2013, Markus Armbruster wrote: > Issues: > > * We try to obey -mem-path even though it can't work with Xen. > > * To implement -machine mem-merge, we call > memory_try_enable_merging(new_block->host, size). But with Xen, > new_block->host remains null. Oops. > > Fix by separating Xen allocation from normal allocation. > > Signed-off-by: Markus Armbruster <arm...@redhat.com>
Acked-by: Stefano Stabellini <stefano.stabell...@eu.citrix.com> > exec.c | 20 ++++++++++++-------- > 1 file changed, 12 insertions(+), 8 deletions(-) > > diff --git a/exec.c b/exec.c > index 5b8b40d..b424e12 100644 > --- a/exec.c > +++ b/exec.c > @@ -1081,6 +1081,12 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, > void *host, > if (host) { > new_block->host = host; > new_block->flags |= RAM_PREALLOC_MASK; > + } else if (xen_enabled()) { > + if (mem_path) { > + fprintf(stderr, "-mem-path not supported with Xen\n"); > + exit(1); > + } > + xen_ram_alloc(new_block->offset, size, mr); > } else { > if (mem_path) { > #if defined (__linux__) && !defined(TARGET_S390X) > @@ -1094,9 +1100,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, > void *host, > exit(1); > #endif > } else { > - if (xen_enabled()) { > - xen_ram_alloc(new_block->offset, size, mr); > - } else if (kvm_enabled()) { > + if (kvm_enabled()) { > /* some s390/kvm configurations have special constraints */ > new_block->host = kvm_ram_alloc(size); > } else { > @@ -1174,6 +1178,8 @@ void qemu_ram_free(ram_addr_t addr) > ram_list.version++; > if (block->flags & RAM_PREALLOC_MASK) { > ; > + } else if (xen_enabled()) { > + xen_invalidate_map_cache_entry(block->host); > } else if (mem_path) { > #if defined (__linux__) && !defined(TARGET_S390X) > if (block->fd) { > @@ -1186,11 +1192,7 @@ void qemu_ram_free(ram_addr_t addr) > abort(); > #endif > } else { > - if (xen_enabled()) { > - xen_invalidate_map_cache_entry(block->host); > - } else { > - qemu_anon_ram_free(block->host, block->length); > - } > + qemu_anon_ram_free(block->host, block->length); > } > g_free(block); > break; > @@ -1214,6 +1216,8 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length) > vaddr = block->host + offset; > if (block->flags & RAM_PREALLOC_MASK) { > ; > + } else if (xen_enabled()) { > + abort(); > } else { > flags = MAP_FIXED; > munmap(vaddr, length); > -- > 1.7.11.7 >