linux/arch/s390
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
..
appldata s390: appldata: drop owner assignment from platform_drivers 2014-10-20 16:20:13 +02:00
boot s390: remove "64" suffix from a couple of files 2015-03-25 11:49:34 +01:00
configs s390: new default configuration 2015-06-25 09:39:25 +02:00
crypto Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2015-05-22 14:26:36 -07:00
hypfs Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2015-07-04 19:36:06 -07:00
include Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2015-06-30 21:44:14 -07:00
kernel Minor merge needed, due to function move. 2015-07-01 10:49:25 -07:00
kvm The bulk of the changes here is for x86. And for once it's not 2015-06-24 09:36:49 -07:00
lib s390: remove "64" suffix from mem64.S and swsusp_asm64.S 2015-03-25 11:49:51 +01:00
mm s390/mm: change HPAGE_SHIFT type to int 2015-06-25 17:00:35 -07:00
net bpf: introduce bpf_skb_vlan_push/pop() helpers 2015-07-20 20:52:31 -07:00
oprofile s390: remove 31 bit support 2015-03-25 11:49:33 +01:00
pci s390/pci: improve handling of hotplug event 0x301 2015-06-18 15:45:54 +02:00
defconfig s390: new default configuration 2015-06-25 09:39:25 +02:00
Kbuild s390: remove 31 bit support 2015-03-25 11:49:33 +01:00
Kconfig s390/bpf: add dependency to z196 features 2015-04-23 16:55:50 +02:00
Kconfig.debug
Makefile s390: remove 31 bit support 2015-03-25 11:49:33 +01:00