Re: [PATCH bpf-next] libbpf: synchronize access to print function pointer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
>




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux