bpf, selftests: Use bpf_tail_call_static where appropriate
For those locations where we use an immediate tail call map index use the newly added bpf_tail_call_static() helper. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Martin KaFai Lau <kafai@fb.com> Link: https://lore.kernel.org/bpf/3cfb2b799a62d22c6e7ae5897c23940bdcc24cbc.1601477936.git.daniel@iogearbox.net
This commit is contained in:

committed by
Alexei Starovoitov

parent
0e9f6841f6
commit
faef26fa44
@@ -31,28 +31,30 @@ struct {
|
||||
#define PARSE_IP 3
|
||||
#define PARSE_IPV6 4
|
||||
|
||||
/* protocol dispatch routine.
|
||||
* It tail-calls next BPF program depending on eth proto
|
||||
* Note, we could have used:
|
||||
* bpf_tail_call(skb, &jmp_table, proto);
|
||||
* but it would need large prog_array
|
||||
/* Protocol dispatch routine. It tail-calls next BPF program depending
|
||||
* on eth proto. Note, we could have used ...
|
||||
*
|
||||
* bpf_tail_call(skb, &jmp_table, proto);
|
||||
*
|
||||
* ... but it would need large prog_array and cannot be optimised given
|
||||
* the map key is not static.
|
||||
*/
|
||||
static inline void parse_eth_proto(struct __sk_buff *skb, u32 proto)
|
||||
{
|
||||
switch (proto) {
|
||||
case ETH_P_8021Q:
|
||||
case ETH_P_8021AD:
|
||||
bpf_tail_call(skb, &jmp_table, PARSE_VLAN);
|
||||
bpf_tail_call_static(skb, &jmp_table, PARSE_VLAN);
|
||||
break;
|
||||
case ETH_P_MPLS_UC:
|
||||
case ETH_P_MPLS_MC:
|
||||
bpf_tail_call(skb, &jmp_table, PARSE_MPLS);
|
||||
bpf_tail_call_static(skb, &jmp_table, PARSE_MPLS);
|
||||
break;
|
||||
case ETH_P_IP:
|
||||
bpf_tail_call(skb, &jmp_table, PARSE_IP);
|
||||
bpf_tail_call_static(skb, &jmp_table, PARSE_IP);
|
||||
break;
|
||||
case ETH_P_IPV6:
|
||||
bpf_tail_call(skb, &jmp_table, PARSE_IPV6);
|
||||
bpf_tail_call_static(skb, &jmp_table, PARSE_IPV6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user