MIPS: net: Add BPF JIT
This adds initial support for BPF-JIT on MIPS Tested on mips32 LE/BE and mips64 BE/n64 using dhcp, ping and various tcpdump filters. Benchmarking: Assuming the remote MIPS target uses 192.168.154.181 as its IP address, and the local host uses 192.168.154.136, the following results can be obtained using the following tcpdump filter (catches no frames) and a simple 'time ping -f -c 1000000' command. [root@(none) ~]# tcpdump -p -n -s 0 -i eth0 net 10.0.0.0/24 -d (000) ldh [12] (001) jeq #0x800 jt 2 jf 8 (002) ld [26] (003) and #0xffffff00 (004) jeq #0xa000000 jt 16 jf 5 (005) ld [30] (006) and #0xffffff00 (007) jeq #0xa000000 jt 16 jf 17 (008) jeq #0x806 jt 10 jf 9 (009) jeq #0x8035 jt 10 jf 17 (010) ld [28] (011) and #0xffffff00 (012) jeq #0xa000000 jt 16 jf 13 (013) ld [38] (014) and #0xffffff00 (015) jeq #0xa000000 jt 16 jf 17 (016) ret #65535 - BPF-JIT Disabled real 1m38.005s user 0m1.510s sys 0m6.710s - BPF-JIT Enabled real 1m35.215s user 0m1.200s sys 0m4.140s [ralf@linux-mips.org: Resolved conflict.] Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
This commit is contained in:
Родитель
8248881835
Коммит
c6610de353
|
@ -16,6 +16,7 @@ obj- := $(platform-)
|
|||
|
||||
obj-y += kernel/
|
||||
obj-y += mm/
|
||||
obj-y += net/
|
||||
|
||||
ifdef CONFIG_KVM
|
||||
obj-y += kvm/
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
# MIPS networking code
|
||||
|
||||
obj-$(CONFIG_BPF_JIT) += bpf_jit.o
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Just-In-Time compiler for BPF filters on MIPS
|
||||
*
|
||||
* Copyright (c) 2014 Imagination Technologies Ltd.
|
||||
* Author: Markos Chandras <markos.chandras@imgtec.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; version 2 of the License.
|
||||
*/
|
||||
|
||||
#ifndef BPF_JIT_MIPS_OP_H
|
||||
#define BPF_JIT_MIPS_OP_H
|
||||
|
||||
/* Registers used by JIT */
|
||||
#define MIPS_R_ZERO 0
|
||||
#define MIPS_R_V0 2
|
||||
#define MIPS_R_V1 3
|
||||
#define MIPS_R_A0 4
|
||||
#define MIPS_R_A1 5
|
||||
#define MIPS_R_T6 14
|
||||
#define MIPS_R_T7 15
|
||||
#define MIPS_R_S0 16
|
||||
#define MIPS_R_S1 17
|
||||
#define MIPS_R_S2 18
|
||||
#define MIPS_R_S3 19
|
||||
#define MIPS_R_S4 20
|
||||
#define MIPS_R_S5 21
|
||||
#define MIPS_R_S6 22
|
||||
#define MIPS_R_S7 23
|
||||
#define MIPS_R_SP 29
|
||||
#define MIPS_R_RA 31
|
||||
|
||||
/* Conditional codes */
|
||||
#define MIPS_COND_EQ 0x1
|
||||
#define MIPS_COND_GE (0x1 << 1)
|
||||
#define MIPS_COND_GT (0x1 << 2)
|
||||
#define MIPS_COND_NE (0x1 << 3)
|
||||
#define MIPS_COND_ALL (0x1 << 4)
|
||||
/* Conditionals on X register or K immediate */
|
||||
#define MIPS_COND_X (0x1 << 5)
|
||||
#define MIPS_COND_K (0x1 << 6)
|
||||
|
||||
#endif /* BPF_JIT_MIPS_OP_H */
|
Загрузка…
Ссылка в новой задаче