Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
[sfrench/cifs-2.6.git] / arch / mips / net / bpf_jit.c
index b14e2148bee492715f1135f34fd0db975461218d..9b55143d19dbad39ad8b7cd7f1b9ced90e8ab2cb 100644 (file)
@@ -752,27 +752,6 @@ static u64 jit_get_skb_w(struct sk_buff *skb, unsigned offset)
        return (u64)err << 32 | ntohl(ret);
 }
 
-#ifdef __BIG_ENDIAN_BITFIELD
-#define PKT_TYPE_MAX   (7 << 5)
-#else
-#define PKT_TYPE_MAX   7
-#endif
-static int pkt_type_offset(void)
-{
-       struct sk_buff skb_probe = {
-               .pkt_type = ~0,
-       };
-       u8 *ct = (u8 *)&skb_probe;
-       unsigned int off;
-
-       for (off = 0; off < sizeof(struct sk_buff); off++) {
-               if (ct[off] == PKT_TYPE_MAX)
-                       return off;
-       }
-       pr_err_once("Please fix pkt_type_offset(), as pkt_type couldn't be found\n");
-       return -1;
-}
-
 static int build_body(struct jit_ctx *ctx)
 {
        void *load_func[] = {jit_get_skb_b, jit_get_skb_h, jit_get_skb_w};
@@ -780,7 +759,6 @@ static int build_body(struct jit_ctx *ctx)
        const struct sock_filter *inst;
        unsigned int i, off, load_order, condt;
        u32 k, b_off __maybe_unused;
-       int tmp;
 
        for (i = 0; i < prog->len; i++) {
                u16 code;
@@ -1320,11 +1298,7 @@ jmp_cmp:
                case BPF_ANC | SKF_AD_PKTTYPE:
                        ctx->flags |= SEEN_SKB;
 
-                       tmp = off = pkt_type_offset();
-
-                       if (tmp < 0)
-                               return -1;
-                       emit_load_byte(r_tmp, r_skb, off, ctx);
+                       emit_load_byte(r_tmp, r_skb, PKT_TYPE_OFFSET(), ctx);
                        /* Keep only the last 3 bits */
                        emit_andi(r_A, r_tmp, PKT_TYPE_MAX, ctx);
 #ifdef __BIG_ENDIAN_BITFIELD
@@ -1405,7 +1379,7 @@ void bpf_jit_compile(struct bpf_prog *fp)
                bpf_jit_dump(fp->len, alloc_size, 2, ctx.target);
 
        fp->bpf_func = (void *)ctx.target;
-       fp->jited = 1;
+       fp->jited = true;
 
 out:
        kfree(ctx.offsets);
@@ -1415,5 +1389,6 @@ void bpf_jit_free(struct bpf_prog *fp)
 {
        if (fp->jited)
                module_free(NULL, fp->bpf_func);
-       kfree(fp);
+
+       bpf_prog_unlock_free(fp);
 }