From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: j@getutm.app, qemu-devel@nongnu.org
Subject: Re: [PATCH v3 15/41] accel/tcg: Support split-wx for linux with memfd
Date: Tue, 10 Nov 2020 17:03:14 +0000 [thread overview]
Message-ID: <875z6d87ql.fsf@linaro.org> (raw)
In-Reply-To: <20201106032921.600200-16-richard.henderson@linaro.org>
Richard Henderson <richard.henderson@linaro.org> writes:
> We cannot use a real temp file, because we would need to find
> a filesystem that does not have noexec enabled. However, a
> memfd is not associated with any filesystem.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
It looks like this breaks --enable-tcg-interpreter:
FAILED: libqemu-ppc64-softmmu.fa.p/accel_tcg_translate-all.c.o
cc -Ilibqemu-ppc64-softmmu.fa.p -I. -I../.. -Itarget/ppc -I../../target/ppc -I../../dtc/libfdt -I../../capstone/include/capstone -Iqapi -Itrace -Iui -Iui/shader -I/usr/include/spice-server -I/usr/include/spice-1 -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -fdiagnostics-color=auto -pipe -Wall -Winvalid-pch -Werror -std=gnu99 -O2 -g -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wold-style-declaration -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-psabi -fstack-protector-strong -DLEGACY_RDMA_REG_MR -isystem /home/alex/lsrc/qemu.git/linux-headers -isystem linux-headers -iquote /home/alex/lsrc/qemu.git/tcg/tci -iquote . -iquote /home/alex/lsrc/qemu.git -iquote /home/alex/lsrc/qemu.git/accel/tcg -iquote /home/alex/lsrc/qemu.git/include -iquote /home/alex/lsrc/qemu.git/disas/libvixl -pthread -fPIC -isystem../../linux-headers -isystemlinux-headers -DNEED_CPU_H '-DCONFIG_TARGET="ppc64-softmmu-config-target.h"' '-DCONFIG_DEVICES="ppc64-softmmu-config-devices.h"' -MD -MQ libqemu-ppc64-softmmu.fa.p/accel_tcg_translate-all.c.o -MF libqemu-ppc64-softmmu.fa.p/accel_tcg_translate-all.c.o.d -o libqemu-ppc64-softmmu.fa.p/accel_tcg_translate-all.c.o -c ../../accel/tcg/translate-all.c
../../accel/tcg/translate-all.c:1138:13: error: ‘alloc_code_gen_buffer_splitwx_memfd’ defined but not used [-Werror=unused-function]
static bool alloc_code_gen_buffer_splitwx_memfd(size_t size, Error **errp)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
> ---
> accel/tcg/translate-all.c | 84 +++++++++++++++++++++++++++++++++++----
> 1 file changed, 76 insertions(+), 8 deletions(-)
>
> diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
> index a29cb4a42e..1931e65365 100644
> --- a/accel/tcg/translate-all.c
> +++ b/accel/tcg/translate-all.c
> @@ -1078,17 +1078,11 @@ static bool alloc_code_gen_buffer(size_t size, int splitwx, Error **errp)
> return true;
> }
> #else
> -static bool alloc_code_gen_buffer(size_t size, int splitwx, Error **errp)
> +static bool alloc_code_gen_buffer_anon(size_t size, int prot,
> + int flags, Error **errp)
> {
> - int prot = PROT_WRITE | PROT_READ | PROT_EXEC;
> - int flags = MAP_PRIVATE | MAP_ANONYMOUS;
> void *buf;
>
> - if (splitwx > 0) {
> - error_setg(errp, "jit split-wx not supported");
> - return false;
> - }
> -
> buf = mmap(NULL, size, prot, flags, -1, 0);
> if (buf == MAP_FAILED) {
> error_setg_errno(errp, errno,
> @@ -1137,6 +1131,80 @@ static bool alloc_code_gen_buffer(size_t size, int splitwx, Error **errp)
> tcg_ctx->code_gen_buffer = buf;
> return true;
> }
> +
> +#ifdef CONFIG_POSIX
> +#include "qemu/memfd.h"
> +
> +static bool alloc_code_gen_buffer_splitwx_memfd(size_t size, Error **errp)
> +{
> + void *buf_rw, *buf_rx;
> + int fd = -1;
> +
> + buf_rw = qemu_memfd_alloc("tcg-jit", size, 0, &fd, errp);
> + if (buf_rw == NULL) {
> + return false;
> + }
> +
> + buf_rx = mmap(NULL, size, PROT_READ | PROT_EXEC, MAP_SHARED, fd, 0);
> + if (buf_rx == MAP_FAILED) {
> + error_setg_errno(errp, errno,
> + "failed to map shared memory for execute");
> + munmap(buf_rw, size);
> + close(fd);
> + return false;
> + }
> + close(fd);
> +
> + tcg_ctx->code_gen_buffer = buf_rw;
> + tcg_ctx->code_gen_buffer_size = size;
> + 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 true;
> +}
> +#endif /* CONFIG_POSIX */
> +
> +static bool alloc_code_gen_buffer_splitwx(size_t size, Error **errp)
> +{
> + if (TCG_TARGET_SUPPORT_MIRROR) {
> +#ifdef CONFIG_POSIX
> + return alloc_code_gen_buffer_splitwx_memfd(size, errp);
> +#endif
> + }
> + error_setg(errp, "jit split-wx not supported");
> + return false;
> +}
> +
> +static bool alloc_code_gen_buffer(size_t size, int splitwx, Error **errp)
> +{
> + ERRP_GUARD();
> + int prot, flags;
> +
> + if (splitwx) {
> + if (alloc_code_gen_buffer_splitwx(size, errp)) {
> + return true;
> + }
> + /*
> + * If splitwx force-on (1), fail;
> + * if splitwx default-on (-1), fall through to splitwx off.
> + */
> + if (splitwx > 0) {
> + return false;
> + }
> + error_free_or_abort(errp);
> + }
> +
> + prot = PROT_READ | PROT_WRITE | PROT_EXEC;
> + flags = MAP_PRIVATE | MAP_ANONYMOUS;
> +#ifdef CONFIG_TCG_INTERPRETER
> + /* The tcg interpreter does not need execute permission. */
> + prot = PROT_READ | PROT_WRITE;
> +#endif
> +
> + return alloc_code_gen_buffer_anon(size, prot, flags, errp);
> +}
> #endif /* USE_STATIC_CODE_GEN_BUFFER, WIN32, POSIX */
>
> static bool tb_cmp(const void *ap, const void *bp)
--
Alex Bennée
next prev parent reply other threads:[~2020-11-10 17:10 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-06 3:28 [PATCH v3 00/41] Mirror map JIT memory for TCG Richard Henderson
2020-11-06 3:28 ` [PATCH v3 01/41] tcg: Enhance flush_icache_range with separate data pointer Richard Henderson
2020-11-06 20:31 ` Alex Bennée
2020-11-06 22:51 ` Richard Henderson
2020-11-07 21:08 ` Alex Bennée
2020-11-06 3:28 ` [PATCH v3 02/41] tcg: Move tcg prologue pointer out of TCGContext Richard Henderson
2020-11-07 21:10 ` Alex Bennée
2020-11-06 3:28 ` [PATCH v3 03/41] tcg: Move tcg epilogue " Richard Henderson
2020-11-06 3:28 ` [PATCH v3 04/41] tcg: Add in_code_gen_buffer Richard Henderson
2020-11-06 3:28 ` [PATCH v3 05/41] tcg: Introduce tcg_splitwx_to_{rx,rw} Richard Henderson
2020-11-06 3:28 ` [PATCH v3 06/41] tcg: Adjust TCGLabel for const Richard Henderson
2020-11-06 3:28 ` [PATCH v3 07/41] tcg: Adjust tcg_out_call " Richard Henderson
2020-11-06 3:28 ` [PATCH v3 08/41] tcg: Adjust tcg_out_label " Richard Henderson
2020-11-06 3:28 ` [PATCH v3 09/41] tcg: Adjust tcg_register_jit " Richard Henderson
2020-11-06 3:28 ` [PATCH v3 10/41] tcg: Adjust tb_target_set_jmp_target for split-wx Richard Henderson
2020-11-06 3:28 ` [PATCH v3 11/41] tcg: Make DisasContextBase.tb const Richard Henderson
2020-11-06 3:28 ` [PATCH v3 12/41] tcg: Make tb arg to synchronize_from_tb const Richard Henderson
2020-11-06 3:28 ` [PATCH v3 13/41] tcg: Use Error with alloc_code_gen_buffer Richard Henderson
2020-11-06 3:28 ` [PATCH v3 14/41] tcg: Add --accel tcg,split-wx property Richard Henderson
2020-11-06 3:28 ` [PATCH v3 15/41] accel/tcg: Support split-wx for linux with memfd Richard Henderson
2020-11-10 17:03 ` Alex Bennée [this message]
2020-11-10 17:26 ` Richard Henderson
2020-11-06 3:28 ` [PATCH v3 16/41] accel/tcg: Support split-wx for darwin/iOS with vm_remap Richard Henderson
2020-11-08 3:37 ` Joelle van Dyne
2020-11-10 17:37 ` Alex Bennée
2020-11-10 17:57 ` Joelle van Dyne
2020-11-06 3:28 ` [PATCH v3 17/41] tcg: Return the TB pointer from the rx region from exit_tb Richard Henderson
2020-11-06 3:28 ` [PATCH v3 18/41] tcg/i386: Support split-wx code generation Richard Henderson
2020-11-06 3:28 ` [PATCH v3 19/41] tcg/aarch64: Use B not BL for tcg_out_goto_long Richard Henderson
2020-11-06 3:29 ` [PATCH v3 20/41] tcg/aarch64: Implement flush_idcache_range manually Richard Henderson
2020-11-06 3:29 ` [PATCH v3 21/41] tcg/aarch64: Support split-wx code generation Richard Henderson
2020-11-06 3:29 ` [PATCH v3 22/41] disas: Push const down through host disasassembly Richard Henderson
2020-11-06 3:29 ` [PATCH v3 23/41] tcg/tci: Push const down through bytecode reading Richard Henderson
2020-11-06 3:29 ` [PATCH v3 24/41] tcg: Introduce tcg_tbrel_diff Richard Henderson
2020-11-06 3:29 ` [PATCH v3 25/41] tcg/ppc: Use tcg_tbrel_diff Richard Henderson
2020-11-06 3:29 ` [PATCH v3 26/41] tcg/ppc: Use tcg_out_mem_long to reset TCG_REG_TB Richard Henderson
2020-11-06 3:29 ` [PATCH v3 27/41] tcg/ppc: Support split-wx code generation Richard Henderson
2020-11-06 3:29 ` [PATCH v3 28/41] tcg/sparc: Use tcg_tbrel_diff Richard Henderson
2020-11-06 3:29 ` [PATCH v3 29/41] tcg/sparc: Support split-wx code generation Richard Henderson
2020-11-06 3:29 ` [PATCH v3 30/41] tcg/s390: Use tcg_tbrel_diff Richard Henderson
2020-11-06 3:29 ` [PATCH v3 31/41] tcg/s390: Support split-wx code generation Richard Henderson
2020-11-06 3:29 ` [PATCH v3 32/41] tcg/riscv: Fix branch range checks Richard Henderson
2020-11-06 3:29 ` [PATCH v3 33/41] tcg/riscv: Remove branch-over-branch fallback Richard Henderson
2020-11-06 3:29 ` [PATCH v3 34/41] tcg/riscv: Support split-wx code generation Richard Henderson
2020-11-06 3:29 ` [PATCH v3 35/41] accel/tcg: Add mips support to alloc_code_gen_buffer_splitwx_memfd Richard Henderson
2020-11-06 3:29 ` [PATCH v3 36/41] tcg/mips: Do not assert on relocation overflow Richard Henderson
2020-11-06 3:29 ` [PATCH v3 37/41] tcg/mips: Support split-wx code generation Richard Henderson
2020-11-06 3:29 ` [PATCH v3 38/41] tcg/arm: " Richard Henderson
2020-11-06 3:29 ` [PATCH v3 39/41] tcg: Remove TCG_TARGET_SUPPORT_MIRROR Richard Henderson
2020-11-06 3:29 ` [PATCH v3 40/41] tcg: Constify tcg_code_gen_epilogue Richard Henderson
2020-11-06 3:29 ` [PATCH v3 41/41] tcg: Constify TCGLabelQemuLdst.raddr Richard Henderson
2020-11-06 4:00 ` [PATCH v3 00/41] Mirror map JIT memory for TCG no-reply
2020-11-08 3:38 ` Joelle van Dyne
2020-11-17 3:47 ` Joelle van Dyne
2020-11-17 15:20 ` Richard Henderson
2020-11-17 15:31 ` Joelle van Dyne
2020-11-17 17:26 ` Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=875z6d87ql.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=j@getutm.app \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).