Message ID | 20191216091343.23260-1-bjorn.topel@gmail.com (mailing list archive) |
---|---|
Headers | show |
Series | riscv: BPF JIT fix, optimizations and far jumps support | expand |
On Mon, Dec 16, 2019 at 10:13:34AM +0100, Björn Töpel wrote: > > This series contain one non-critical fix, support for far jumps. and > some optimizations for the BPF JIT. > > Previously, the JIT only supported 12b branch targets for conditional > branches, and 21b for unconditional branches. Starting with this > series, 32b branching is supported. > > As part of supporting far jumps, branch relaxation was introduced. The > idea is to start with a pessimistic jump (e.g. auipc/jalr) and for > each pass the JIT will have an opportunity to pick a better > instruction (e.g. jal) and shrink the image. Instead of two passes, > the JIT requires more passes. It typically converges after 3 passes. > > The optimizations mentioned in the subject are for calls and tail > calls. In the tail call generation we can save one instruction by > using the offset in jalr. Calls are optimized by doing (auipc)/jal(r) > relative jumps instead of loading the entire absolute address and > doing jalr. This required that the JIT image allocator was made RISC-V > specific, so we can ensure that the JIT image and the kernel text are > in range (32b). > > The last two patches of the series is not critical to the series, but > are two UAPI build issues for BPF events. A closer look from the > RV-folks would be much appreciated. > > The test_bpf.ko module, selftests/bpf/test_verifier and > selftests/seccomp/seccomp_bpf pass all tests. > > RISC-V is still missing proper kprobe and tracepoint support, so a lot > of BPF selftests cannot be run. Applied, thanks!