No reason not to call qemu_ram_map() once we have the allocation and remove duplicate code.
Signed-off-by: Alex Williamson <alex.william...@redhat.com> --- exec.c | 37 ++++++++++--------------------------- 1 files changed, 10 insertions(+), 27 deletions(-) diff --git a/exec.c b/exec.c index 7b0e1c5..c60f9e7 100644 --- a/exec.c +++ b/exec.c @@ -2816,18 +2816,17 @@ ram_addr_t qemu_ram_map(ram_addr_t size, void *host) ram_addr_t qemu_ram_alloc(ram_addr_t size) { - RAMBlock *new_block; + void *host; size = TARGET_PAGE_ALIGN(size); - new_block = qemu_malloc(sizeof(*new_block)); if (mem_path) { #if defined (__linux__) && !defined(TARGET_S390X) - new_block->host = file_ram_alloc(size, mem_path); - if (!new_block->host) { - new_block->host = qemu_vmalloc(size); + host = file_ram_alloc(size, mem_path); + if (!host) { + host = qemu_vmalloc(size); #ifdef MADV_MERGEABLE - madvise(new_block->host, size, MADV_MERGEABLE); + madvise(host, size, MADV_MERGEABLE); #endif } #else @@ -2837,33 +2836,17 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size) } else { #if defined(TARGET_S390X) && defined(CONFIG_KVM) /* XXX S390 KVM requires the topmost vma of the RAM to be < 256GB */ - new_block->host = mmap((void*)0x1000000, size, - PROT_EXEC|PROT_READ|PROT_WRITE, - MAP_SHARED | MAP_ANONYMOUS, -1, 0); + host = mmap((void*)0x1000000, size, PROT_EXEC|PROT_READ|PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS, -1, 0); #else - new_block->host = qemu_vmalloc(size); + host = qemu_vmalloc(size); #endif #ifdef MADV_MERGEABLE - madvise(new_block->host, size, MADV_MERGEABLE); + madvise(host, size, MADV_MERGEABLE); #endif } - new_block->offset = last_ram_offset; - new_block->length = size; - - new_block->next = ram_blocks; - ram_blocks = new_block; - - phys_ram_dirty = qemu_realloc(phys_ram_dirty, - (last_ram_offset + size) >> TARGET_PAGE_BITS); - memset(phys_ram_dirty + (last_ram_offset >> TARGET_PAGE_BITS), - 0xff, size >> TARGET_PAGE_BITS); - - last_ram_offset += size; - if (kvm_enabled()) - kvm_setup_guest_memory(new_block->host, size); - - return new_block->offset; + return qemu_ram_map(size, host); } void qemu_ram_free(ram_addr_t addr)