On Fri, Mar 24, 2023 at 6:09 PM JP Kobryn <inwardvessel@xxxxxxxxx> wrote: > > This patch prevents races on the print function pointer, allowing the > libbpf_set_print() function to become thread safe. > > Signed-off-by: JP Kobryn <inwardvessel@xxxxxxxxx> > --- I reworked the patch subject to "libbpf: Ensure print callback usage is thread-safe", it felt more on point. Also changed to "thread-safe", which seems to be a proper spelling for this term. Applied to bpf-next, thanks! > tools/lib/bpf/libbpf.c | 9 ++++++--- > tools/lib/bpf/libbpf.h | 3 +++ > 2 files changed, 9 insertions(+), 3 deletions(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index f6a071db5c6e..15737d7b5a28 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -216,9 +216,10 @@ static libbpf_print_fn_t __libbpf_pr = __base_pr; > > libbpf_print_fn_t libbpf_set_print(libbpf_print_fn_t fn) > { > - libbpf_print_fn_t old_print_fn = __libbpf_pr; > + libbpf_print_fn_t old_print_fn; > + > + old_print_fn = __atomic_exchange_n(&__libbpf_pr, fn, __ATOMIC_RELAXED); > > - __libbpf_pr = fn; > return old_print_fn; > } > > @@ -227,8 +228,10 @@ void libbpf_print(enum libbpf_print_level level, const char *format, ...) > { > va_list args; > int old_errno; > + libbpf_print_fn_t print_fn; > > - if (!__libbpf_pr) > + print_fn = __atomic_load_n(&__libbpf_pr, __ATOMIC_RELAXED); > + if (!print_fn) > return; > > old_errno = errno; > diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h > index 1615e55e2e79..4478809ff9ca 100644 > --- a/tools/lib/bpf/libbpf.h > +++ b/tools/lib/bpf/libbpf.h > @@ -99,6 +99,9 @@ typedef int (*libbpf_print_fn_t)(enum libbpf_print_level level, > /** > * @brief **libbpf_set_print()** sets user-provided log callback function to > * be used for libbpf warnings and informational messages. > + * > + * This function is thread safe. > + * I moved this part to after @return spec, where details about functions are normally put. > * @param fn The log print function. If NULL, libbpf won't print anything. > * @return Pointer to old print function. > */ > -- > 2.39.2 >