linux/arch
Alexei Starovoitov 4e10df9a60 bpf: introduce bpf_skb_vlan_push/pop() helpers
Allow eBPF programs attached to TC qdiscs call skb_vlan_push/pop via
helper functions. These functions may change skb->data/hlen which are
cached by some JITs to improve performance of ld_abs/ld_ind instructions.
Therefore JITs need to recognize bpf_skb_vlan_push/pop() calls,
re-compute header len and re-cache skb->data/hlen back into cpu registers.
Note, skb->data/hlen are not directly accessible from the programs,
so any changes to skb->data done either by these helpers or by other
TC actions are safe.

eBPF JIT supported by three architectures:
- arm64 JIT is using bpf_load_pointer() without caching, so it's ok as-is.
- x64 JIT re-caches skb->data/hlen unconditionally after vlan_push/pop calls
  (experiments showed that conditional re-caching is slower).
- s390 JIT falls back to interpreter for now when bpf_skb_vlan_push() is present
  in the program (re-caching is tbd).

These helpers allow more scalable handling of vlan from the programs.
Instead of creating thousands of vlan netdevs on top of eth0 and attaching
TC+ingress+bpf to all of them, the program can be attached to eth0 directly
and manipulate vlans as necessary.

Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-07-20 20:52:31 -07:00
..
alpha
arc Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-07-04 19:36:06 -07:00
arm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-07-13 11:18:25 -07:00
arm64 ARM: SoC: fixes for v4.2-rc2 2015-07-11 10:20:36 -07:00
avr32 Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-07-01 15:19:35 -07:00
blackfin Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-07-04 19:36:06 -07:00
c6x
cris cris: Replace do_posix_clock_monotonic_gettime() 2015-07-09 10:51:46 +02:00
frv Fix up implicit <module.h> users that will break later. 2015-07-02 10:25:22 -07:00
h8300
hexagon
ia64 remove some boot noise from a now-invalid check that pages are reserved 2015-07-02 14:46:15 -07:00
m32r
m68k Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-07-01 15:19:35 -07:00
metag
microblaze
mips MIPS: O32: Use compat_sys_getsockopt. 2015-07-10 11:02:22 +02:00
mn10300 Replace module_init with equivalent device_initcall in non modules. 2015-07-02 10:30:48 -07:00
nios2 nios2 update for v4.2 2015-07-03 12:22:49 -07:00
openrisc
parisc parisc: Fix some PTE/TLB race conditions and optimize __flush_tlb_range based on timing results 2015-07-10 21:47:47 +02:00
powerpc powerpc/perf/24x7: Fix lockdep warning 2015-07-08 15:18:04 +10:00
s390 bpf: introduce bpf_skb_vlan_push/pop() helpers 2015-07-20 20:52:31 -07:00
score
sh Replace module_init with equivalent device_initcall in non modules. 2015-07-02 10:30:48 -07:00
sparc
tile modpost: work correctly with tile coldtext sections 2015-07-08 18:53:49 -04:00
um Minor merge needed, due to function move. 2015-07-01 10:49:25 -07:00
unicore32 arch/unicore32/kernel/fpu-ucf64.c: remove unnecessary KERN_ERR 2015-06-30 19:44:59 -07:00
x86 bpf: introduce bpf_skb_vlan_push/pop() helpers 2015-07-20 20:52:31 -07:00
xtensa Replace module_init with equivalent device_initcall in non modules. 2015-07-02 10:30:48 -07:00
.gitignore
Kconfig