Re: [PATCH bpf-next 1/6] bpf: Derive the atomic load register in one place
Daniel Borkmann <[email protected]>
| Newsgroups | org.kernel.vger.bpf |
|---|---|
| Message-ID | <[email protected]> |
On 8/10/26 7:10 PM, Eduard Zingerman wrote:
> 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?
>
> ...
Yeap, I'll look into it to consolidate.