On 24/6/26 06:45, Andrii Nakryiko wrote: > On Mon, Jun 22, 2026 at 7:37 AM Leon Hwang <[email protected]> wrote: [...] >> + >> +static int percpu_array_map_direct_value_meta(const struct bpf_map *map, >> u64 imm, u32 *off) >> +{ >> + struct bpf_array *array = container_of(map, struct bpf_array, map); >> + u64 base = (u64)(__force unsigned long) array->pptrs[0]; >> + u64 range = array->elem_size; >> + >> + if (map->max_entries != 1) >> + return -EOPNOTSUPP; >> + if (imm < base || imm >= base + range) > > nit: not sure what's the value of range local variable, single place > where you use array->elem_size >
Hmm, this was copied from array_map_direct_value_meta(). Will drop "range", and use "array->elem_size" here. >> + return -ENOENT; >> + if (!bpf_jit_supports_percpu_insn()) >> + return -EOPNOTSUPP; >> + >> + *off = imm - base; >> + return 0; >> +} >> + [...] >> diff --git a/kernel/bpf/const_fold.c b/kernel/bpf/const_fold.c >> index b2a19acadb91..5787246bef30 100644 >> --- a/kernel/bpf/const_fold.c >> +++ b/kernel/bpf/const_fold.c >> @@ -182,7 +182,6 @@ static void const_reg_xfer(struct bpf_verifier_env *env, >> struct const_arg_info * >> u64 val = 0; >> >> if (!bpf_map_is_rdonly(map) || >> !map->ops->map_direct_value_addr || >> - map->map_type == BPF_MAP_TYPE_INSN_ARRAY || > > can you please elaborate on why this change is needed? > This was suggested by Alexei in v4: https://lore.kernel.org/bpf/caadnvqj0o38xxn6e5ub7kwyozpiaevr9mwdnxv0gbxyguvt...@mail.gmail.com/ Thanks, Leon >> off < 0 || off + size > map->value_size || >> bpf_map_direct_read(map, off, size, &val, is_ldsx)) { >> *dst = unknown; > > [...]

