From: Mat Martineau <mathew.j.martineau@linux.intel.com>
To: Geliang Tang <geliang.tang@suse.com>
Cc: mptcp@lists.linux.dev
Subject: Re: [PATCH mptcp-next v6 05/11] mptcp: add subflow_set_scheduled helper
Date: Wed, 1 Jun 2022 17:23:10 -0700 (PDT) [thread overview]
Message-ID: <3468a375-3122-ad91-9955-78236a3be365@linux.intel.com> (raw)
In-Reply-To: <b459c84aa68ea021299b89e2c4bcad208736ce48.1654092153.git.geliang.tang@suse.com>
On Wed, 1 Jun 2022, Geliang Tang wrote:
> This patch adds a new helper mptcp_subflow_set_scheduled() to set the
> scheduled flag of struct mptcp_subflow_context using WRITE_ONCE().
> Register this helper in bpf_mptcp_sched_kfunc_init() to make sure it can
> be accessed from the BPF context.
>
> Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> ---
> net/mptcp/bpf.c | 16 ++++++++++++++++
> net/mptcp/protocol.h | 2 ++
> net/mptcp/sched.c | 7 +++++++
> tools/testing/selftests/bpf/bpf_tcp_helpers.h | 3 +++
Geliang -
This commit changes both bpf_tcp_helpers.h and MPTCP core code. There are
different upstreaming requirements for bpf_tcp_helpers.h since the BPF
maintainers own that file.
Could you split the changes to bpf_tcp_helpers.h in this commit, and in
the others already in the export branch, in to a separate "MPTCP BPF
helper" commit before "selftests/bpf: add bpf_first scheduler"? I think
that will make it easier to upstream commits that don't need to go through
the BPF maintainers.
> 4 files changed, 28 insertions(+)
>
> diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
> index 0529e70d53b1..e86dff4272d5 100644
> --- a/net/mptcp/bpf.c
> +++ b/net/mptcp/bpf.c
> @@ -161,6 +161,22 @@ struct bpf_struct_ops bpf_mptcp_sched_ops = {
> .init = bpf_mptcp_sched_init,
> .name = "mptcp_sched_ops",
> };
> +
> +BTF_SET_START(bpf_mptcp_sched_kfunc_ids)
> +BTF_ID(func, mptcp_subflow_set_scheduled)
> +BTF_SET_END(bpf_mptcp_sched_kfunc_ids)
> +
> +static const struct btf_kfunc_id_set bpf_mptcp_sched_kfunc_set = {
> + .owner = THIS_MODULE,
> + .check_set = &bpf_mptcp_sched_kfunc_ids,
> +};
> +
> +static int __init bpf_mptcp_sched_kfunc_init(void)
> +{
> + return register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS,
> + &bpf_mptcp_sched_kfunc_set);
> +}
> +late_initcall(bpf_mptcp_sched_kfunc_init);
> #endif /* CONFIG_BPF_JIT */
>
> struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk)
> diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
> index 48c5261b7b15..d406b5afbee4 100644
> --- a/net/mptcp/protocol.h
> +++ b/net/mptcp/protocol.h
> @@ -629,6 +629,8 @@ void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched);
> int mptcp_init_sched(struct mptcp_sock *msk,
> struct mptcp_sched_ops *sched);
> void mptcp_release_sched(struct mptcp_sock *msk);
> +void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
> + bool scheduled);
> struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk);
> struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk);
> struct sock *mptcp_sched_get_send(struct mptcp_sock *msk);
> diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
> index 6815654fc6f4..8858e1fc8b74 100644
> --- a/net/mptcp/sched.c
> +++ b/net/mptcp/sched.c
> @@ -88,6 +88,12 @@ void mptcp_release_sched(struct mptcp_sock *msk)
> bpf_module_put(sched, sched->owner);
> }
>
> +void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
> + bool scheduled)
> +{
> + WRITE_ONCE(subflow->scheduled, scheduled);
> +}
As far as I can tell, it is safe to call a function like this from BPF
code. I modified the bpf_first test to try to pass a bad subflow pointer
in a few different ways, and the BPF verifier caught it.
I'm curious, have you found any documentation for how the verifier checks
args for kfunc calls? I'd like to understand that better and will keep
searching.
Thanks,
Mat
> +
> static int mptcp_sched_data_init(struct mptcp_sock *msk, bool reinject,
> struct mptcp_sched_data *data)
> {
> @@ -101,6 +107,7 @@ static int mptcp_sched_data_init(struct mptcp_sock *msk, bool reinject,
> pr_warn_once("too many subflows");
> break;
> }
> + mptcp_subflow_set_scheduled(subflow, false);
> data->contexts[i++] = subflow;
> }
>
> diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
> index 5f6a7fa2269b..5e301e830a0a 100644
> --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h
> +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
> @@ -261,4 +261,7 @@ struct mptcp_sock {
> char ca_name[TCP_CA_NAME_MAX];
> } __attribute__((preserve_access_index));
>
> +extern void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
> + bool scheduled) __ksym;
> +
> #endif
> --
> 2.34.1
>
>
>
--
Mat Martineau
Intel
next prev parent reply other threads:[~2022-06-02 0:23 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-01 14:08 [PATCH mptcp-next v6 00/11] BPF packet scheduler Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 01/11] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 02/11] Squash to "mptcp: add sched in mptcp_sock" Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 03/11] Squash to "mptcp: add get_subflow wrappers" Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 04/11] Squash to "mptcp: add bpf_mptcp_sched_ops" Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 05/11] mptcp: add subflow_set_scheduled helper Geliang Tang
2022-06-02 0:23 ` Mat Martineau [this message]
2022-06-01 14:08 ` [PATCH mptcp-next v6 06/11] Squash to "selftests/bpf: add bpf_first scheduler" Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 07/11] Squash to "selftests/bpf: add bpf_first test" Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 08/11] selftests/bpf: add bpf_bkup scheduler Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 09/11] selftests/bpf: add bpf_bkup test Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 10/11] selftests/bpf: add bpf_rr scheduler Geliang Tang
2022-06-01 14:08 ` [PATCH mptcp-next v6 11/11] selftests/bpf: add bpf_rr test Geliang Tang
2022-06-01 14:21 ` selftests/bpf: add bpf_rr test: Build Failure MPTCP CI
2022-06-01 15:04 ` Matthieu Baerts
2022-06-01 22:25 ` Geliang Tang
2022-06-01 16:02 ` selftests/bpf: add bpf_rr test: Tests Results MPTCP CI
2022-06-02 0:02 ` [PATCH mptcp-next v6 00/11] BPF packet scheduler Mat Martineau
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=3468a375-3122-ad91-9955-78236a3be365@linux.intel.com \
--to=mathew.j.martineau@linux.intel.com \
--cc=geliang.tang@suse.com \
--cc=mptcp@lists.linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox