Re: [PATCH bpf-next 2/2] bpf: Show total linked progs cnt instead of selector in trampoline ksym

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

 



On Tue, May 9, 2023 at 8:15 AM Yafang Shao <laoar.shao@xxxxxxxxx> wrote:
>
> After commit e21aa341785c ("bpf: Fix fexit trampoline."), the selector
> is only used to indicate how many times the bpf trampoline image are
> updated and been displayed in the trampoline ksym name. After the
> trampoline is freed, the count will start from 0 again.
> So the count is a useless value to the user, we'd better
> show a more meaningful value like how many progs are linked to this
> trampoline. After that change, the selector can be removed eventally.
> If the user want to check whether the bpf trampoline image has been updated
> or not, the user can also compare the address. Each time the trampoline
> image is updated, the address will change consequently.

I wonder whether this will cause confusion to some users. Maybe the saving
doesn't worth the churn.

Song

>
> Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx>
> ---
>  include/linux/bpf.h     | 1 -
>  kernel/bpf/trampoline.c | 7 ++-----
>  2 files changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/include/linux/bpf.h b/include/linux/bpf.h
> index 456f33b..36e4b2d 100644
> --- a/include/linux/bpf.h
> +++ b/include/linux/bpf.h
> @@ -1125,7 +1125,6 @@ struct bpf_trampoline {
>         int progs_cnt[BPF_TRAMP_MAX];
>         /* Executable image of trampoline */
>         struct bpf_tramp_image *cur_image;
> -       u64 selector;
>         struct module *mod;
>  };
>
> diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c
> index 7067cdf..be37d87 100644
> --- a/kernel/bpf/trampoline.c
> +++ b/kernel/bpf/trampoline.c
> @@ -410,11 +410,10 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut
>                 err = unregister_fentry(tr, tr->cur_image->image);
>                 bpf_tramp_image_put(tr->cur_image);
>                 tr->cur_image = NULL;
> -               tr->selector = 0;
>                 goto out;
>         }
>
> -       im = bpf_tramp_image_alloc(tr->key, tr->selector);
> +       im = bpf_tramp_image_alloc(tr->key, total);
>         if (IS_ERR(im)) {
>                 err = PTR_ERR(im);
>                 goto out;
> @@ -451,8 +450,7 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut
>
>         set_memory_rox((long)im->image, 1);
>
> -       WARN_ON(tr->cur_image && tr->selector == 0);
> -       WARN_ON(!tr->cur_image && tr->selector);
> +       WARN_ON(tr->cur_image && total == 0);
>         if (tr->cur_image)
>                 /* progs already running at this address */
>                 err = modify_fentry(tr, tr->cur_image->image, im->image, lock_direct_mutex);
> @@ -482,7 +480,6 @@ static int bpf_trampoline_update(struct bpf_trampoline *tr, bool lock_direct_mut
>         if (tr->cur_image)
>                 bpf_tramp_image_put(tr->cur_image);
>         tr->cur_image = im;
> -       tr->selector++;
>  out:
>         /* If any error happens, restore previous flags */
>         if (err)
> --
> 1.8.3.1
>
>





[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