All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next v8 0/9] bpf: Introduce deferred task context execution
@ 2025-09-23 11:23 Mykyta Yatsenko
  2025-09-23 11:23 ` [PATCH bpf-next v8 1/9] bpf: refactor special field-type detection Mykyta Yatsenko
                   ` (9 more replies)
  0 siblings, 10 replies; 16+ messages in thread
From: Mykyta Yatsenko @ 2025-09-23 11:23 UTC (permalink / raw)
  To: bpf, ast, andrii, daniel, kafai, kernel-team, eddyz87, memxor
  Cc: Mykyta Yatsenko

From: Mykyta Yatsenko <yatsenko@meta.com>

This patch introduces a new mechanism for BPF programs to schedule
deferred execution in the context of a specific task using the kernel’s
task_work infrastructure.

The new bpf_task_work interface enables BPF use cases that
require sleepable subprogram execution within task context, for example,
scheduling sleepable function from the context that does not
allow sleepable, such as NMI.

Introduced kfuncs bpf_task_work_schedule_signal() and
bpf_task_work_schedule_resume() for scheduling BPF callbacks correspond
to different modes used by task_work (TWA_SIGNAL or TWA_RESUME).

The implementation manages scheduling state via metadata objects (struct
bpf_task_work_context). Pointers to bpf_task_work_context are stored
in BPF map values. State transitions are handled via an atomic
state machine (bpf_task_work_state) to ensure correctness under
concurrent usage and deletion, lifetime is guarded by refcounting and
RCU Tasks Trace.
Kfuncs call task_work_add() indirectly via irq_work to avoid locking in
potentially NMI context.

Changelog:
---
v7 -> v8
v7: https://lore.kernel.org/bpf/20250922232611.614512-1-mykyta.yatsenko5@gmail.com/
 * Fix unused variable warning in patch 1
 * Decrease stress test time from 2 to 1 second
 * Went through CI warnings, other than unused variable, there are just
 2 new in kernel/bpf/helpers.c related to newly introduced kfuncs, these
 look expected.

v6 -> v7
v6: https://lore.kernel.org/bpf/20250918132615.193388-1-mykyta.yatsenko5@gmail.com/
 * Added stress test
 * Extending refactoring in patch 1
 * Changing comment and removing one check for map->usercnt in patch 7

v5 -> v6
v5: https://lore.kernel.org/bpf/20250916233651.258458-1-mykyta.yatsenko5@gmail.com/
 * Fixing readability in verifier.c:check_map_field_pointer()
 * Removing BUG_ON from helpers.c

v4 -> v5
v4:
https://lore.kernel.org/all/20250915201820.248977-1-mykyta.yatsenko5@gmail.com/
 * Fix invalid/null pointer dereference bug, reported by syzbot
 * Nits in selftests

v3 -> v4
v3: https://lore.kernel.org/all/20250905164508.1489482-1-mykyta.yatsenko5@gmail.com/
 * Modify async callback return value processing in verifier, to allow
non-zero return values.
 * Change return type of the callback from void to int, as verifier
expects scalar value.
 * Switched to void* for bpf_map API kfunc arguments to avoid casts.
 * Addressing numerous nits and small improvements.

v2 -> v3
v2: https://lore.kernel.org/all/20250815192156.272445-1-mykyta.yatsenko5@gmail.com/
 * Introduce ref counting
 * Add patches with minor verifier and btf.c refactorings to avoid code
duplication
 * Rework initiation of the task work scheduling to handle race with map
usercnt dropping to zero

Mykyta Yatsenko (9):
  bpf: refactor special field-type detection
  bpf: extract generic helper from process_timer_func()
  bpf: htab: extract helper for freeing special structs
  bpf: verifier: permit non-zero returns from async callbacks
  bpf: bpf task work plumbing
  bpf: extract map key pointer calculation
  bpf: task work scheduling kfuncs
  selftests/bpf: BPF task work scheduling tests
  selftests/bpf: add bpf task work stress tests

 include/linux/bpf.h                           |  11 +
 include/uapi/linux/bpf.h                      |   4 +
 kernel/bpf/arraymap.c                         |   8 +-
 kernel/bpf/btf.c                              |  91 ++---
 kernel/bpf/hashtab.c                          |  43 ++-
 kernel/bpf/helpers.c                          | 358 +++++++++++++++++-
 kernel/bpf/syscall.c                          |  16 +-
 kernel/bpf/verifier.c                         | 169 ++++++++-
 tools/include/uapi/linux/bpf.h                |   4 +
 .../bpf/prog_tests/task_work_stress.c         | 130 +++++++
 .../selftests/bpf/prog_tests/test_task_work.c | 150 ++++++++
 tools/testing/selftests/bpf/progs/task_work.c | 107 ++++++
 .../selftests/bpf/progs/task_work_fail.c      |  96 +++++
 .../selftests/bpf/progs/task_work_stress.c    |  73 ++++
 14 files changed, 1148 insertions(+), 112 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/prog_tests/task_work_stress.c
 create mode 100644 tools/testing/selftests/bpf/prog_tests/test_task_work.c
 create mode 100644 tools/testing/selftests/bpf/progs/task_work.c
 create mode 100644 tools/testing/selftests/bpf/progs/task_work_fail.c
 create mode 100644 tools/testing/selftests/bpf/progs/task_work_stress.c

-- 
2.51.0


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2026-07-24 15:59 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-23 11:23 [PATCH bpf-next v8 0/9] bpf: Introduce deferred task context execution Mykyta Yatsenko
2025-09-23 11:23 ` [PATCH bpf-next v8 1/9] bpf: refactor special field-type detection Mykyta Yatsenko
2025-09-23 11:23 ` [PATCH bpf-next v8 2/9] bpf: extract generic helper from process_timer_func() Mykyta Yatsenko
2025-09-23 11:23 ` [PATCH bpf-next v8 3/9] bpf: htab: extract helper for freeing special structs Mykyta Yatsenko
2025-09-23 11:23 ` [PATCH bpf-next v8 4/9] bpf: verifier: permit non-zero returns from async callbacks Mykyta Yatsenko
2025-09-23 11:24 ` [PATCH bpf-next v8 5/9] bpf: bpf task work plumbing Mykyta Yatsenko
2025-09-23 11:24 ` [PATCH bpf-next v8 6/9] bpf: extract map key pointer calculation Mykyta Yatsenko
2025-09-23 11:24 ` [PATCH bpf-next v8 7/9] bpf: task work scheduling kfuncs Mykyta Yatsenko
2026-07-24 11:22   ` Heiko Carstens
2026-07-24 13:06     ` Mykyta Yatsenko
2026-07-24 15:29       ` Heiko Carstens
2025-09-23 11:24 ` [PATCH bpf-next v8 8/9] selftests/bpf: BPF task work scheduling tests Mykyta Yatsenko
2025-09-23 14:59   ` Alexei Starovoitov
2025-09-23 15:50     ` Ihor Solodrai
2025-09-23 11:24 ` [PATCH bpf-next v8 9/9] selftests/bpf: add bpf task work stress tests Mykyta Yatsenko
2025-09-23 15:20 ` [PATCH bpf-next v8 0/9] bpf: Introduce deferred task context execution patchwork-bot+netdevbpf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.