• David Vernet's avatar
    bpf: Enable cpumasks to be queried and used as kptrs · 516f4d33
    David Vernet authored
    Certain programs may wish to be able to query cpumasks. For example, if
    a program that is tracing percpu operations wishes to track which tasks
    end up running on which CPUs, it could be useful to associate that with
    the tasks' cpumasks. Similarly, programs tracking NUMA allocations, CPU
    scheduling domains, etc, could potentially benefit from being able to
    see which CPUs a task could be migrated to.
    
    This patch enables these types of use cases by introducing a series of
    bpf_cpumask_* kfuncs. Amongst these kfuncs, there are two separate
    "classes" of operations:
    
    1. kfuncs which allow the caller to allocate and mutate their own
       cpumask kptrs in the form of a struct bpf_cpumask * object. Such
       kfuncs include e.g. bpf_cpumask_create() to allocate the cpumask, and
       bpf_cpumask_or() to mutate it. "Regular" cpumasks such as p->cpus_ptr
       may not be passed to these kfuncs, and the verifier will ensure this
       is the case by comparing BTF IDs.
    
    2. Read-only operations which operate on const struct cpumask *
       arguments. For example, bpf_cpumask_test_cpu(), which tests whether a
       CPU is set in the cpumask. Any trusted struct cpumask * or struct
       bpf_cpumask * may be passed to these kfuncs. The verifier allows
       struct bpf_cpumask * even though the kfunc is defined with struct
       cpumask * because the first element of a struct bpf_cpumask is a
       cpumask_t, so it is safe to cast.
    
    A follow-on patch will add selftests which validate these kfuncs, and
    another will document them.
    Signed-off-by: default avatarDavid Vernet <void@manifault.com>
    Link: https://lore.kernel.org/r/20230125143816.721952-3-void@manifault.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    516f4d33
Makefile 1.75 KB