• Markos Chandras's avatar
    MIPS: BPF: Introduce BPF ASM helpers · 266a88e2
    Markos Chandras authored
    This commit introduces BPF ASM helpers for MIPS and MIPS64 kernels.
    The purpose of this patch is to twofold:
    
    1) We are now able to handle negative offsets instead of either
    falling back to the interpreter or to simply not do anything and
    bail out.
    
    2) Optimize reads from the packet header instead of calling the C
    helpers
    
    Because of this patch, we are now able to get rid of quite a bit of
    code in the JIT generation process by using MIPS optimized assembly
    code. The new assembly code makes the test_bpf testsuite happy with
    all 60 test passing successfully compared to the previous
    implementation where 2 tests were failing.
    Doing some basic analysis in the results between the old
    implementation and the new one we can obtain the following
    summary running current mainline on an ER8 board (+/- 30us delta is
    ignored to prevent noise from kernel scheduling or IRQ latencies):
    
    Summary: 22 tests are faster, 7 are slower and 47 saw no improvement
    
    with the most notable improvement being the tcpdump tests. The 7 tests
    that seem to be a bit slower is because they all follow the slow path
    (bpf_internal_load_pointer_neg_helper) which is meant to be slow so
    that's not a problem.
    Signed-off-by: default avatarMarkos Chandras <markos.chandras@imgtec.com>
    Cc: netdev@vger.kernel.org
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Alexei Starovoitov <ast@plumgrid.com>
    Cc: Daniel Borkmann <dborkman@redhat.com>
    Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-mips@linux-mips.org
    Cc: netdev@vger.kernel.org
    Patchwork: http://patchwork.linux-mips.org/patch/10530/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    266a88e2
bpf_jit.h 2.24 KB