On Fri, Sep 5, 2025 at 9:45 AM Mykyta Yatsenko <mykyta.yatsenko5@xxxxxxxxx> wrote: > > From: Mykyta Yatsenko <yatsenko@xxxxxxxx> > > This patch adds necessary plumbing in verifier, syscall and maps to > support handling new kfunc bpf_task_work_schedule and kernel structure > bpf_task_work. The idea is similar to how we already handle bpf_wq and > bpf_timer. > verifier changes validate calls to bpf_task_work_schedule to make sure > it is safe and expected invariants hold. > btf part is required to detect bpf_task_work structure inside map value > and store its offset, which will be used in the next patch to calculate > key and value addresses. > arraymap and hashtab changes are needed to handle freeing of the > bpf_task_work: run code needed to deinitialize it, for example cancel > task_work callback if possible. > The use of bpf_task_work and proper implementation for kfuncs are > introduced in the next patch. > > Signed-off-by: Mykyta Yatsenko <yatsenko@xxxxxxxx> > --- > include/linux/bpf.h | 11 ++++ > include/uapi/linux/bpf.h | 4 ++ > kernel/bpf/arraymap.c | 8 +-- > kernel/bpf/btf.c | 9 +++- > kernel/bpf/hashtab.c | 19 ++++--- > kernel/bpf/helpers.c | 40 ++++++++++++++ > kernel/bpf/syscall.c | 16 +++++- > kernel/bpf/verifier.c | 97 +++++++++++++++++++++++++++++++++- > tools/include/uapi/linux/bpf.h | 4 ++ > 9 files changed, 193 insertions(+), 15 deletions(-) > LGMT Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > diff --git a/include/linux/bpf.h b/include/linux/bpf.h > index 8f6e87f0f3a8..febb4ca68401 100644 > --- a/include/linux/bpf.h > +++ b/include/linux/bpf.h > @@ -206,6 +206,7 @@ enum btf_field_type { > BPF_WORKQUEUE = (1 << 10), > BPF_UPTR = (1 << 11), > BPF_RES_SPIN_LOCK = (1 << 12), > + BPF_TASK_WORK = (1 << 13), > }; > [...]