* [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.