Re: [PATCH bpf-next 1/6] bpf: Derive the atomic load register in one place
Eduard Zingerman <[email protected]>
| Newsgroups | org.kernel.vger.bpf |
|---|---|
| Message-ID | <[email protected]> |
On Mon, 2026-08-10 at 15:43 +0200, Daniel Borkmann wrote:
...
> --- a/include/linux/filter.h
> +++ b/include/linux/filter.h
> @@ -414,6 +414,30 @@ static inline bool bpf_atomic_is_load_acq(const struct bpf_insn *insn)
> insn->imm == BPF_LOAD_ACQ;
> }
>
> +/*
> + * Given an instruction @insn, return the number of the BPF register that a
> + * BPF_ATOMIC reads the value at its memory operand into, or -1 if there is
> + * no such register. That is the register a BPF_PROBE_ATOMIC has to clear when
> + * the access faults. Like bpf_atomic_is_load_acq(), @insn is not assumed to
> + * be a BPF_ATOMIC here.
> + */
> +static inline int bpf_atomic_load_reg(const struct bpf_insn *insn)
> +{
> + if (BPF_CLASS(insn->code) != BPF_STX ||
> + (BPF_MODE(insn->code) != BPF_ATOMIC &&
> + BPF_MODE(insn->code) != BPF_PROBE_ATOMIC))
> + return -1;
> +
> + switch (insn->imm) {
> + case BPF_LOAD_ACQ:
> + return insn->dst_reg;
> + case BPF_CMPXCHG:
> + return BPF_REG_0;
> + default:
> + return (insn->imm & BPF_FETCH) ? insn->src_reg : -1;
> + }
> +}
> +
Hi Daniel,
Note that there is already a very similar fixups.c:insn_def_regno().
Should we try to avoid duplication?
...