diff options
Diffstat (limited to 'arch/mips/net/ebpf_jit.c')
| -rw-r--r-- | arch/mips/net/ebpf_jit.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/mips/net/ebpf_jit.c b/arch/mips/net/ebpf_jit.c index 46b76751f3a5..561154cbcc40 100644 --- a/arch/mips/net/ebpf_jit.c +++ b/arch/mips/net/ebpf_jit.c @@ -604,6 +604,7 @@ static void emit_const_to_reg(struct jit_ctx *ctx, int dst, u64 value)  static int emit_bpf_tail_call(struct jit_ctx *ctx, int this_idx)  {  	int off, b_off; +	int tcc_reg;  	ctx->flags |= EBPF_SEEN_TC;  	/* @@ -616,14 +617,14 @@ static int emit_bpf_tail_call(struct jit_ctx *ctx, int this_idx)  	b_off = b_imm(this_idx + 1, ctx);  	emit_instr(ctx, bne, MIPS_R_AT, MIPS_R_ZERO, b_off);  	/* -	 * if (--TCC < 0) +	 * if (TCC-- < 0)  	 *     goto out;  	 */  	/* Delay slot */ -	emit_instr(ctx, daddiu, MIPS_R_T5, -		   (ctx->flags & EBPF_TCC_IN_V1) ? MIPS_R_V1 : MIPS_R_S4, -1); +	tcc_reg = (ctx->flags & EBPF_TCC_IN_V1) ? MIPS_R_V1 : MIPS_R_S4; +	emit_instr(ctx, daddiu, MIPS_R_T5, tcc_reg, -1);  	b_off = b_imm(this_idx + 1, ctx); -	emit_instr(ctx, bltz, MIPS_R_T5, b_off); +	emit_instr(ctx, bltz, tcc_reg, b_off);  	/*  	 * prog = array->ptrs[index];  	 * if (prog == NULL) @@ -1803,7 +1804,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)  	unsigned int image_size;  	u8 *image_ptr; -	if (!prog->jit_requested || MIPS_ISA_REV < 2) +	if (!prog->jit_requested)  		return prog;  	tmp = bpf_jit_blind_constants(prog);  | 
