Factor all settings out into qemu_ram_apply_settings(). For memory_try_enable_merging(), the important bit is that it won't be called with XEN - which is now still the case as new_block->host will remain NULL.
Reviewed-by: Richard Henderson <richard.hender...@linaro.org> Reviewed-by: Peter Xu <pet...@redhat.com> Cc: Richard Henderson <r...@twiddle.net> Cc: Paolo Bonzini <pbonz...@redhat.com> Cc: Igor Mammedov <imamm...@redhat.com> Signed-off-by: David Hildenbrand <da...@redhat.com> --- exec.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/exec.c b/exec.c index 3e980e14e0..13a0ca91fb 100644 --- a/exec.c +++ b/exec.c @@ -2069,6 +2069,21 @@ static int memory_try_enable_merging(void *addr, size_t len) return qemu_madvise(addr, len, QEMU_MADV_MERGEABLE); } +static void qemu_ram_apply_settings(void *host, size_t length) +{ + memory_try_enable_merging(host, length); + qemu_ram_setup_dump(host, length); + qemu_madvise(host, length, QEMU_MADV_HUGEPAGE); + /* + * MADV_DONTFORK is also needed by KVM in absence of synchronous MMU + * Configure it unless the machine is a qtest server, in which case KVM is + * not used and it may be forked (eg for fuzzing purposes). + */ + if (!qtest_enabled()) { + qemu_madvise(host, length, QEMU_MADV_DONTFORK); + } +} + /* * Resizing RAM while migrating can result in the migration being canceled. * Care has to be taken if the guest might have already detected the memory. @@ -2227,7 +2242,6 @@ static void ram_block_add(RAMBlock *new_block, Error **errp, bool shared) qemu_mutex_unlock_ramlist(); return; } - memory_try_enable_merging(new_block->host, new_block->max_length); } } @@ -2265,17 +2279,7 @@ static void ram_block_add(RAMBlock *new_block, Error **errp, bool shared) DIRTY_CLIENTS_ALL); if (new_block->host) { - qemu_ram_setup_dump(new_block->host, new_block->max_length); - qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_HUGEPAGE); - /* - * MADV_DONTFORK is also needed by KVM in absence of synchronous MMU - * Configure it unless the machine is a qtest server, in which case - * KVM is not used and it may be forked (eg for fuzzing purposes). - */ - if (!qtest_enabled()) { - qemu_madvise(new_block->host, new_block->max_length, - QEMU_MADV_DONTFORK); - } + qemu_ram_apply_settings(new_block->host, new_block->max_length); ram_block_notify_add(new_block->host, new_block->used_length, new_block->max_length); } -- 2.24.1