summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiezhu Yang <yangtiezhu@loongson.cn>2026-04-22 10:45:34 +0300
committerHuacai Chen <chenhuacai@loongson.cn>2026-04-22 10:45:34 +0300
commit534768410598539712e0097e060331c85f2d0c9d (patch)
tree434f20775d20fb23bcd58795c0904f1e24b80ad1
parent1dd3e8a8eeb4059fb34b07578362380cf35b7ed5 (diff)
downloadlinux-534768410598539712e0097e060331c85f2d0c9d.tar.xz
LoongArch: BPF: Add the default case in emit_atomic() and rename it
Like the other archs such as x86 and riscv, add the default case in emit_atomic() to print an error message for the invalid opcode and return -EINVAL, then make its return type as int. While at it, given that all of the instructions in emit_atomic() are only read-modify-write instructions, rename emit_atomic() to emit_atomic_rmw() to make it clear, because there will be a new function emit_atomic_ld_st() for load-acquire and store-release instructions in the later patch. Acked-by: Hengqi Chen <hengqi.chen@gmail.com> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
-rw-r--r--arch/loongarch/net/bpf_jit.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/loongarch/net/bpf_jit.c b/arch/loongarch/net/bpf_jit.c
index 9cb796e16379..fefda4050a20 100644
--- a/arch/loongarch/net/bpf_jit.c
+++ b/arch/loongarch/net/bpf_jit.c
@@ -344,7 +344,7 @@ toofar:
#undef jmp_offset
}
-static void emit_atomic(const struct bpf_insn *insn, struct jit_ctx *ctx)
+static int emit_atomic_rmw(const struct bpf_insn *insn, struct jit_ctx *ctx)
{
const u8 t1 = LOONGARCH_GPR_T1;
const u8 t2 = LOONGARCH_GPR_T2;
@@ -448,7 +448,12 @@ static void emit_atomic(const struct bpf_insn *insn, struct jit_ctx *ctx)
emit_zext_32(ctx, r0, true);
}
break;
+ default:
+ pr_err_once("bpf-jit: invalid atomic read-modify-write opcode %02x\n", imm);
+ return -EINVAL;
}
+
+ return 0;
}
static bool is_signed_bpf_cond(u8 cond)
@@ -1256,7 +1261,9 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, bool ext
case BPF_STX | BPF_ATOMIC | BPF_W:
case BPF_STX | BPF_ATOMIC | BPF_DW:
- emit_atomic(insn, ctx);
+ ret = emit_atomic_rmw(insn, ctx);
+ if (ret)
+ return ret;
break;
/* Speculation barrier */