* [PATCH mptcp-next v3 00/15] save sched_data at mptcp_sock
@ 2023-05-30 13:15 Geliang Tang
2023-05-30 13:15 ` [PATCH mptcp-next v3 01/15] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Geliang Tang @ 2023-05-30 13:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
v3:
- address Florian's comments in v2.
- split into three more patches.
v2:
- fix this error reported by CI:
KASAN: slab-use-after-free in __mptcp_close_ssk (net/mptcp/protocol.c:2461)
- add bpf burst scheduler.
This patchset adds sched_data pointer into mptcp_sock to to save some
data at MPTCP and subflows levels.
With these changes, the old patch "mptcp: register default scheduler" in
[1] now works.
https://patchwork.kernel.org/project/mptcp/cover/cover.1665753926.git.geliang.tang@suse.com/ [1]
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/342
Geliang Tang (15):
Squash to "mptcp: add struct mptcp_sched_ops"
Squash to "mptcp: add sched in mptcp_sock"
Squash to "mptcp: add scheduler wrappers"
mptcp: add last_snd in sched_data
mptcp: add snd_burst in sched_data
mptcp: register default scheduler
mptcp: rename __mptcp_set_timeout for bpf_burst
mptcp: add two wrappers for bpf_burst
mptcp: add three helpers for bpf_burst
Squash to "bpf: Add bpf_mptcp_sched_ops"
Squash to "bpf: Add bpf_mptcp_sched_kfunc_set"
Squash to "selftests/bpf: Add mptcp sched structs"
Squash to "selftests/bpf: Add bpf_rr scheduler"
selftests/bpf: Add bpf_burst scheduler
selftests/bpf: Add bpf_burst test
include/net/mptcp.h | 4 +-
net/mptcp/bpf.c | 42 +++-
net/mptcp/protocol.c | 73 +++++--
net/mptcp/protocol.h | 12 +-
net/mptcp/sched.c | 67 ++++--
tools/testing/selftests/bpf/bpf_tcp_helpers.h | 7 +-
.../testing/selftests/bpf/prog_tests/mptcp.c | 38 ++++
.../selftests/bpf/progs/mptcp_bpf_burst.c | 195 ++++++++++++++++++
.../selftests/bpf/progs/mptcp_bpf_rr.c | 4 +-
9 files changed, 392 insertions(+), 50 deletions(-)
create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
--
2.35.3
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH mptcp-next v3 01/15] Squash to "mptcp: add struct mptcp_sched_ops" 2023-05-30 13:15 [PATCH mptcp-next v3 00/15] save sched_data at mptcp_sock Geliang Tang @ 2023-05-30 13:15 ` Geliang Tang 2023-05-30 13:15 ` [PATCH mptcp-next v3 02/15] Squash to "mptcp: add sched in mptcp_sock" Geliang Tang 2023-05-30 13:15 ` [PATCH mptcp-next v3 03/15] Squash to "mptcp: add scheduler wrappers" Geliang Tang 2 siblings, 0 replies; 5+ messages in thread From: Geliang Tang @ 2023-05-30 13:15 UTC (permalink / raw) To: mptcp; +Cc: Geliang Tang Use two tabs. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- include/net/mptcp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 828b10ddabee..4bba29c99172 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -100,7 +100,7 @@ struct mptcp_out_options { #define MPTCP_SUBFLOWS_MAX 8 struct mptcp_sched_data { - bool reinject; + bool reinject; struct mptcp_subflow_context *contexts[MPTCP_SUBFLOWS_MAX]; }; -- 2.35.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH mptcp-next v3 02/15] Squash to "mptcp: add sched in mptcp_sock" 2023-05-30 13:15 [PATCH mptcp-next v3 00/15] save sched_data at mptcp_sock Geliang Tang 2023-05-30 13:15 ` [PATCH mptcp-next v3 01/15] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang @ 2023-05-30 13:15 ` Geliang Tang 2023-05-30 13:15 ` [PATCH mptcp-next v3 03/15] Squash to "mptcp: add scheduler wrappers" Geliang Tang 2 siblings, 0 replies; 5+ messages in thread From: Geliang Tang @ 2023-05-30 13:15 UTC (permalink / raw) To: mptcp; +Cc: Geliang Tang Add sched_data pointer into mptcp_sock too. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- net/mptcp/protocol.c | 5 +++-- net/mptcp/protocol.h | 4 +++- net/mptcp/sched.c | 13 ++++++++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 763f709fd5f5..a2560813bfb5 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2813,7 +2813,8 @@ static int mptcp_init_sock(struct sock *sk) return -ENOMEM; ret = mptcp_init_sched(mptcp_sk(sk), - mptcp_sched_find(mptcp_get_scheduler(net))); + mptcp_sched_find(mptcp_get_scheduler(net)), + GFP_KERNEL); if (ret) return ret; @@ -3204,7 +3205,7 @@ struct sock *mptcp_sk_clone_init(const struct sock *sk, msk->snd_una = msk->write_seq; msk->wnd_end = msk->snd_nxt + req->rsk_rcv_wnd; msk->setsockopt_seq = mptcp_sk(sk)->setsockopt_seq; - mptcp_init_sched(msk, mptcp_sk(sk)->sched); + mptcp_init_sched(msk, mptcp_sk(sk)->sched, GFP_ATOMIC); sock_reset_flag(nsk, SOCK_RCU_FREE); security_inet_csk_clone(nsk, req); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index bd3771c7d79d..88469590eb32 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -311,6 +311,7 @@ struct mptcp_sock { */ struct sock *first; struct mptcp_pm_data pm; + struct mptcp_sched_data *sched_data; struct mptcp_sched_ops *sched; struct { u32 space; /* bytes copied in last measurement window */ @@ -653,7 +654,8 @@ struct mptcp_sched_ops *mptcp_sched_find(const char *name); int mptcp_register_scheduler(struct mptcp_sched_ops *sched); void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched); int mptcp_init_sched(struct mptcp_sock *msk, - struct mptcp_sched_ops *sched); + struct mptcp_sched_ops *sched, + gfp_t gfp); void mptcp_release_sched(struct mptcp_sock *msk); void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow, bool scheduled); diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c index c7c167e48d72..a053a9504dfd 100644 --- a/net/mptcp/sched.c +++ b/net/mptcp/sched.c @@ -56,7 +56,8 @@ void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched) } int mptcp_init_sched(struct mptcp_sock *msk, - struct mptcp_sched_ops *sched) + struct mptcp_sched_ops *sched, + gfp_t gfp) { if (!sched) goto out; @@ -64,6 +65,12 @@ int mptcp_init_sched(struct mptcp_sock *msk, if (!bpf_try_module_get(sched, sched->owner)) return -EBUSY; + msk->sched_data = kzalloc(sizeof(struct mptcp_sched_data), gfp); + if (!msk->sched_data) { + bpf_module_put(sched, sched->owner); + return -ENOMEM; + } + msk->sched = sched; if (msk->sched->init) msk->sched->init(msk); @@ -81,6 +88,10 @@ void mptcp_release_sched(struct mptcp_sock *msk) if (!sched) return; + if (msk->sched_data) { + kfree(msk->sched_data); + msk->sched_data = NULL; + } msk->sched = NULL; if (sched->release) sched->release(msk); -- 2.35.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH mptcp-next v3 03/15] Squash to "mptcp: add scheduler wrappers" 2023-05-30 13:15 [PATCH mptcp-next v3 00/15] save sched_data at mptcp_sock Geliang Tang 2023-05-30 13:15 ` [PATCH mptcp-next v3 01/15] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang 2023-05-30 13:15 ` [PATCH mptcp-next v3 02/15] Squash to "mptcp: add sched in mptcp_sock" Geliang Tang @ 2023-05-30 13:15 ` Geliang Tang 2 siblings, 0 replies; 5+ messages in thread From: Geliang Tang @ 2023-05-30 13:15 UTC (permalink / raw) To: mptcp; +Cc: Geliang Tang Use msk->sched_data instead of the local variable data. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- net/mptcp/sched.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c index a053a9504dfd..5438a86e897a 100644 --- a/net/mptcp/sched.c +++ b/net/mptcp/sched.c @@ -127,7 +127,6 @@ void mptcp_sched_data_set_contexts(const struct mptcp_sock *msk, int mptcp_sched_get_send(struct mptcp_sock *msk) { struct mptcp_subflow_context *subflow; - struct mptcp_sched_data data; msk_owned_by_me(msk); @@ -157,15 +156,14 @@ int mptcp_sched_get_send(struct mptcp_sock *msk) return 0; } - data.reinject = false; - msk->sched->data_init(msk, &data); - return msk->sched->get_subflow(msk, &data); + msk->sched_data->reinject = false; + msk->sched->data_init(msk, msk->sched_data); + return msk->sched->get_subflow(msk, msk->sched_data); } int mptcp_sched_get_retrans(struct mptcp_sock *msk) { struct mptcp_subflow_context *subflow; - struct mptcp_sched_data data; msk_owned_by_me(msk); @@ -188,7 +186,7 @@ int mptcp_sched_get_retrans(struct mptcp_sock *msk) return 0; } - data.reinject = true; - msk->sched->data_init(msk, &data); - return msk->sched->get_subflow(msk, &data); + msk->sched_data->reinject = true; + msk->sched->data_init(msk, msk->sched_data); + return msk->sched->get_subflow(msk, msk->sched_data); } -- 2.35.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH mptcp-next v3 00/15] save sched_data at mptcp_sock @ 2023-05-30 13:17 Geliang Tang 0 siblings, 0 replies; 5+ messages in thread From: Geliang Tang @ 2023-05-30 13:17 UTC (permalink / raw) To: mptcp; +Cc: Geliang Tang v3: - address Florian's comments in v2. - split into three more patches. v2: - fix this error reported by CI: KASAN: slab-use-after-free in __mptcp_close_ssk (net/mptcp/protocol.c:2461) - add bpf burst scheduler. This patchset adds sched_data pointer into mptcp_sock to to save some data at MPTCP and subflows levels. With these changes, the old patch "mptcp: register default scheduler" in [1] now works. https://patchwork.kernel.org/project/mptcp/cover/cover.1665753926.git.geliang.tang@suse.com/ [1] Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/342 Geliang Tang (15): Squash to "mptcp: add struct mptcp_sched_ops" Squash to "mptcp: add sched in mptcp_sock" Squash to "mptcp: add scheduler wrappers" mptcp: add last_snd in sched_data mptcp: add snd_burst in sched_data mptcp: register default scheduler mptcp: rename __mptcp_set_timeout for bpf_burst mptcp: add two wrappers for bpf_burst mptcp: add three helpers for bpf_burst Squash to "bpf: Add bpf_mptcp_sched_ops" Squash to "bpf: Add bpf_mptcp_sched_kfunc_set" Squash to "selftests/bpf: Add mptcp sched structs" Squash to "selftests/bpf: Add bpf_rr scheduler" selftests/bpf: Add bpf_burst scheduler selftests/bpf: Add bpf_burst test include/net/mptcp.h | 4 +- net/mptcp/bpf.c | 42 +++- net/mptcp/protocol.c | 73 +++++-- net/mptcp/protocol.h | 12 +- net/mptcp/sched.c | 67 ++++-- tools/testing/selftests/bpf/bpf_tcp_helpers.h | 7 +- .../testing/selftests/bpf/prog_tests/mptcp.c | 38 ++++ .../selftests/bpf/progs/mptcp_bpf_burst.c | 195 ++++++++++++++++++ .../selftests/bpf/progs/mptcp_bpf_rr.c | 4 +- 9 files changed, 392 insertions(+), 50 deletions(-) create mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c -- 2.35.3 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-05-30 13:17 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-05-30 13:15 [PATCH mptcp-next v3 00/15] save sched_data at mptcp_sock Geliang Tang 2023-05-30 13:15 ` [PATCH mptcp-next v3 01/15] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang 2023-05-30 13:15 ` [PATCH mptcp-next v3 02/15] Squash to "mptcp: add sched in mptcp_sock" Geliang Tang 2023-05-30 13:15 ` [PATCH mptcp-next v3 03/15] Squash to "mptcp: add scheduler wrappers" Geliang Tang -- strict thread matches above, loose matches on Subject: below -- 2023-05-30 13:17 [PATCH mptcp-next v3 00/15] save sched_data at mptcp_sock Geliang Tang
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.