Module Name: src Committed By: rmind Date: Fri Sep 20 23:19:52 UTC 2013
Modified Files: src/sys/net: bpfjit.c Log Message: bpfjit: replace malloc with kmem, KNF a little, add RCS ID. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/net/bpfjit.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/bpfjit.c diff -u src/sys/net/bpfjit.c:1.2 src/sys/net/bpfjit.c:1.3 --- src/sys/net/bpfjit.c:1.2 Sat Nov 10 22:12:31 2012 +++ src/sys/net/bpfjit.c Fri Sep 20 23:19:52 2013 @@ -1,3 +1,5 @@ +/* $NetBSD: bpfjit.c,v 1.3 2013/09/20 23:19:52 rmind Exp $ */ + /*- * Copyright (c) 2011-2012 Alexander Nasonov. * All rights reserved. @@ -29,53 +31,41 @@ #include <sys/cdefs.h> #ifdef _KERNEL -__KERNEL_RCSID(0, "$NetBSD: bpfjit.c,v 1.2 2012/11/10 22:12:31 alnsn Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bpfjit.c,v 1.3 2013/09/20 23:19:52 rmind Exp $"); #else -__RCSID("$NetBSD: bpfjit.c,v 1.2 2012/11/10 22:12:31 alnsn Exp $"); +__RCSID("$NetBSD: bpfjit.c,v 1.3 2013/09/20 23:19:52 rmind Exp $"); #endif -#include <net/bpfjit.h> +#include <sys/types.h> +#include <sys/queue.h> #ifndef _KERNEL +#include <stdlib.h> #include <assert.h> +#define BPFJIT_ALLOC(sz) malloc(sz) +#define BPFJIT_FREE(p, sz) free(p) #define BPFJIT_ASSERT(c) assert(c) #else +#include <sys/kmem.h> +#define BPFJIT_ALLOC(sz) kmem_alloc(sz, KM_SLEEP) +#define BPFJIT_FREE(p, sz) kmem_free(p, sz) #define BPFJIT_ASSERT(c) KASSERT(c) #endif #ifndef _KERNEL -#include <stdlib.h> -#define BPFJIT_MALLOC(sz) malloc(sz) -#define BPFJIT_FREE(p) free(p) -#else -#include <sys/malloc.h> -#define BPFJIT_MALLOC(sz) kern_malloc(sz, M_WAITOK) -#define BPFJIT_FREE(p) kern_free(p) -#endif - -#ifndef _KERNEL #include <limits.h> +#include <stdio.h> #include <stdbool.h> #include <stddef.h> #include <stdint.h> #else -#include <machine/limits.h> -#include <sys/null.h> -#include <sys/types.h> #include <sys/atomic.h> #include <sys/module.h> #endif -#include <sys/queue.h> -#include <sys/types.h> - +#include <net/bpfjit.h> #include <sljitLir.h> -#if !defined(_KERNEL) && defined(SLJIT_VERBOSE) && SLJIT_VERBOSE -#include <stdio.h> /* for stderr */ -#endif - - #define BPFJIT_A SLJIT_TEMPORARY_REG1 #define BPFJIT_X SLJIT_TEMPORARY_EREG1 #define BPFJIT_TMP1 SLJIT_TEMPORARY_REG2 @@ -91,12 +81,10 @@ __RCSID("$NetBSD: bpfjit.c,v 1.2 2012/11 #define BPFJIT_INIT_X 0x10000 #define BPFJIT_INIT_A 0x20000 - /* * Node of bj_jumps list. */ -struct bpfjit_jump -{ +struct bpfjit_jump { struct sljit_jump *bj_jump; SLIST_ENTRY(bpfjit_jump) bj_entries; uint32_t bj_safe_length; @@ -105,8 +93,7 @@ struct bpfjit_jump /* * Data for BPF_JMP instruction. */ -struct bpfjit_jump_data -{ +struct bpfjit_jump_data { /* * These entries make up bj_jumps list: * bj_jtf[0] - when coming from jt path, @@ -119,8 +106,7 @@ struct bpfjit_jump_data * Data for "read from packet" instructions. * See also read_pkt_insn() function below. */ -struct bpfjit_read_pkt_data -{ +struct bpfjit_read_pkt_data { /* * If positive, emit "if (buflen < bj_check_length) return 0". * We assume that buflen is never equal to UINT32_MAX (otherwise, @@ -132,8 +118,7 @@ struct bpfjit_read_pkt_data /* * Additional (optimization-related) data for bpf_insn. */ -struct bpfjit_insn_data -{ +struct bpfjit_insn_data { /* List of jumps to this insn. */ SLIST_HEAD(, bpfjit_jump) bj_jumps; @@ -1223,7 +1208,7 @@ bpfjit_generate_code(struct bpf_insn *in /* a list of jumps to out-of-bound return from a generated function */ struct sljit_jump **ret0; - size_t ret0_size, ret0_maxsize; + size_t ret0_size = 0, ret0_maxsize = 0; struct bpfjit_insn_data *insn_dat; @@ -1258,7 +1243,7 @@ bpfjit_generate_code(struct bpf_insn *in if (returns_maxsize == 0) goto fail; - insn_dat = BPFJIT_MALLOC(insn_count * sizeof(insn_dat[0])); + insn_dat = BPFJIT_ALLOC(insn_count * sizeof(insn_dat[0])); if (insn_dat == NULL) goto fail; @@ -1268,13 +1253,13 @@ bpfjit_generate_code(struct bpf_insn *in ret0_size = 0; ret0_maxsize = get_ret0_size(insns, insn_dat, insn_count); if (ret0_maxsize > 0) { - ret0 = BPFJIT_MALLOC(ret0_maxsize * sizeof(ret0[0])); + ret0 = BPFJIT_ALLOC(ret0_maxsize * sizeof(ret0[0])); if (ret0 == NULL) goto fail; } returns_size = 0; - returns = BPFJIT_MALLOC(returns_maxsize * sizeof(returns[0])); + returns = BPFJIT_ALLOC(returns_maxsize * sizeof(returns[0])); if (returns == NULL) goto fail; @@ -1734,13 +1719,13 @@ fail: sljit_free_compiler(compiler); if (insn_dat != NULL) - BPFJIT_FREE(insn_dat); + BPFJIT_FREE(insn_dat, insn_count * sizeof(insn_dat[0])); if (returns != NULL) - BPFJIT_FREE(returns); + BPFJIT_FREE(returns, returns_maxsize * sizeof(returns[0])); if (ret0 != NULL) - BPFJIT_FREE(ret0); + BPFJIT_FREE(ret0, ret0_maxsize * sizeof(ret0[0])); return (bpfjit_function_t)rv; }