diff options
Diffstat (limited to 'arch/mips/net/ebpf_jit.c')
-rw-r--r-- | arch/mips/net/ebpf_jit.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/mips/net/ebpf_jit.c b/arch/mips/net/ebpf_jit.c index aeb7b1b0f202..b16710a8a9e7 100644 --- a/arch/mips/net/ebpf_jit.c +++ b/arch/mips/net/ebpf_jit.c | |||
@@ -854,6 +854,7 @@ static int build_one_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, | |||
854 | case BPF_ALU | BPF_MOD | BPF_X: /* ALU_REG */ | 854 | case BPF_ALU | BPF_MOD | BPF_X: /* ALU_REG */ |
855 | case BPF_ALU | BPF_LSH | BPF_X: /* ALU_REG */ | 855 | case BPF_ALU | BPF_LSH | BPF_X: /* ALU_REG */ |
856 | case BPF_ALU | BPF_RSH | BPF_X: /* ALU_REG */ | 856 | case BPF_ALU | BPF_RSH | BPF_X: /* ALU_REG */ |
857 | case BPF_ALU | BPF_ARSH | BPF_X: /* ALU_REG */ | ||
857 | src = ebpf_to_mips_reg(ctx, insn, src_reg_no_fp); | 858 | src = ebpf_to_mips_reg(ctx, insn, src_reg_no_fp); |
858 | dst = ebpf_to_mips_reg(ctx, insn, dst_reg); | 859 | dst = ebpf_to_mips_reg(ctx, insn, dst_reg); |
859 | if (src < 0 || dst < 0) | 860 | if (src < 0 || dst < 0) |
@@ -913,6 +914,9 @@ static int build_one_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, | |||
913 | case BPF_RSH: | 914 | case BPF_RSH: |
914 | emit_instr(ctx, srlv, dst, dst, src); | 915 | emit_instr(ctx, srlv, dst, dst, src); |
915 | break; | 916 | break; |
917 | case BPF_ARSH: | ||
918 | emit_instr(ctx, srav, dst, dst, src); | ||
919 | break; | ||
916 | default: | 920 | default: |
917 | pr_err("ALU_REG NOT HANDLED\n"); | 921 | pr_err("ALU_REG NOT HANDLED\n"); |
918 | return -EINVAL; | 922 | return -EINVAL; |