diff options
Diffstat (limited to 'arch/sparc/net/bpf_jit_comp.c')
-rw-r--r-- | arch/sparc/net/bpf_jit_comp.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/sparc/net/bpf_jit_comp.c b/arch/sparc/net/bpf_jit_comp.c index 01fe9946d388..a82c6b2a9780 100644 --- a/arch/sparc/net/bpf_jit_comp.c +++ b/arch/sparc/net/bpf_jit_comp.c | |||
@@ -618,7 +618,7 @@ void bpf_jit_compile(struct sk_filter *fp) | |||
618 | emit_load16(r_A, struct net_device, type, r_A); | 618 | emit_load16(r_A, struct net_device, type, r_A); |
619 | break; | 619 | break; |
620 | case BPF_S_ANC_RXHASH: | 620 | case BPF_S_ANC_RXHASH: |
621 | emit_skb_load32(rxhash, r_A); | 621 | emit_skb_load32(hash, r_A); |
622 | break; | 622 | break; |
623 | case BPF_S_ANC_VLAN_TAG: | 623 | case BPF_S_ANC_VLAN_TAG: |
624 | case BPF_S_ANC_VLAN_TAG_PRESENT: | 624 | case BPF_S_ANC_VLAN_TAG_PRESENT: |
@@ -809,6 +809,7 @@ cond_branch: f_offset = addrs[i + filter[i].jf]; | |||
809 | if (image) { | 809 | if (image) { |
810 | bpf_flush_icache(image, image + proglen); | 810 | bpf_flush_icache(image, image + proglen); |
811 | fp->bpf_func = (void *)image; | 811 | fp->bpf_func = (void *)image; |
812 | fp->jited = 1; | ||
812 | } | 813 | } |
813 | out: | 814 | out: |
814 | kfree(addrs); | 815 | kfree(addrs); |
@@ -817,7 +818,7 @@ out: | |||
817 | 818 | ||
818 | void bpf_jit_free(struct sk_filter *fp) | 819 | void bpf_jit_free(struct sk_filter *fp) |
819 | { | 820 | { |
820 | if (fp->bpf_func != sk_run_filter) | 821 | if (fp->jited) |
821 | module_free(NULL, fp->bpf_func); | 822 | module_free(NULL, fp->bpf_func); |
822 | kfree(fp); | 823 | kfree(fp); |
823 | } | 824 | } |