tcg: Sink qemu_madvise call to common code

Move the call out of the N versions of alloc_code_gen_buffer
and into tcg_region_init.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Luis Pires <luis.pires@eldorado.org.br>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2021-03-10 17:01:46 -06:00
parent 7be9ebcf92
commit cd9ea992e9

View File

@ -559,7 +559,6 @@ static int alloc_code_gen_buffer(size_t tb_size, int splitwx, Error **errp)
error_setg_errno(errp, errno, "mprotect of jit buffer"); error_setg_errno(errp, errno, "mprotect of jit buffer");
return false; return false;
} }
qemu_madvise(buf, size, QEMU_MADV_HUGEPAGE);
region.start_aligned = buf; region.start_aligned = buf;
region.total_size = size; region.total_size = size;
@ -635,9 +634,6 @@ static int alloc_code_gen_buffer_anon(size_t size, int prot,
} }
#endif #endif
/* Request large pages for the buffer. */
qemu_madvise(buf, size, QEMU_MADV_HUGEPAGE);
region.start_aligned = buf; region.start_aligned = buf;
region.total_size = size; region.total_size = size;
return prot; return prot;
@ -687,9 +683,6 @@ static bool alloc_code_gen_buffer_splitwx_memfd(size_t size, Error **errp)
region.total_size = size; region.total_size = size;
tcg_splitwx_diff = buf_rx - buf_rw; tcg_splitwx_diff = buf_rx - buf_rw;
/* Request large pages for the buffer and the splitwx. */
qemu_madvise(buf_rw, size, QEMU_MADV_HUGEPAGE);
qemu_madvise(buf_rx, size, QEMU_MADV_HUGEPAGE);
return PROT_READ | PROT_WRITE; return PROT_READ | PROT_WRITE;
fail_rx: fail_rx:
@ -857,6 +850,13 @@ void tcg_region_init(size_t tb_size, int splitwx, unsigned max_cpus)
splitwx, &error_fatal); splitwx, &error_fatal);
assert(have_prot >= 0); assert(have_prot >= 0);
/* Request large pages for the buffer and the splitwx. */
qemu_madvise(region.start_aligned, region.total_size, QEMU_MADV_HUGEPAGE);
if (tcg_splitwx_diff) {
qemu_madvise(region.start_aligned + tcg_splitwx_diff,
region.total_size, QEMU_MADV_HUGEPAGE);
}
/* /*
* Make region_size a multiple of page_size, using aligned as the start. * Make region_size a multiple of page_size, using aligned as the start.
* As a result of this we might end up with a few extra pages at the end of * As a result of this we might end up with a few extra pages at the end of