diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0011-bpf-x64-increase-number-of-passes.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.9.21/0011-bpf-x64-increase-number-of-passes.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0011-bpf-x64-increase-number-of-passes.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0011-bpf-x64-increase-number-of-passes.patch new file mode 100644 index 00000000..bf2556b8 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.9.21/0011-bpf-x64-increase-number-of-passes.patch @@ -0,0 +1,56 @@ +From 1909a1513f6d5b9170e40c4fee98bf2cd57b5b55 Mon Sep 17 00:00:00 2001 +From: Daniel Borkmann <daniel@iogearbox.net> +Date: Wed, 7 Mar 2018 22:10:01 +0100 +Subject: [PATCH 11/93] bpf, x64: increase number of passes + +commit 6007b080d2e2adb7af22bf29165f0594ea12b34c upstream. + +In Cilium some of the main programs we run today are hitting 9 passes +on x64's JIT compiler, and we've had cases already where we surpassed +the limit where the JIT then punts the program to the interpreter +instead, leading to insertion failures due to CONFIG_BPF_JIT_ALWAYS_ON +or insertion failures due to the prog array owner being JITed but the +program to insert not (both must have the same JITed/non-JITed property). + +One concrete case the program image shrunk from 12,767 bytes down to +10,288 bytes where the image converged after 16 steps. I've measured +that this took 340us in the JIT until it converges on my i7-6600U. Thus, +increase the original limit we had from day one where the JIT covered +cBPF only back then before we run into the case (as similar with the +complexity limit) where we trip over this and hit program rejections. +Also add a cond_resched() into the compilation loop, the JIT process +runs without any locks and may sleep anyway. + +Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> +Acked-by: Alexei Starovoitov <ast@kernel.org> +Reviewed-by: Eric Dumazet <edumazet@google.com> +Signed-off-by: Alexei Starovoitov <ast@kernel.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> +--- + arch/x86/net/bpf_jit_comp.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c +index 1f7ed2e..cd97645 100644 +--- a/arch/x86/net/bpf_jit_comp.c ++++ b/arch/x86/net/bpf_jit_comp.c +@@ -1135,7 +1135,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog) + * may converge on the last pass. In such case do one more + * pass to emit the final image + */ +- for (pass = 0; pass < 10 || image; pass++) { ++ for (pass = 0; pass < 20 || image; pass++) { + proglen = do_jit(prog, addrs, image, oldproglen, &ctx); + if (proglen <= 0) { + image = NULL; +@@ -1162,6 +1162,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog) + } + } + oldproglen = proglen; ++ cond_resched(); + } + + if (bpf_jit_enable > 1) +-- +2.7.4 + |