Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 8 Dec 2012 01:11:55 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r244010 - in projects/bpfjit/sys: net netgraph
Message-ID:  <201212080111.qB81Bteq028993@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkim
Date: Sat Dec  8 01:11:55 2012
New Revision: 244010
URL: http://svnweb.freebsd.org/changeset/base/244010

Log:
  Disable bpfjit by default.  Only allow toggling when a filter is set.

Modified:
  projects/bpfjit/sys/net/bpf.c
  projects/bpfjit/sys/net/bpfjit.c
  projects/bpfjit/sys/net/bpfjit.h
  projects/bpfjit/sys/netgraph/ng_bpf.c

Modified: projects/bpfjit/sys/net/bpf.c
==============================================================================
--- projects/bpfjit/sys/net/bpf.c	Sat Dec  8 00:47:03 2012	(r244009)
+++ projects/bpfjit/sys/net/bpf.c	Sat Dec  8 01:11:55 2012	(r244010)
@@ -1776,10 +1776,11 @@ bpf_setf(struct bpf_d *d, struct bpf_pro
 		}
 #ifdef BPFJIT
 		/* Filter is copied inside fcode and is perfectly valid. */
-		jfunc = bpfjit_generate_code(fcode, flen);
-
-		if (jfunc == NULL && bootverbose)
-			printf("bpf_setf: failed to compile filter\n");
+		if (bpfjit_enable != 0) {
+			jfunc = bpfjit_generate_code(fcode, flen);
+			if (jfunc == NULL && bootverbose)
+				printf("bpf_setf: failed to compile filter\n");
+		}
 #endif
 	}
 
@@ -2062,10 +2063,10 @@ bpf_tap(struct bpf_if *bp, u_char *pkt, 
 		 * the interface pointers on the mbuf to figure it out.
 		 */
 #ifdef BPFJIT
-		bf = bpfjit_disable == 0 ? d->bd_bfilter : NULL;
-		if (bf != NULL)
+		if (d->bd_bfilter != NULL) {
+			bf = d->bd_bfilter;
 			slen = bf(pkt, pktlen, pktlen);
-		else
+		} else
 #endif
 		slen = bpf_filter(d->bd_rfilter, pkt, pktlen, pktlen);
 		if (slen != 0) {
@@ -2123,10 +2124,10 @@ bpf_mtap(struct bpf_if *bp, struct mbuf 
 			continue;
 		++d->bd_rcount;
 #ifdef BPFJIT
-		bf = bpfjit_disable == 0 ? d->bd_bfilter : NULL;
-		if (bf != NULL)
+		if (d->bd_bfilter != NULL) {
+			bf = d->bd_bfilter;
 			slen = bf((u_char *)m, pktlen, 0);
-		else
+		} else
 #endif
 		slen = bpf_filter(d->bd_rfilter, (u_char *)m, pktlen, 0);
 		if (slen != 0) {
@@ -2188,10 +2189,10 @@ bpf_mtap2(struct bpf_if *bp, void *data,
 			continue;
 		++d->bd_rcount;
 #ifdef BPFJIT
-		bf = bpfjit_disable == 0 ? d->bd_bfilter : NULL;
-		if (bf != NULL)
+		if (d->bd_bfilter != NULL) {
+			bf = d->bd_bfilter;
 			slen = bf((u_char *)&mb, pktlen, 0);
-		else
+		} else
 #endif
 		slen = bpf_filter(d->bd_rfilter, (u_char *)&mb, pktlen, 0);
 		if (slen != 0) {

Modified: projects/bpfjit/sys/net/bpfjit.c
==============================================================================
--- projects/bpfjit/sys/net/bpfjit.c	Sat Dec  8 00:47:03 2012	(r244009)
+++ projects/bpfjit/sys/net/bpfjit.c	Sat Dec  8 01:11:55 2012	(r244010)
@@ -58,10 +58,10 @@ uint32_t	m_xword(const struct mbuf *, ui
 uint32_t	m_xhalf(const struct mbuf *, uint32_t, int *);
 uint32_t	m_xbyte(const struct mbuf *, uint32_t, int *);
 
-int bpfjit_disable = 0;
+int bpfjit_enable = 0;
 SYSCTL_NODE(_net, OID_AUTO, bpfjit, CTLFLAG_RW, 0, "BPF just-in-time compiler");
-SYSCTL_INT(_net_bpfjit, OID_AUTO, disable, CTLFLAG_RW, &bpfjit_disable, 0,
-    "disable BPF just-in-time compiler");
+SYSCTL_INT(_net_bpfjit, OID_AUTO, enable, CTLFLAG_RW, &bpfjit_enable, 0,
+    "enable BPF just-in-time compiler");
 
 #else
 

Modified: projects/bpfjit/sys/net/bpfjit.h
==============================================================================
--- projects/bpfjit/sys/net/bpfjit.h	Sat Dec  8 00:47:03 2012	(r244009)
+++ projects/bpfjit/sys/net/bpfjit.h	Sat Dec  8 01:11:55 2012	(r244010)
@@ -49,7 +49,7 @@
 #endif
 
 #ifdef _KERNEL
-extern int bpfjit_disable;
+extern int bpfjit_enable;
 #endif
 
 /*

Modified: projects/bpfjit/sys/netgraph/ng_bpf.c
==============================================================================
--- projects/bpfjit/sys/netgraph/ng_bpf.c	Sat Dec  8 00:47:03 2012	(r244009)
+++ projects/bpfjit/sys/netgraph/ng_bpf.c	Sat Dec  8 01:11:55 2012	(r244010)
@@ -451,7 +451,7 @@ ng_bpf_rcvdata(hook_p hook, item_p item)
 
 	/* Run packet through filter */
 #ifdef BPFJIT
-	if (bpfjit_disable == 0 && hip->jit_prog != NULL) {
+	if (hip->jit_prog != NULL) {
 		if (data)
 			len = (hip->jit_prog)(data, totlen, totlen);
 		else
@@ -545,7 +545,7 @@ ng_bpf_setprog(hook_p hook, const struct
 	const hinfo_p hip = NG_HOOK_PRIVATE(hook);
 	struct ng_bpf_hookprog *hp;
 #ifdef BPFJIT
-	bpfjit_function_t jit_prog;
+	bpfjit_function_t jit_prog = NULL;
 #endif
 	int size;
 
@@ -560,8 +560,10 @@ ng_bpf_setprog(hook_p hook, const struct
 	if (hp == NULL)
 		return (ENOMEM);
 	bcopy(hp0, hp, size);
+
 #ifdef BPFJIT
-	jit_prog = bpfjit_generate_code(hp->bpf_prog, hp->bpf_prog_len);
+	if (bpfjit_enable != 0)
+		jit_prog = bpfjit_generate_code(hp->bpf_prog, hp->bpf_prog_len);
 #endif
 
 	/* Free previous program, if any, and assign new one */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212080111.qB81Bteq028993>