qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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


  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).