From: Martin KaFai Lau <martin.lau@linux.dev>
To: Kui-Feng Lee <sinquersw@gmail.com>, Kui-Feng Lee <kuifeng@meta.com>
Cc: bpf@vger.kernel.org, ast@kernel.org, song@kernel.org,
kernel-team@meta.com, andrii@kernel.org, sdf@google.com
Subject: Re: [PATCH bpf-next v7 5/8] bpf: Update the struct_ops of a bpf_link.
Date: Fri, 17 Mar 2023 22:38:49 -0700 [thread overview]
Message-ID: <b977a7d4-4c82-eb46-3457-4a92ec94de46@linux.dev> (raw)
In-Reply-To: <6fed9361-ba07-c387-14d4-2fee2d161b5f@gmail.com>
On 3/17/23 6:11 PM, Kui-Feng Lee wrote:
>>> --- a/net/bpf/bpf_dummy_struct_ops.c
>>> +++ b/net/bpf/bpf_dummy_struct_ops.c
>>> @@ -222,12 +222,18 @@ static void bpf_dummy_unreg(void *kdata)
>>> {
>>> }
>>> +static int bpf_dummy_update(void *kdata, void *old_kdata)
>>> +{
>>> + return -EOPNOTSUPP;
>>> +}
>>> +
>>> struct bpf_struct_ops bpf_bpf_dummy_ops = {
>>> .verifier_ops = &bpf_dummy_verifier_ops,
>>> .init = bpf_dummy_init,
>>> .check_member = bpf_dummy_ops_check_member,
>>> .init_member = bpf_dummy_init_member,
>>> .reg = bpf_dummy_reg,
>>> + .update = bpf_dummy_update,
>>
>> When looking at this together in patch 5, the changes in
>> bpf_dummy_struct_ops.c should not be needed.
>
> I don't follow you.
> If we don't assign a function to .update, it will fail in
> bpf_struct_ops_map_link_update(). Of course, I can add a check
> in bpf_struct_ops_map_link_update() to return an error if .update
> is NULL.
Yes, test ->update in bpf_struct_ops.c is better but not in
bpf_struct_ops_map_link_update (more on this later). It does not need the dummy
struct_ops to test the link. The dummy struct_ops was created to catch the
trampoline img issue with ops/func having different args and return value.
It is better to enforce the BPF_F_LINK struct_ops must support both ->validate
and ->update at the beginning and it can be revisited later. The current
'->validate' testing in bpf_struct_ops_map_update_elem() in patch 3 is too late.
Being able to '->validate' is particularly important for BPF_F_LINK struct_ops.
Testing '->validate' and '->update' in bpf_struct_ops_init() will be too strict
for now though when considering other on-going efforts to support struct_ops in
other subsystems. A better place to test both '->validate' and '->update' should
be in bpf_struct_ops_map_alloc(). It should return -ENOTSUPP when trying to
creating a struct_ops BPF_F_LINK map without st_ops->validate and st_ops->update.
next prev parent reply other threads:[~2023-03-18 5:38 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-16 2:36 [PATCH bpf-next v7 0/8] Transit between BPF TCP congestion controls Kui-Feng Lee
2023-03-16 2:36 ` [PATCH bpf-next v7 1/8] bpf: Retire the struct_ops map kvalue->refcnt Kui-Feng Lee
2023-03-17 16:47 ` Martin KaFai Lau
2023-03-17 20:41 ` Kui-Feng Lee
2023-03-16 2:36 ` [PATCH bpf-next v7 2/8] net: Update an existing TCP congestion control algorithm Kui-Feng Lee
2023-03-17 15:23 ` Daniel Borkmann
2023-03-17 17:18 ` Martin KaFai Lau
2023-03-17 17:23 ` Daniel Borkmann
2023-03-17 21:46 ` Kui-Feng Lee
2023-03-17 23:07 ` Kui-Feng Lee
2023-03-16 2:36 ` [PATCH bpf-next v7 3/8] bpf: Create links for BPF struct_ops maps Kui-Feng Lee
2023-03-17 18:10 ` Martin KaFai Lau
2023-03-17 20:52 ` Kui-Feng Lee
2023-03-16 2:36 ` [PATCH bpf-next v7 4/8] libbpf: Create a bpf_link in bpf_map__attach_struct_ops() Kui-Feng Lee
2023-03-17 18:44 ` Martin KaFai Lau
2023-03-17 21:00 ` Kui-Feng Lee
2023-03-17 22:23 ` Andrii Nakryiko
2023-03-17 23:48 ` Kui-Feng Lee
2023-03-16 2:36 ` [PATCH bpf-next v7 5/8] bpf: Update the struct_ops of a bpf_link Kui-Feng Lee
2023-03-17 19:23 ` Martin KaFai Lau
2023-03-17 21:39 ` Kui-Feng Lee
2023-03-18 1:11 ` Kui-Feng Lee
2023-03-18 5:38 ` Martin KaFai Lau [this message]
2023-03-17 22:27 ` Andrii Nakryiko
2023-03-18 0:41 ` Kui-Feng Lee
2023-03-16 2:36 ` [PATCH bpf-next v7 6/8] libbpf: Update a bpf_link with another struct_ops Kui-Feng Lee
2023-03-17 19:42 ` Martin KaFai Lau
2023-03-17 21:40 ` Kui-Feng Lee
2023-03-17 22:33 ` Andrii Nakryiko
2023-03-18 1:17 ` Kui-Feng Lee
2023-03-16 2:36 ` [PATCH bpf-next v7 7/8] libbpf: Use .struct_ops.link section to indicate a struct_ops with a link Kui-Feng Lee
2023-03-17 22:35 ` Andrii Nakryiko
2023-03-16 2:36 ` [PATCH bpf-next v7 8/8] selftests/bpf: Test switching TCP Congestion Control algorithms Kui-Feng Lee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b977a7d4-4c82-eb46-3457-4a92ec94de46@linux.dev \
--to=martin.lau@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=kernel-team@meta.com \
--cc=kuifeng@meta.com \
--cc=sdf@google.com \
--cc=sinquersw@gmail.com \
--cc=song@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.