On Thu, 4 Jan 2024 22:57:56 +0530 madhuker.myt...@oracle.com wrote: > adhuker Mythri <madhuker.myt...@oracle.com> > > When multiple queues configured, internally RSS will be enabled and thus TAP > BPF RSS byte-code will be loaded on to the Kernel using BPF system calls. > > Here, the problem is loading the existing BPF byte-code to the Kernel-5.15 > and above versions throws errors, i.e: Kernel BPF verifier not accepted this > existing BPF byte-code and system calls return error code "-7" as follows: > ------------------------ > rss_add_actions(): Failed to load BPF section l3_l4 (7): Argument list too > long > ------------------------ > > RCA: These errors started coming after from the Kernel-5.15 version, in > which lots of new BPF verification restrictions were added for safe execution > of byte-code on to the Kernel, due to which existing BPF program verification > does not pass. > Here are the major BPF verifier restrictions observed: > 1) Need to use new BPF maps structure. > 2) Kernel SKB data pointer access not allowed. > 3) Undefined loops were not allowed(which are bounded by a variable value). > 4) unreachable instructions(like: undefined array access). > > After addressing all these Kernel BPF verifier restrictions able to load the > BPF byte-code onto the Kernel successfully. > > Note: This new BPF changes supports from Kernel:4.10 version. > > Bugzilla Id: 1329 > > Signed-off-by: Madhuker Mythri <madhuker.myt...@oracle.com>
I tried this version on Debian testing which has: kernel 6.5.0-5-amd64 clang 16.0.6 If build and run with the pre-compiled BPF then it will load the example flow (see https://doc.dpdk.org/guides/nics/tap.html) But if I recompile the bpf program by using make in the tap/bpf directory, then the resulting bpf instructions will not make it past verifier. With modified tap_bpf_api can get the log message as: testpmd> flow create 0 priority 4 ingress pattern eth dst is 0a:0b:0c:0d:0e:0f / ipv4 / tcp / end actions rss queues 0 1 2 3 end / end rss_add_actions(): Failed to load BPF section l3_l4 (13): func#0 @0 0: R1=ctx(off=0,imm=0) R10=fp0 0: (bf) r6 = r1 ; R1=ctx(off=0,imm=0) R6_w=ctx(off=0,imm=0) 1: (18) r1 = 0x300 ; R1_w=768 3: (63) *(u32 *)(r10 -84) = r1 ; R1_w=768 R10=fp0 fp-88=mmmm???? 4: (bf) r2 = r10 ; R2_w=fp0 R10=fp0 5: (07) r2 += -84 ; R2_w=fp-84 6: (18) r1 = 0xfd ; R1_w=253 8: (85) call bpf_map_lookup_elem#1 R1 type=scalar expected=map_ptr processed 7 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0 port_flow_complain(): Caught PMD error type 16 (specific action): cause: 0x7ffcef37e678, action not supported: Operation not supported