Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Remove bpf_jit which was ported from FreeBSD recently.



details:   https://anonhg.NetBSD.org/src/rev/376c8a572fdc
branches:  trunk
changeset: 781754:376c8a572fdc
user:      alnsn <alnsn%NetBSD.org@localhost>
date:      Thu Sep 27 18:28:53 2012 +0000

description:
Remove bpf_jit which was ported from FreeBSD recently.

It will soon be replaced with the new bpfjit kernel module.

diffstat:

 distrib/sets/lists/comp/mi             |    4 +-
 sys/arch/amd64/amd64/bpf_jit_machdep.c |  657 -------------------------------
 sys/arch/amd64/amd64/bpf_jit_machdep.h |  485 -----------------------
 sys/arch/amd64/conf/files.amd64        |    3 +-
 sys/arch/amd64/conf/std.amd64          |    3 +-
 sys/arch/i386/conf/files.i386          |    3 +-
 sys/arch/i386/conf/std.i386            |    3 +-
 sys/arch/i386/i386/bpf_jit_machdep.c   |  686 ---------------------------------
 sys/arch/i386/i386/bpf_jit_machdep.h   |  430 --------------------
 sys/conf/files                         |    4 +-
 sys/modules/bpf/Makefile               |   14 +-
 sys/net/Makefile                       |    4 +-
 sys/net/bpf.c                          |   39 +-
 sys/net/bpf_filter.c                   |   13 +-
 sys/net/bpf_jit.c                      |  142 ------
 sys/net/bpf_jit.h                      |   81 ---
 sys/net/bpfdesc.h                      |    5 +-
 17 files changed, 20 insertions(+), 2556 deletions(-)

diffs (truncated from 2850 to 300 lines):

diff -r e7032da05252 -r 376c8a572fdc distrib/sets/lists/comp/mi
--- a/distrib/sets/lists/comp/mi        Thu Sep 27 17:46:46 2012 +0000
+++ b/distrib/sets/lists/comp/mi        Thu Sep 27 18:28:53 2012 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: mi,v 1.1781 2012/09/18 15:14:41 skrll Exp $
+#      $NetBSD: mi,v 1.1782 2012/09/27 18:28:53 alnsn Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -1805,7 +1805,7 @@
 ./usr/include/net/agr/if_agrioctl.h            comp-c-include
 ./usr/include/net/bpf.h                                comp-c-include
 ./usr/include/net/bpfdesc.h                    comp-c-include
-./usr/include/net/bpf_jit.h                    comp-c-include
+./usr/include/net/bpf_jit.h                    comp-c-include          obsolete
 ./usr/include/net/dlt.h                                comp-c-include
 ./usr/include/net/ethertypes.h                 comp-c-include
 ./usr/include/net/if.h                         comp-c-include
diff -r e7032da05252 -r 376c8a572fdc sys/arch/amd64/amd64/bpf_jit_machdep.c
--- a/sys/arch/amd64/amd64/bpf_jit_machdep.c    Thu Sep 27 17:46:46 2012 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,657 +0,0 @@
-/*     $NetBSD: bpf_jit_machdep.c,v 1.1 2012/08/01 23:24:28 rmind Exp $        */
-
-/*-
- * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (C) 2005-2009 Jung-uk Kim <jkim%FreeBSD.org@localhost>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Politecnico di Torino nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.c,
- * v 1.22 2010/04/22 23:47:19 jkim Exp $
- */
-
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bpf_jit_machdep.c,v 1.1 2012/08/01 23:24:28 rmind Exp $");
-
-#ifdef _KERNEL
-#if defined(_KERNEL_OPT)
-#include "opt_bpf.h"
-#endif
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/socket.h>
-#include <sys/malloc.h>
-#include <net/if.h>
-#else
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <sys/param.h>
-#endif
-
-#include <sys/types.h>
-
-#include <net/bpf.h>
-#include <net/bpf_jit.h>
-
-#include <amd64/amd64/bpf_jit_machdep.h>
-
-bpf_filter_func        bpf_jit_compile(struct bpf_insn *, u_int, size_t *);
-
-/*
- * Emit routine to update the jump table.
- */
-static void
-emit_length(bpf_bin_stream *stream, __unused u_int value, u_int len)
-{
-
-       if (stream->refs != NULL)
-               (stream->refs)[stream->bpf_pc] += len;
-       stream->cur_ip += len;
-}
-
-/*
- * Emit routine to output the actual binary code.
- */
-static void
-emit_code(bpf_bin_stream *stream, u_int value, u_int len)
-{
-
-       switch (len) {
-       case 1:
-               stream->ibuf[stream->cur_ip] = (u_char)value;
-               stream->cur_ip++;
-               break;
-       case 2:
-               *((u_short *)(stream->ibuf + stream->cur_ip)) = (u_short)value;
-               stream->cur_ip += 2;
-               break;
-       case 4:
-               *((u_int *)(stream->ibuf + stream->cur_ip)) = value;
-               stream->cur_ip += 4;
-               break;
-       }
-}
-
-/*
- * Scan the filter program and find possible optimization.
- */
-static int
-bpf_jit_optimize(struct bpf_insn *prog, u_int nins)
-{
-       int flags;
-       u_int i;
-
-       /* Do we return immediately? */
-       if (BPF_CLASS(prog[0].code) == BPF_RET)
-               return (BPF_JIT_FRET);
-
-       for (flags = 0, i = 0; i < nins; i++) {
-               switch (prog[i].code) {
-               case BPF_LD|BPF_W|BPF_ABS:
-               case BPF_LD|BPF_H|BPF_ABS:
-               case BPF_LD|BPF_B|BPF_ABS:
-               case BPF_LD|BPF_W|BPF_IND:
-               case BPF_LD|BPF_H|BPF_IND:
-               case BPF_LD|BPF_B|BPF_IND:
-               case BPF_LDX|BPF_MSH|BPF_B:
-                       flags |= BPF_JIT_FPKT;
-                       break;
-               case BPF_LD|BPF_MEM:
-               case BPF_LDX|BPF_MEM:
-               case BPF_ST:
-               case BPF_STX:
-                       flags |= BPF_JIT_FMEM;
-                       break;
-               case BPF_LD|BPF_W|BPF_LEN:
-               case BPF_LDX|BPF_W|BPF_LEN:
-                       flags |= BPF_JIT_FLEN;
-                       break;
-               case BPF_JMP|BPF_JA:
-               case BPF_JMP|BPF_JGT|BPF_K:
-               case BPF_JMP|BPF_JGE|BPF_K:
-               case BPF_JMP|BPF_JEQ|BPF_K:
-               case BPF_JMP|BPF_JSET|BPF_K:
-               case BPF_JMP|BPF_JGT|BPF_X:
-               case BPF_JMP|BPF_JGE|BPF_X:
-               case BPF_JMP|BPF_JEQ|BPF_X:
-               case BPF_JMP|BPF_JSET|BPF_X:
-                       flags |= BPF_JIT_FJMP;
-                       break;
-               }
-               if (flags == BPF_JIT_FLAG_ALL)
-                       break;
-       }
-
-       return (flags);
-}
-
-/*
- * Function that does the real stuff.
- */
-bpf_filter_func
-bpf_jit_compile(struct bpf_insn *prog, u_int nins, size_t *size)
-{
-       bpf_bin_stream stream;
-       struct bpf_insn *ins;
-       int flags, fret, fpkt, fmem, fjmp, flen;
-       u_int i, pass;
-
-       /*
-        * NOTE: Do not modify the name of this variable, as it's used by
-        * the macros to emit code.
-        */
-       emit_func emitm;
-
-       flags = bpf_jit_optimize(prog, nins);
-       fret = (flags & BPF_JIT_FRET) != 0;
-       fpkt = (flags & BPF_JIT_FPKT) != 0;
-       fmem = (flags & BPF_JIT_FMEM) != 0;
-       fjmp = (flags & BPF_JIT_FJMP) != 0;
-       flen = (flags & BPF_JIT_FLEN) != 0;
-
-       if (fret)
-               nins = 1;
-
-       memset(&stream, 0, sizeof(stream));
-
-       /* Allocate the reference table for the jumps. */
-       if (fjmp) {
-#ifdef _KERNEL
-               stream.refs = malloc((nins + 1) * sizeof(u_int), M_TEMP,
-                   M_NOWAIT | M_ZERO);
-#else
-               stream.refs = calloc(nins + 1, sizeof(u_int));
-#endif
-               if (stream.refs == NULL)
-                       return (NULL);
-       }
-
-       /*
-        * The first pass will emit the lengths of the instructions
-        * to create the reference table.
-        */
-       emitm = emit_length;
-
-       for (pass = 0; pass < 2; pass++) {
-               ins = prog;
-
-               /* Create the procedure header. */
-               if (fmem) {
-                       PUSH(RBP);
-                       MOVrq(RSP, RBP);
-                       SUBib(BPF_MEMWORDS * sizeof(uint32_t), RSP);
-               }
-               if (flen)
-                       MOVrd2(ESI, R9D);
-               if (fpkt) {
-                       MOVrq2(RDI, R8);
-                       MOVrd(EDX, EDI);
-               }
-
-               for (i = 0; i < nins; i++) {
-                       stream.bpf_pc++;
-
-                       switch (ins->code) {
-                       default:
-#ifdef _KERNEL
-                               return (NULL);
-#else
-                               abort();
-#endif
-
-                       case BPF_RET|BPF_K:
-                               MOVid(ins->k, EAX);
-                               if (fmem)
-                                       LEAVE();
-                               RET();
-                               break;
-
-                       case BPF_RET|BPF_A:
-                               if (fmem)
-                                       LEAVE();
-                               RET();
-                               break;
-
-                       case BPF_LD|BPF_W|BPF_ABS:
-                               MOVid(ins->k, ESI);
-                               CMPrd(EDI, ESI);
-                               JAb(12);
-                               MOVrd(EDI, ECX);
-                               SUBrd(ESI, ECX);
-                               CMPid(sizeof(int32_t), ECX);
-                               if (fmem) {
-                                       JAEb(4);
-                                       ZEROrd(EAX);
-                                       LEAVE();
-                               } else {
-                                       JAEb(3);
-                                       ZEROrd(EAX);
-                               }
-                               RET();
-                               MOVrq3(R8, RCX);
-                               MOVobd(RCX, RSI, EAX);
-                               BSWAP(EAX);
-                               break;
-
-                       case BPF_LD|BPF_H|BPF_ABS:
-                               ZEROrd(EAX);
-                               MOVid(ins->k, ESI);
-                               CMPrd(EDI, ESI);
-                               JAb(12);
-                               MOVrd(EDI, ECX);
-                               SUBrd(ESI, ECX);
-                               CMPid(sizeof(int16_t), ECX);
-                               if (fmem) {
-                                       JAEb(2);
-                                       LEAVE();
-                               } else
-                                       JAEb(1);
-                               RET();
-                               MOVrq3(R8, RCX);
-                               MOVobw(RCX, RSI, AX);



Home | Main Index | Thread Index | Old Index