diff options
Diffstat (limited to 'arch/loongarch/net/bpf_jit.c')
| -rw-r--r-- | arch/loongarch/net/bpf_jit.c | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/loongarch/net/bpf_jit.c b/arch/loongarch/net/bpf_jit.c index 4fcd6cd6da23..e73323d759d0 100644 --- a/arch/loongarch/net/bpf_jit.c +++ b/arch/loongarch/net/bpf_jit.c @@ -201,6 +201,11 @@ bool bpf_jit_supports_kfunc_call(void)  	return true;  } +bool bpf_jit_supports_far_kfunc_call(void) +{ +	return true; +} +  /* initialized on the first pass of build_body() */  static int out_offset = -1;  static int emit_bpf_tail_call(struct jit_ctx *ctx) @@ -465,7 +470,6 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, bool ext  	const u8 dst = regmap[insn->dst_reg];  	const s16 off = insn->off;  	const s32 imm = insn->imm; -	const u64 imm64 = (u64)(insn + 1)->imm << 32 | (u32)insn->imm;  	const bool is32 = BPF_CLASS(insn->code) == BPF_ALU || BPF_CLASS(insn->code) == BPF_JMP32;  	switch (code) { @@ -923,8 +927,12 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, bool ext  	/* dst = imm64 */  	case BPF_LD | BPF_IMM | BPF_DW: +	{ +		const u64 imm64 = (u64)(insn + 1)->imm << 32 | (u32)insn->imm; +  		move_imm(ctx, dst, imm64, is32);  		return 1; +	}  	/* dst = *(size *)(src + off) */  	case BPF_LDX | BPF_MEM | BPF_B:  |