All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 bpf-next 0/4] Support associating BPF programs with struct_ops
@ 2025-10-16 20:44 Amery Hung
  2025-10-16 20:45 ` [PATCH v2 bpf-next 1/4] bpf: Allow verifier to fixup kernel module kfuncs Amery Hung
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Amery Hung @ 2025-10-16 20:44 UTC (permalink / raw)
  To: bpf
  Cc: netdev, alexei.starovoitov, andrii, daniel, tj, martin.lau,
	ameryhung, kernel-team

v1 -> v2
   - Poison st_ops_assoc when reusing the program in more than one
     struct_ops maps and add a helper to access the pointer (Andrii)
   - Minor style and naming changes (Andrii)

---

Hi,

This patchset adds a new BPF command BPF_STRUCT_OPS_ASSOCIATE_PROG to
the bpf() syscall to allow associating a BPF program with a struct_ops.
The command is introduced to address a emerging need from struct_ops
users. As the number of subsystems adopting struct_ops grows, more
users are building their struct_ops-based solution with some help from
other BPF programs. For exmample, scx_layer uses a syscall program as
a user space trigger to refresh layers [0]. It also uses tracing program
to infer whether a task is using GPU and needs to be prioritized [1]. In
these use cases, when there are multiple struct_ops instances, the
struct_ops kfuncs called from different BPF programs, whether struct_ops
or not needs to be able to refer to a specific one, which currently is
not possible.

The new BPF command will allow users to explicitly associate a BPF
program with a struct_ops map. The libbpf wrapper can be called after
loading programs and before attaching programs and struct_ops.

Internally, it will set prog->aux->st_ops_assoc to the struct_ops
struct (i.e., kdata). struct_ops kfuncs can then get the associated
struct_ops by adding a "__prog" argument. The value of the speical
argument will be fixed up by the verifier during verification.

The command conceptually associates the implementation of BPF programs
with struct_ops map, not the attachment. A program associated with the
map will take a refcount of it so that st_ops_assoc always points to a
valid struct_ops struct. However, the struct_ops can be in an
uninitialized or unattached state. The struct_ops implementer will be
responsible to maintain and check the state of the associated
struct_ops before accessing it.

We can also consider support associating struct_ops link with BPF
programs, which on one hand make struct_ops implementer's job easier,
but might complicate libbpf workflow and does not apply to legacy
struct_ops attachment.

[0] https://github.com/sched-ext/scx/blob/main/scheds/rust/scx_layered/src/bpf/main.bpf.c#L557
[1] https://github.com/sched-ext/scx/blob/main/scheds/rust/scx_layered/src/bpf/main.bpf.c#L754

---

Amery Hung (4):
  bpf: Allow verifier to fixup kernel module kfuncs
  bpf: Support associating BPF program with struct_ops
  libbpf: Add bpf_prog_assoc_struct_ops() API
  selftests/bpf: Test BPF_PROG_ASSOC_STRUCT_OPS command

 include/linux/bpf.h                           |  16 +++
 include/uapi/linux/bpf.h                      |  17 +++
 kernel/bpf/bpf_struct_ops.c                   |  44 ++++++++
 kernel/bpf/core.c                             |   6 +
 kernel/bpf/syscall.c                          |  50 +++++++++
 kernel/bpf/verifier.c                         |   3 +-
 tools/include/uapi/linux/bpf.h                |  17 +++
 tools/lib/bpf/bpf.c                           |  19 ++++
 tools/lib/bpf/bpf.h                           |  20 ++++
 tools/lib/bpf/libbpf.map                      |   1 +
 .../bpf/prog_tests/test_struct_ops_assoc.c    |  76 +++++++++++++
 .../selftests/bpf/progs/struct_ops_assoc.c    | 105 ++++++++++++++++++
 .../selftests/bpf/test_kmods/bpf_testmod.c    |  17 +++
 .../bpf/test_kmods/bpf_testmod_kfunc.h        |   1 +
 14 files changed, 390 insertions(+), 2 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/prog_tests/test_struct_ops_assoc.c
 create mode 100644 tools/testing/selftests/bpf/progs/struct_ops_assoc.c

-- 
2.47.3


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

end of thread, other threads:[~2025-10-17 17:06 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-16 20:44 [PATCH v2 bpf-next 0/4] Support associating BPF programs with struct_ops Amery Hung
2025-10-16 20:45 ` [PATCH v2 bpf-next 1/4] bpf: Allow verifier to fixup kernel module kfuncs Amery Hung
2025-10-16 20:45 ` [PATCH v2 bpf-next 2/4] bpf: Support associating BPF program with struct_ops Amery Hung
2025-10-16 23:51   ` Martin KaFai Lau
2025-10-16 23:58     ` Amery Hung
2025-10-17  0:19   ` Martin KaFai Lau
2025-10-17 16:38     ` Amery Hung
2025-10-17 16:49       ` Amery Hung
2025-10-17 14:18   ` kernel test robot
2025-10-17 16:03   ` kernel test robot
2025-10-17 17:05   ` kernel test robot
2025-10-16 20:45 ` [PATCH v2 bpf-next 3/4] libbpf: Add bpf_prog_assoc_struct_ops() API Amery Hung
2025-10-16 20:45 ` [PATCH v2 bpf-next 4/4] selftests/bpf: Test BPF_PROG_ASSOC_STRUCT_OPS command Amery Hung

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.