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:
		
					parent
					
						
							
								8248881835
							
						
					
				
			
			
				commit
				
					
						c6610de353
					
				
			
		
					 4 changed files with 1447 additions and 0 deletions
				
			
		|  | @ -16,6 +16,7 @@ obj- := $(platform-) | |||
| 
 | ||||
| obj-y += kernel/ | ||||
| obj-y += mm/ | ||||
| obj-y += net/ | ||||
| 
 | ||||
| ifdef CONFIG_KVM | ||||
| obj-y += kvm/ | ||||
|  |  | |||
							
								
								
									
										3
									
								
								arch/mips/net/Makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								arch/mips/net/Makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| # MIPS networking code
 | ||||
| 
 | ||||
| obj-$(CONFIG_BPF_JIT) += bpf_jit.o | ||||
							
								
								
									
										1399
									
								
								arch/mips/net/bpf_jit.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1399
									
								
								arch/mips/net/bpf_jit.c
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										44
									
								
								arch/mips/net/bpf_jit.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								arch/mips/net/bpf_jit.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 */ | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Markos Chandras
				Markos Chandras