All of lore.kernel.org
 help / color / mirror / Atom feed
From: Palmer Dabbelt <palmer@sifive.com>
To: bjorn.topel@gmail.com
Cc: linux-riscv@lists.infradead.org, bjorn.topel@gmail.com,
	daniel@iogearbox.net, davidlee@sifive.com,
	netdev@vger.kernel.org
Subject: Re: [RFC PATCH 0/3] RV64G eBPF JIT
Date: Tue, 29 Jan 2019 18:02:47 -0800 (PST)	[thread overview]
Message-ID: <mhng-7bbd5b99-85c7-4071-9427-11442b2a0f91@palmer-si-x1c4> (raw)
In-Reply-To: <20190115083518.10149-1-bjorn.topel@gmail.com>

On Tue, 15 Jan 2019 00:35:15 PST (-0800), bjorn.topel@gmail.com wrote:
> Hi!
>
> I've been hacking on a RV64G eBPF JIT compiler, and would like some
> feedback.
>
> Codewise, it needs some refactoring. Currently there's a bit too much
> copy-and-paste going on, and I know some places where I could optimize
> the code generation a bit (mostly BPF_K type of instructions, dealing
> with immediates).
>
> From a features perspective, two things are missing:
>
> * tail calls
> * "far-branches", i.e. conditional branches that reach beyond 13b.
>
> The test_bpf.ko (only tested on 4.20!) passes all tests.
>
> I've done all the tests on QEMU (version 3.1.50), so no real hardware.
>
> Some questions/observations:
>
> * I've added "HAVE_EFFICIENT_UNALIGNED_ACCESS" to
>   arch/riscv/Kconfig. Is this assumption correct?
>
> * emit_imm() just relies on lui, adds and shifts. No fancy xori cost
>   optimizations like GCC does.
>
> * Suggestions on how to implement the tail call, given that the
>   prologue/epilogue has variable size. I will dig into the details of
>   mips/arm64/x86. :-)
>
> Next steps (prior patch proper) is cleaning up the code, add tail
> calls, and making sure that bpftool disassembly works correctly.
>
> All input are welcome. This is my first RISC-V hack, so I sure there
> are a lot things to improve!
>
>
> Thanks,
> Björn
>
>
> Björn Töpel (3):
>   riscv: set HAVE_EFFICIENT_UNALIGNED_ACCESS
>   riscv: add build infra for JIT compiler
>   bpf, riscv: added eBPF JIT for RV64G
>
>  arch/riscv/Kconfig            |    2 +
>  arch/riscv/Makefile           |    4 +
>  arch/riscv/net/Makefile       |    5 +
>  arch/riscv/net/bpf_jit_comp.c | 1612 +++++++++++++++++++++++++++++++++
>  4 files changed, 1623 insertions(+)
>  create mode 100644 arch/riscv/net/Makefile
>  create mode 100644 arch/riscv/net/bpf_jit_comp.c

Thanks for doing this.  I saw a few reviews go by and I'm behind on email, so 
I'm going to drop this until a v2.

WARNING: multiple messages have this Message-ID (diff)
From: Palmer Dabbelt <palmer@sifive.com>
To: bjorn.topel@gmail.com
Cc: bjorn.topel@gmail.com, linux-riscv@lists.infradead.org,
	davidlee@sifive.com, daniel@iogearbox.net,
	netdev@vger.kernel.org
Subject: Re: [RFC PATCH 0/3] RV64G eBPF JIT
Date: Tue, 29 Jan 2019 18:02:47 -0800 (PST)	[thread overview]
Message-ID: <mhng-7bbd5b99-85c7-4071-9427-11442b2a0f91@palmer-si-x1c4> (raw)
In-Reply-To: <20190115083518.10149-1-bjorn.topel@gmail.com>

On Tue, 15 Jan 2019 00:35:15 PST (-0800), bjorn.topel@gmail.com wrote:
> Hi!
>
> I've been hacking on a RV64G eBPF JIT compiler, and would like some
> feedback.
>
> Codewise, it needs some refactoring. Currently there's a bit too much
> copy-and-paste going on, and I know some places where I could optimize
> the code generation a bit (mostly BPF_K type of instructions, dealing
> with immediates).
>
> From a features perspective, two things are missing:
>
> * tail calls
> * "far-branches", i.e. conditional branches that reach beyond 13b.
>
> The test_bpf.ko (only tested on 4.20!) passes all tests.
>
> I've done all the tests on QEMU (version 3.1.50), so no real hardware.
>
> Some questions/observations:
>
> * I've added "HAVE_EFFICIENT_UNALIGNED_ACCESS" to
>   arch/riscv/Kconfig. Is this assumption correct?
>
> * emit_imm() just relies on lui, adds and shifts. No fancy xori cost
>   optimizations like GCC does.
>
> * Suggestions on how to implement the tail call, given that the
>   prologue/epilogue has variable size. I will dig into the details of
>   mips/arm64/x86. :-)
>
> Next steps (prior patch proper) is cleaning up the code, add tail
> calls, and making sure that bpftool disassembly works correctly.
>
> All input are welcome. This is my first RISC-V hack, so I sure there
> are a lot things to improve!
>
>
> Thanks,
> Björn
>
>
> Björn Töpel (3):
>   riscv: set HAVE_EFFICIENT_UNALIGNED_ACCESS
>   riscv: add build infra for JIT compiler
>   bpf, riscv: added eBPF JIT for RV64G
>
>  arch/riscv/Kconfig            |    2 +
>  arch/riscv/Makefile           |    4 +
>  arch/riscv/net/Makefile       |    5 +
>  arch/riscv/net/bpf_jit_comp.c | 1612 +++++++++++++++++++++++++++++++++
>  4 files changed, 1623 insertions(+)
>  create mode 100644 arch/riscv/net/Makefile
>  create mode 100644 arch/riscv/net/bpf_jit_comp.c

Thanks for doing this.  I saw a few reviews go by and I'm behind on email, so 
I'm going to drop this until a v2.

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  parent reply	other threads:[~2019-01-30  2:02 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-15  8:35 [RFC PATCH 0/3] RV64G eBPF JIT Björn Töpel
2019-01-15  8:35 ` Björn Töpel
2019-01-15  8:35 ` Björn Töpel
2019-01-15  8:35 ` [RFC PATCH 1/3] riscv: set HAVE_EFFICIENT_UNALIGNED_ACCESS Björn Töpel
2019-01-15  8:35   ` Björn Töpel
2019-01-15 15:39   ` Christoph Hellwig
2019-01-15 15:39     ` Christoph Hellwig
2019-01-15 16:06     ` Björn Töpel
2019-01-15 16:06       ` Björn Töpel
2019-01-25 20:21       ` Palmer Dabbelt
2019-01-25 20:21         ` Palmer Dabbelt
2019-01-26  1:33         ` Jim Wilson
2019-01-26  1:33           ` Jim Wilson
2019-01-29  2:43           ` Palmer Dabbelt
2019-01-29  2:43             ` Palmer Dabbelt
2019-01-15  8:35 ` [RFC PATCH 2/3] riscv: add build infra for JIT compiler Björn Töpel
2019-01-15  8:35   ` Björn Töpel
2019-01-15 15:43   ` Christoph Hellwig
2019-01-15 15:43     ` Christoph Hellwig
2019-01-15 16:09     ` Björn Töpel
2019-01-15 16:09       ` Björn Töpel
2019-01-15  8:35 ` [RFC PATCH 3/3] bpf, riscv: added eBPF JIT for RV64G Björn Töpel
2019-01-15  8:35   ` Björn Töpel
2019-01-15  8:35   ` Björn Töpel
2019-01-15 23:49   ` Daniel Borkmann
2019-01-15 23:49     ` Daniel Borkmann
2019-01-16  7:23     ` Björn Töpel
2019-01-16  7:23       ` Björn Töpel
2019-01-16 15:41       ` Daniel Borkmann
2019-01-16 15:41         ` Daniel Borkmann
2019-01-16 19:06         ` Björn Töpel
2019-01-16 19:06           ` Björn Töpel
2019-01-15 15:40 ` [RFC PATCH 0/3] RV64G eBPF JIT Christoph Hellwig
2019-01-15 15:40   ` Christoph Hellwig
2019-01-15 16:03   ` Björn Töpel
2019-01-15 16:03     ` Björn Töpel
2019-01-25 19:02     ` Palmer Dabbelt
2019-01-25 19:02       ` Palmer Dabbelt
2019-01-25 19:54 ` Paul Walmsley
2019-01-25 19:54   ` Paul Walmsley
2019-01-27 12:28   ` Björn Töpel
2019-01-27 12:28     ` Björn Töpel
2019-01-30  2:02 ` Palmer Dabbelt [this message]
2019-01-30  2:02   ` Palmer Dabbelt

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=mhng-7bbd5b99-85c7-4071-9427-11442b2a0f91@palmer-si-x1c4 \
    --to=palmer@sifive.com \
    --cc=bjorn.topel@gmail.com \
    --cc=daniel@iogearbox.net \
    --cc=davidlee@sifive.com \
    --cc=linux-riscv@lists.infradead.org \
    --cc=netdev@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.