All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH mptcp-next v2 00/16] register default scheduler
@ 2022-10-12  4:50 Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 01/16] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang
                   ` (16 more replies)
  0 siblings, 17 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

v2:
- split "mptcp: add mptcp_sched_data argument" into 5 squash-to patches.
- split "mptcp: register default scheduler" into 3 patches.
- depends on "refactor push pending" v7

Register the burst scheduler as the default one.

Geliang Tang (16):
  Squash to "mptcp: add struct mptcp_sched_ops"
  Squash to "mptcp: add get_subflow wrappers" II
  Squash to "mptcp: simplify push_pending"
  Squash to "mptcp: multi subflows push_pending"
  Squash to "mptcp: simplify subflow_push_pending"
  Squash to "mptcp: multi subflows subflow_push_pending"
  Squash to "mptcp: multi subflows retrans support"
  mptcp: use snd_burst of data instead of msk
  mptcp: define default scheduler
  mptcp: register default scheduler
  mptcp: add mptcp_sched_data_set_contexts helper
  Squash to "bpf: Add bpf_mptcp_sched_ops"
  Squash to "bpf: Add bpf_mptcp_sched_kfunc_set"
  Squash to "selftests/bpf: Add bpf_first scheduler"
  Squash to "selftests/bpf: Add bpf_bkup scheduler"
  Squash to "selftests/bpf: Add bpf_rr scheduler"

 include/net/mptcp.h                           |  7 +-
 net/mptcp/bpf.c                               |  1 +
 net/mptcp/protocol.c                          | 33 ++++---
 net/mptcp/protocol.h                          | 13 ++-
 net/mptcp/sched.c                             | 92 ++++++++++---------
 tools/testing/selftests/bpf/bpf_tcp_helpers.h |  9 +-
 .../selftests/bpf/progs/mptcp_bpf_bkup.c      | 10 +-
 .../selftests/bpf/progs/mptcp_bpf_first.c     | 10 +-
 .../selftests/bpf/progs/mptcp_bpf_rr.c        | 10 +-
 9 files changed, 116 insertions(+), 69 deletions(-)

-- 
2.35.3


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 01/16] Squash to "mptcp: add struct mptcp_sched_ops"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 02/16] Squash to "mptcp: add get_subflow wrappers" II Geliang Tang
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

New api:
 - add new data_init
 - add snd_burst in mptcp_sched_data
 - add an int return value for get_subflow

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 include/net/mptcp.h | 7 +++++--
 net/mptcp/sched.c   | 2 +-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/include/net/mptcp.h b/include/net/mptcp.h
index c25939b2af68..cac5b0d512fd 100644
--- a/include/net/mptcp.h
+++ b/include/net/mptcp.h
@@ -101,12 +101,15 @@ struct mptcp_out_options {
 
 struct mptcp_sched_data {
 	bool	reinject;
+	int	snd_burst;
 	struct mptcp_subflow_context *contexts[MPTCP_SUBFLOWS_MAX];
 };
 
 struct mptcp_sched_ops {
-	void (*get_subflow)(const struct mptcp_sock *msk,
-			    struct mptcp_sched_data *data);
+	void (*data_init)(const struct mptcp_sock *msk,
+			  struct mptcp_sched_data *data);
+	int (*get_subflow)(const struct mptcp_sock *msk,
+			   struct mptcp_sched_data *data);
 
 	char			name[MPTCP_SCHED_NAME_MAX];
 	struct module		*owner;
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index 9b128714055a..6324a8a76382 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -33,7 +33,7 @@ struct mptcp_sched_ops *mptcp_sched_find(const char *name)
 
 int mptcp_register_scheduler(struct mptcp_sched_ops *sched)
 {
-	if (!sched->get_subflow)
+	if (!sched->data_init || !sched->get_subflow)
 		return -EINVAL;
 
 	spin_lock(&mptcp_sched_list_lock);
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 02/16] Squash to "mptcp: add get_subflow wrappers" II
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 01/16] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 03/16] Squash to "mptcp: simplify push_pending" Geliang Tang
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Use new api, use the return value of get_subflow. Drop
mptcp_sched_data_init, use sched->data_init() instead.

And some cleanups.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.h |  6 ++++--
 net/mptcp/sched.c    | 47 ++++++++++----------------------------------
 2 files changed, 14 insertions(+), 39 deletions(-)

diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 68a2b22a47eb..ee9e7e55dfe0 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -640,8 +640,10 @@ 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);
-int mptcp_sched_get_send(struct mptcp_sock *msk);
-int mptcp_sched_get_retrans(struct mptcp_sock *msk);
+int mptcp_sched_get_send(struct mptcp_sock *msk,
+			 struct mptcp_sched_data *data);
+int mptcp_sched_get_retrans(struct mptcp_sock *msk,
+			    struct mptcp_sched_data *data);
 
 static inline bool __tcp_can_send(const struct sock *ssk)
 {
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index 6324a8a76382..c459b01f9a9d 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -94,34 +94,9 @@ void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
 	WRITE_ONCE(subflow->scheduled, scheduled);
 }
 
-static int mptcp_sched_data_init(struct mptcp_sock *msk, bool reinject,
-				 struct mptcp_sched_data *data)
+int mptcp_sched_get_send(struct mptcp_sock *msk,
+			 struct mptcp_sched_data *data)
 {
-	struct mptcp_subflow_context *subflow;
-	int i = 0;
-
-	data->reinject = reinject;
-
-	mptcp_for_each_subflow(msk, subflow) {
-		if (i == MPTCP_SUBFLOWS_MAX) {
-			pr_warn_once("too many subflows");
-			break;
-		}
-		mptcp_subflow_set_scheduled(subflow, false);
-		data->contexts[i++] = subflow;
-	}
-
-	for (; i < MPTCP_SUBFLOWS_MAX; i++)
-		data->contexts[i] = NULL;
-
-	msk->snd_burst = 0;
-
-	return 0;
-}
-
-int mptcp_sched_get_send(struct mptcp_sock *msk)
-{
-	struct mptcp_sched_data data;
 	struct sock *ssk = NULL;
 
 	sock_owned_by_me((const struct sock *)msk);
@@ -145,15 +120,14 @@ int mptcp_sched_get_send(struct mptcp_sock *msk)
 		return 0;
 	}
 
-	mptcp_sched_data_init(msk, false, &data);
-	msk->sched->get_subflow(msk, &data);
-
-	return 0;
+	data->reinject = false;
+	msk->sched->data_init(msk, data);
+	return msk->sched->get_subflow(msk, data);
 }
 
-int mptcp_sched_get_retrans(struct mptcp_sock *msk)
+int mptcp_sched_get_retrans(struct mptcp_sock *msk,
+			    struct mptcp_sched_data *data)
 {
-	struct mptcp_sched_data data;
 	struct sock *ssk = NULL;
 
 	sock_owned_by_me((const struct sock *)msk);
@@ -170,8 +144,7 @@ int mptcp_sched_get_retrans(struct mptcp_sock *msk)
 		return 0;
 	}
 
-	mptcp_sched_data_init(msk, true, &data);
-	msk->sched->get_subflow(msk, &data);
-
-	return 0;
+	data->reinject = true;
+	msk->sched->data_init(msk, data);
+	return msk->sched->get_subflow(msk, data);
 }
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 03/16] Squash to "mptcp: simplify push_pending"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 01/16] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 02/16] Squash to "mptcp: add get_subflow wrappers" II Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 04/16] Squash to "mptcp: multi subflows push_pending" Geliang Tang
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Add a parameter data for __subflow_push_pending.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 5ddceeb1d334..2cd8e18d917c 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1512,7 +1512,8 @@ void mptcp_check_and_set_pending(struct sock *sk)
 }
 
 static int __subflow_push_pending(struct sock *sk, struct sock *ssk,
-				  struct mptcp_sendmsg_info *info)
+				  struct mptcp_sendmsg_info *info,
+				  struct mptcp_sched_data *data)
 {
 	struct mptcp_sock *msk = mptcp_sk(sk);
 	struct mptcp_data_frag *dfrag;
@@ -1561,6 +1562,7 @@ static int __subflow_push_pending(struct sock *sk, struct sock *ssk,
 void __mptcp_push_pending(struct sock *sk, unsigned int flags)
 {
 	struct mptcp_sock *msk = mptcp_sk(sk);
+	struct mptcp_sched_data data;
 	int ret = 0;
 
 again:
@@ -1575,7 +1577,7 @@ void __mptcp_push_pending(struct sock *sk, unsigned int flags)
 				struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
 
 				lock_sock(ssk);
-				ret = __subflow_push_pending(sk, ssk, &info);
+				ret = __subflow_push_pending(sk, ssk, &info, &data);
 				release_sock(ssk);
 
 				if (ret <= 0) {
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 04/16] Squash to "mptcp: multi subflows push_pending"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (2 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 03/16] Squash to "mptcp: simplify push_pending" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 05/16] Squash to "mptcp: simplify subflow_push_pending" Geliang Tang
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Pass data to mptcp_sched_get_send.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 2cd8e18d917c..694c07855be9 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1566,7 +1566,7 @@ void __mptcp_push_pending(struct sock *sk, unsigned int flags)
 	int ret = 0;
 
 again:
-	while (mptcp_send_head(sk) && !mptcp_sched_get_send(msk)) {
+	while (mptcp_send_head(sk) && !mptcp_sched_get_send(msk, &data)) {
 		struct mptcp_subflow_context *subflow;
 		struct mptcp_sendmsg_info info = {
 			.flags = flags,
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 05/16] Squash to "mptcp: simplify subflow_push_pending"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (3 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 04/16] Squash to "mptcp: multi subflows push_pending" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 06/16] Squash to "mptcp: multi subflows subflow_push_pending" Geliang Tang
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Pass data to __subflow_push_pending.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 694c07855be9..0f062bf63447 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1606,6 +1606,7 @@ static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk,
 	struct mptcp_sendmsg_info info = {
 		.data_lock_held = true,
 	};
+	struct mptcp_sched_data data;
 	int ret = 0;
 
 	info.flags = 0;
@@ -1615,7 +1616,7 @@ static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk,
 		 * spooling the first chunk of data
 		 */
 		if (first) {
-			ret = __subflow_push_pending(sk, ssk, &info);
+			ret = __subflow_push_pending(sk, ssk, &info, &data);
 			if (ret <= 0) {
 				if (ret == -EAGAIN)
 					goto again;
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 06/16] Squash to "mptcp: multi subflows subflow_push_pending"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (4 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 05/16] Squash to "mptcp: simplify subflow_push_pending" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 07/16] Squash to "mptcp: multi subflows retrans support" Geliang Tang
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Pass data to mptcp_sched_get_send and __subflow_push_pending.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 0f062bf63447..18e439e180dd 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1626,7 +1626,7 @@ static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk,
 			continue;
 		}
 
-		if (mptcp_sched_get_send(msk))
+		if (mptcp_sched_get_send(msk, &data))
 			goto out;
 
 		mptcp_for_each_subflow(msk, subflow) {
@@ -1647,7 +1647,7 @@ static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk,
 					goto out;
 				}
 
-				ret = __subflow_push_pending(sk, ssk, &info);
+				ret = __subflow_push_pending(sk, ssk, &info, &data);
 				if (ret <= 0) {
 					if (ret == -EAGAIN)
 						goto again;
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 07/16] Squash to "mptcp: multi subflows retrans support"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (5 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 06/16] Squash to "mptcp: multi subflows subflow_push_pending" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 08/16] mptcp: use snd_burst of data instead of msk Geliang Tang
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Pass data to mptcp_sched_get_retrans.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 18e439e180dd..0d9fae5718cc 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2489,6 +2489,7 @@ static void __mptcp_retrans(struct sock *sk)
 	struct mptcp_subflow_context *subflow;
 	struct mptcp_sendmsg_info info = {};
 	struct mptcp_data_frag *dfrag;
+	struct mptcp_sched_data data;
 	struct sock *ssk;
 	int ret, err;
 	u16 len = 0;
@@ -2496,7 +2497,7 @@ static void __mptcp_retrans(struct sock *sk)
 	mptcp_clean_una_wakeup(sk);
 
 	/* first check ssk: need to kick "stale" logic */
-	err = mptcp_sched_get_retrans(msk);
+	err = mptcp_sched_get_retrans(msk, &data);
 	dfrag = mptcp_rtx_head(sk);
 	if (!dfrag) {
 		if (mptcp_data_fin_enabled(msk)) {
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 08/16] mptcp: use snd_burst of data instead of msk
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (6 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 07/16] Squash to "mptcp: multi subflows retrans support" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 09/16] mptcp: define default scheduler Geliang Tang
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Use data->snd_burst instead of msk->snd_burst.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.c | 12 ++++++------
 net/mptcp/protocol.h |  4 ++--
 net/mptcp/sched.c    |  2 +-
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 0d9fae5718cc..956c8ea0edcf 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1406,7 +1406,8 @@ bool mptcp_subflow_active(struct mptcp_subflow_context *subflow)
  * returns the subflow that will transmit the next DSS
  * additionally updates the rtx timeout
  */
-struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk)
+struct sock *mptcp_subflow_get_send(const struct mptcp_sock *msk,
+				    struct mptcp_sched_data *data)
 {
 	struct subflow_send_info send_info[SSK_MODE_MAX];
 	struct mptcp_subflow_context *subflow;
@@ -1476,7 +1477,7 @@ struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk)
 	subflow->avg_pacing_rate = div_u64((u64)subflow->avg_pacing_rate * wmem +
 					   READ_ONCE(ssk->sk_pacing_rate) * burst,
 					   burst + wmem);
-	msk->snd_burst = burst;
+	data->snd_burst = burst;
 	return ssk;
 }
 
@@ -1488,8 +1489,6 @@ static void mptcp_update_post_push(struct mptcp_sock *msk,
 
 	dfrag->already_sent += sent;
 
-	msk->snd_burst -= sent;
-
 	snd_nxt_new += dfrag->already_sent;
 
 	/* snd_nxt_new can be smaller than snd_nxt in case mptcp
@@ -1535,12 +1534,13 @@ static int __subflow_push_pending(struct sock *sk, struct sock *ssk,
 			info->sent += ret;
 			copied += ret;
 			len -= ret;
+			data->snd_burst -= ret;
 
 			mptcp_update_post_push(msk, dfrag, ret);
 		}
 		WRITE_ONCE(msk->first_pending, mptcp_send_next(sk));
 
-		if (msk->snd_burst <= 0 ||
+		if (data->snd_burst <= 0 ||
 		    !sk_stream_memory_free(ssk) ||
 		    !mptcp_subflow_active(mptcp_subflow_ctx(ssk))) {
 			err = copied ? : -EAGAIN;
@@ -1616,6 +1616,7 @@ static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk,
 		 * spooling the first chunk of data
 		 */
 		if (first) {
+			data.snd_burst = 0;
 			ret = __subflow_push_pending(sk, ssk, &info, &data);
 			if (ret <= 0) {
 				if (ret == -EAGAIN)
@@ -2282,7 +2283,6 @@ bool __mptcp_retransmit_pending_data(struct sock *sk)
 	mptcp_data_unlock(sk);
 
 	msk->first_pending = rtx_head;
-	msk->snd_burst = 0;
 
 	/* be sure to clear the "sent status" on all re-injected fragments */
 	list_for_each_entry(cur, &msk->rtx_queue, list) {
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index ee9e7e55dfe0..3f97bacca67d 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -257,7 +257,6 @@ struct mptcp_sock {
 	atomic64_t	rcv_wnd_sent;
 	u64		rcv_data_fin_seq;
 	int		rmem_fwd_alloc;
-	int		snd_burst;
 	int		old_wspace;
 	u64		recovery_snd_nxt;	/* in recovery mode accept up to this seq;
 						 * recovery related fields are under data_lock
@@ -638,7 +637,8 @@ int mptcp_init_sched(struct mptcp_sock *msk,
 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_send(const struct mptcp_sock *msk,
+				    struct mptcp_sched_data *data);
 struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk);
 int mptcp_sched_get_send(struct mptcp_sock *msk,
 			 struct mptcp_sched_data *data);
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index c459b01f9a9d..f9440b935c76 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -113,7 +113,7 @@ int mptcp_sched_get_send(struct mptcp_sock *msk,
 	}
 
 	if (!msk->sched) {
-		ssk = mptcp_subflow_get_send(msk);
+		ssk = mptcp_subflow_get_send(msk, data);
 		if (!ssk)
 			return -EINVAL;
 		mptcp_subflow_set_scheduled(mptcp_subflow_ctx(ssk), true);
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 09/16] mptcp: define default scheduler
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (7 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 08/16] mptcp: use snd_burst of data instead of msk Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 10/16] mptcp: register " Geliang Tang
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patch defines the default packet scheduler mptcp_sched_default.
Skip deleting this default scheduler in mptcp_unregister_scheduler().

Use data->snd_burst instead of msk->snd_burst.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.c |  2 +-
 net/mptcp/protocol.h |  2 +-
 net/mptcp/sched.c    | 30 ++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 956c8ea0edcf..3f0829ea2ad9 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2211,7 +2211,7 @@ static void mptcp_timeout_timer(struct timer_list *t)
  *
  * A backup subflow is returned only if that is the only kind available.
  */
-struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk)
+struct sock *mptcp_subflow_get_retrans(const struct mptcp_sock *msk)
 {
 	struct sock *backup = NULL, *pick = NULL;
 	struct mptcp_subflow_context *subflow;
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 3f97bacca67d..d3cc84b15929 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -639,7 +639,7 @@ void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
 				 bool scheduled);
 struct sock *mptcp_subflow_get_send(const struct mptcp_sock *msk,
 				    struct mptcp_sched_data *data);
-struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk);
+struct sock *mptcp_subflow_get_retrans(const struct mptcp_sock *msk);
 int mptcp_sched_get_send(struct mptcp_sock *msk,
 			 struct mptcp_sched_data *data);
 int mptcp_sched_get_retrans(struct mptcp_sock *msk,
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index f9440b935c76..14b3efb347bd 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -16,6 +16,33 @@
 static DEFINE_SPINLOCK(mptcp_sched_list_lock);
 static LIST_HEAD(mptcp_sched_list);
 
+static void mptcp_sched_default_data_init(const struct mptcp_sock *msk,
+					  struct mptcp_sched_data *data)
+{
+	data->snd_burst = 0;
+}
+
+static int mptcp_sched_default_get_subflow(const struct mptcp_sock *msk,
+					   struct mptcp_sched_data *data)
+{
+	struct sock *ssk;
+
+	ssk = data->reinject ? mptcp_subflow_get_retrans(msk) :
+			       mptcp_subflow_get_send(msk, data);
+	if (!ssk)
+		return -EINVAL;
+
+	mptcp_subflow_set_scheduled(mptcp_subflow_ctx(ssk), true);
+	return 0;
+}
+
+static struct mptcp_sched_ops mptcp_sched_default = {
+	.data_init	= mptcp_sched_default_data_init,
+	.get_subflow    = mptcp_sched_default_get_subflow,
+	.name           = "default",
+	.owner          = THIS_MODULE,
+};
+
 /* Must be called with rcu read lock held */
 struct mptcp_sched_ops *mptcp_sched_find(const char *name)
 {
@@ -50,6 +77,9 @@ int mptcp_register_scheduler(struct mptcp_sched_ops *sched)
 
 void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched)
 {
+	if (sched == &mptcp_sched_default)
+		return;
+
 	spin_lock(&mptcp_sched_list_lock);
 	list_del_rcu(&sched->list);
 	spin_unlock(&mptcp_sched_list_lock);
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 10/16] mptcp: register default scheduler
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (8 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 09/16] mptcp: define default scheduler Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 11/16] mptcp: add mptcp_sched_data_set_contexts helper Geliang Tang
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patch registers mptcp_sched_default in mptcp_sched_init(), which is
invoked in mptcp_proto_init().

Set msk->sched to the default scheduler when the input parameter of
mptcp_init_sched() is NULL.

With these changes, msk->sched will no longer be NULL. Drop the code that
checks msk->sched to be NULL in mptcp_sched_get_send() and
mptcp_sched_get_retrans().

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.c |  1 +
 net/mptcp/protocol.h |  1 +
 net/mptcp/sched.c    | 28 ++++++----------------------
 3 files changed, 8 insertions(+), 22 deletions(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 3f0829ea2ad9..13d65542a4bd 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -3890,6 +3890,7 @@ void __init mptcp_proto_init(void)
 
 	mptcp_subflow_init();
 	mptcp_pm_init();
+	mptcp_sched_init();
 	mptcp_token_init();
 
 	if (proto_register(&mptcp_prot, MPTCP_USE_SLAB) != 0)
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index d3cc84b15929..669584978213 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -632,6 +632,7 @@ void mptcp_info2sockaddr(const struct mptcp_addr_info *info,
 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);
+void mptcp_sched_init(void);
 int mptcp_init_sched(struct mptcp_sock *msk,
 		     struct mptcp_sched_ops *sched);
 void mptcp_release_sched(struct mptcp_sock *msk);
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index 14b3efb347bd..cc9865a79ffe 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -85,11 +85,16 @@ void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched)
 	spin_unlock(&mptcp_sched_list_lock);
 }
 
+void mptcp_sched_init(void)
+{
+	mptcp_register_scheduler(&mptcp_sched_default);
+}
+
 int mptcp_init_sched(struct mptcp_sock *msk,
 		     struct mptcp_sched_ops *sched)
 {
 	if (!sched)
-		goto out;
+		sched = &mptcp_sched_default;
 
 	if (!bpf_try_module_get(sched, sched->owner))
 		return -EBUSY;
@@ -100,7 +105,6 @@ int mptcp_init_sched(struct mptcp_sock *msk,
 
 	pr_debug("sched=%s", msk->sched->name);
 
-out:
 	return 0;
 }
 
@@ -127,8 +131,6 @@ void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
 int mptcp_sched_get_send(struct mptcp_sock *msk,
 			 struct mptcp_sched_data *data)
 {
-	struct sock *ssk = NULL;
-
 	sock_owned_by_me((const struct sock *)msk);
 
 	/* the following check is moved out of mptcp_subflow_get_send */
@@ -142,14 +144,6 @@ int mptcp_sched_get_send(struct mptcp_sock *msk,
 		return -EINVAL;
 	}
 
-	if (!msk->sched) {
-		ssk = mptcp_subflow_get_send(msk, data);
-		if (!ssk)
-			return -EINVAL;
-		mptcp_subflow_set_scheduled(mptcp_subflow_ctx(ssk), true);
-		return 0;
-	}
-
 	data->reinject = false;
 	msk->sched->data_init(msk, data);
 	return msk->sched->get_subflow(msk, data);
@@ -158,22 +152,12 @@ int mptcp_sched_get_send(struct mptcp_sock *msk,
 int mptcp_sched_get_retrans(struct mptcp_sock *msk,
 			    struct mptcp_sched_data *data)
 {
-	struct sock *ssk = NULL;
-
 	sock_owned_by_me((const struct sock *)msk);
 
 	/* the following check is moved out of mptcp_subflow_get_retrans */
 	if (__mptcp_check_fallback(msk))
 		return -EINVAL;
 
-	if (!msk->sched) {
-		ssk = mptcp_subflow_get_retrans(msk);
-		if (!ssk)
-			return -EINVAL;
-		mptcp_subflow_set_scheduled(mptcp_subflow_ctx(ssk), true);
-		return 0;
-	}
-
 	data->reinject = true;
 	msk->sched->data_init(msk, data);
 	return msk->sched->get_subflow(msk, data);
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 11/16] mptcp: add mptcp_sched_data_set_contexts helper
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (9 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 10/16] mptcp: register " Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 12/16] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Add a new helper mptcp_sched_data_set_contexts(), it will be used in
the BPF contexts.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/sched.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index cc9865a79ffe..99d7df8d9b58 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -128,6 +128,25 @@ void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
 	WRITE_ONCE(subflow->scheduled, scheduled);
 }
 
+void mptcp_sched_data_set_contexts(const struct mptcp_sock *msk,
+				   struct mptcp_sched_data *data)
+{
+	struct mptcp_subflow_context *subflow;
+	int i = 0;
+
+	mptcp_for_each_subflow(msk, subflow) {
+		if (i == MPTCP_SUBFLOWS_MAX) {
+			pr_warn_once("too many subflows");
+			break;
+		}
+		mptcp_subflow_set_scheduled(subflow, false);
+		data->contexts[i++] = subflow;
+	}
+
+	for (; i < MPTCP_SUBFLOWS_MAX; i++)
+		data->contexts[i] = NULL;
+}
+
 int mptcp_sched_get_send(struct mptcp_sock *msk,
 			 struct mptcp_sched_data *data)
 {
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 12/16] Squash to "bpf: Add bpf_mptcp_sched_ops"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (10 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 11/16] mptcp: add mptcp_sched_data_set_contexts helper Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 13/16] Squash to "bpf: Add bpf_mptcp_sched_kfunc_set" Geliang Tang
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Use new API.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 tools/testing/selftests/bpf/bpf_tcp_helpers.h | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
index c8792e6f125a..ee64b29bf9bb 100644
--- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h
+++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
@@ -240,6 +240,7 @@ struct mptcp_subflow_context {
 
 struct mptcp_sched_data {
 	bool	reinject;
+	int	snd_burst;
 	struct mptcp_subflow_context *contexts[MPTCP_SUBFLOWS_MAX];
 } __attribute__((preserve_access_index));
 
@@ -249,8 +250,10 @@ struct mptcp_sched_ops {
 	void (*init)(const struct mptcp_sock *msk);
 	void (*release)(const struct mptcp_sock *msk);
 
-	void (*get_subflow)(const struct mptcp_sock *msk,
-			    struct mptcp_sched_data *data);
+	void (*data_init)(const struct mptcp_sock *msk,
+			  struct mptcp_sched_data *data);
+	int (*get_subflow)(const struct mptcp_sock *msk,
+			   struct mptcp_sched_data *data);
 	void *owner;
 };
 
@@ -264,5 +267,7 @@ struct mptcp_sock {
 
 extern void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
 					bool scheduled) __ksym;
+extern void mptcp_sched_data_set_contexts(const struct mptcp_sock *msk,
+					  struct mptcp_sched_data *data) __ksym;
 
 #endif
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 13/16] Squash to "bpf: Add bpf_mptcp_sched_kfunc_set"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (11 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 12/16] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 14/16] Squash to "selftests/bpf: Add bpf_first scheduler" Geliang Tang
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Add mptcp_sched_data_set_contexts in kfunc_set.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/bpf.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
index 0a768898990f..03decb05755f 100644
--- a/net/mptcp/bpf.c
+++ b/net/mptcp/bpf.c
@@ -164,6 +164,7 @@ struct bpf_struct_ops bpf_mptcp_sched_ops = {
 
 BTF_SET8_START(bpf_mptcp_sched_kfunc_ids)
 BTF_ID_FLAGS(func, mptcp_subflow_set_scheduled)
+BTF_ID_FLAGS(func, mptcp_sched_data_set_contexts)
 BTF_SET8_END(bpf_mptcp_sched_kfunc_ids)
 
 static const struct btf_kfunc_id_set bpf_mptcp_sched_kfunc_set = {
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 14/16] Squash to "selftests/bpf: Add bpf_first scheduler"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (12 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 13/16] Squash to "bpf: Add bpf_mptcp_sched_kfunc_set" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 15/16] Squash to "selftests/bpf: Add bpf_bkup scheduler" Geliang Tang
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Use new API.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 tools/testing/selftests/bpf/progs/mptcp_bpf_first.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
index fcd733e88b02..e4caa2dd8c6f 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
@@ -16,16 +16,24 @@ void BPF_PROG(mptcp_sched_first_release, const struct mptcp_sock *msk)
 {
 }
 
-void BPF_STRUCT_OPS(bpf_first_get_subflow, const struct mptcp_sock *msk,
+void BPF_STRUCT_OPS(bpf_first_data_init, const struct mptcp_sock *msk,
 		    struct mptcp_sched_data *data)
+{
+	mptcp_sched_data_set_contexts(msk, data);
+}
+
+int BPF_STRUCT_OPS(bpf_first_get_subflow, const struct mptcp_sock *msk,
+		   struct mptcp_sched_data *data)
 {
 	mptcp_subflow_set_scheduled(data->contexts[0], true);
+	return 0;
 }
 
 SEC(".struct_ops")
 struct mptcp_sched_ops first = {
 	.init		= (void *)mptcp_sched_first_init,
 	.release	= (void *)mptcp_sched_first_release,
+	.data_init	= (void *)bpf_first_data_init,
 	.get_subflow	= (void *)bpf_first_get_subflow,
 	.name		= "bpf_first",
 };
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 15/16] Squash to "selftests/bpf: Add bpf_bkup scheduler"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (13 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 14/16] Squash to "selftests/bpf: Add bpf_first scheduler" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-12  4:50 ` [PATCH mptcp-next v2 16/16] Squash to "selftests/bpf: Add bpf_rr scheduler" Geliang Tang
  2022-10-14  1:20 ` [PATCH mptcp-next v2 00/16] register default scheduler Mat Martineau
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Use new API.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
index 949e053e980c..b2724426676e 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
@@ -16,8 +16,14 @@ void BPF_PROG(mptcp_sched_bkup_release, const struct mptcp_sock *msk)
 {
 }
 
-void BPF_STRUCT_OPS(bpf_bkup_get_subflow, const struct mptcp_sock *msk,
+void BPF_STRUCT_OPS(bpf_bkup_data_init, const struct mptcp_sock *msk,
 		    struct mptcp_sched_data *data)
+{
+	mptcp_sched_data_set_contexts(msk, data);
+}
+
+int BPF_STRUCT_OPS(bpf_bkup_get_subflow, const struct mptcp_sock *msk,
+		   struct mptcp_sched_data *data)
 {
 	int nr = 0;
 
@@ -32,12 +38,14 @@ void BPF_STRUCT_OPS(bpf_bkup_get_subflow, const struct mptcp_sock *msk,
 	}
 
 	mptcp_subflow_set_scheduled(data->contexts[nr], true);
+	return 0;
 }
 
 SEC(".struct_ops")
 struct mptcp_sched_ops bkup = {
 	.init		= (void *)mptcp_sched_bkup_init,
 	.release	= (void *)mptcp_sched_bkup_release,
+	.data_init	= (void *)bpf_bkup_data_init,
 	.get_subflow	= (void *)bpf_bkup_get_subflow,
 	.name		= "bpf_bkup",
 };
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH mptcp-next v2 16/16] Squash to "selftests/bpf: Add bpf_rr scheduler"
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (14 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 15/16] Squash to "selftests/bpf: Add bpf_bkup scheduler" Geliang Tang
@ 2022-10-12  4:50 ` Geliang Tang
  2022-10-14  1:20 ` [PATCH mptcp-next v2 00/16] register default scheduler Mat Martineau
  16 siblings, 0 replies; 18+ messages in thread
From: Geliang Tang @ 2022-10-12  4:50 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Use new API.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
index b7156f6aae8b..2d27523b5a7c 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
@@ -17,8 +17,14 @@ void BPF_PROG(mptcp_sched_rr_release, const struct mptcp_sock *msk)
 {
 }
 
-void BPF_STRUCT_OPS(bpf_rr_get_subflow, const struct mptcp_sock *msk,
+void BPF_STRUCT_OPS(bpf_rr_data_init, const struct mptcp_sock *msk,
 		    struct mptcp_sched_data *data)
+{
+	mptcp_sched_data_set_contexts(msk, data);
+}
+
+int BPF_STRUCT_OPS(bpf_rr_get_subflow, const struct mptcp_sock *msk,
+		   struct mptcp_sched_data *data)
 {
 	int nr = 0;
 
@@ -37,12 +43,14 @@ void BPF_STRUCT_OPS(bpf_rr_get_subflow, const struct mptcp_sock *msk,
 
 	mptcp_subflow_set_scheduled(data->contexts[nr], true);
 	last_snd = data->contexts[nr]->tcp_sock;
+	return 0;
 }
 
 SEC(".struct_ops")
 struct mptcp_sched_ops rr = {
 	.init		= (void *)mptcp_sched_rr_init,
 	.release	= (void *)mptcp_sched_rr_release,
+	.data_init	= (void *)bpf_rr_data_init,
 	.get_subflow	= (void *)bpf_rr_get_subflow,
 	.name		= "bpf_rr",
 };
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH mptcp-next v2 00/16] register default scheduler
  2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
                   ` (15 preceding siblings ...)
  2022-10-12  4:50 ` [PATCH mptcp-next v2 16/16] Squash to "selftests/bpf: Add bpf_rr scheduler" Geliang Tang
@ 2022-10-14  1:20 ` Mat Martineau
  16 siblings, 0 replies; 18+ messages in thread
From: Mat Martineau @ 2022-10-14  1:20 UTC (permalink / raw)
  To: Geliang Tang; +Cc: mptcp

On Wed, 12 Oct 2022, Geliang Tang wrote:

> v2:
> - split "mptcp: add mptcp_sched_data argument" into 5 squash-to patches.
> - split "mptcp: register default scheduler" into 3 patches.
> - depends on "refactor push pending" v7
>

Thanks for rebasing this Geliang.

In the review for the "refactor push pending" series, I proposed that the 
series focus on the single-subflow refactoring for now. Does it make sense 
to rearrange these two patch series in to four different series like this:

1. refactor push pending (single subflow)
2. register default scheduler (single subflow)
3. Add multi-subflow scheduling
4. Update BPF scheduler for multi-subflow

I'm trying to think of a way to focus on *one patch set at a time* so we 
can make progress more easily. The large patch sets with lots of squash-to 
patches are getting hard to keep track of.

Thanks,

Mat

> Register the burst scheduler as the default one.
>
> Geliang Tang (16):
>  Squash to "mptcp: add struct mptcp_sched_ops"
>  Squash to "mptcp: add get_subflow wrappers" II
>  Squash to "mptcp: simplify push_pending"
>  Squash to "mptcp: multi subflows push_pending"
>  Squash to "mptcp: simplify subflow_push_pending"
>  Squash to "mptcp: multi subflows subflow_push_pending"
>  Squash to "mptcp: multi subflows retrans support"
>  mptcp: use snd_burst of data instead of msk
>  mptcp: define default scheduler
>  mptcp: register default scheduler
>  mptcp: add mptcp_sched_data_set_contexts helper
>  Squash to "bpf: Add bpf_mptcp_sched_ops"
>  Squash to "bpf: Add bpf_mptcp_sched_kfunc_set"
>  Squash to "selftests/bpf: Add bpf_first scheduler"
>  Squash to "selftests/bpf: Add bpf_bkup scheduler"
>  Squash to "selftests/bpf: Add bpf_rr scheduler"
>
> include/net/mptcp.h                           |  7 +-
> net/mptcp/bpf.c                               |  1 +
> net/mptcp/protocol.c                          | 33 ++++---
> net/mptcp/protocol.h                          | 13 ++-
> net/mptcp/sched.c                             | 92 ++++++++++---------
> tools/testing/selftests/bpf/bpf_tcp_helpers.h |  9 +-
> .../selftests/bpf/progs/mptcp_bpf_bkup.c      | 10 +-
> .../selftests/bpf/progs/mptcp_bpf_first.c     | 10 +-
> .../selftests/bpf/progs/mptcp_bpf_rr.c        | 10 +-
> 9 files changed, 116 insertions(+), 69 deletions(-)
>
> -- 
> 2.35.3
>
>
>

--
Mat Martineau
Intel

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2022-10-14  1:21 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-12  4:50 [PATCH mptcp-next v2 00/16] register default scheduler Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 01/16] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 02/16] Squash to "mptcp: add get_subflow wrappers" II Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 03/16] Squash to "mptcp: simplify push_pending" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 04/16] Squash to "mptcp: multi subflows push_pending" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 05/16] Squash to "mptcp: simplify subflow_push_pending" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 06/16] Squash to "mptcp: multi subflows subflow_push_pending" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 07/16] Squash to "mptcp: multi subflows retrans support" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 08/16] mptcp: use snd_burst of data instead of msk Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 09/16] mptcp: define default scheduler Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 10/16] mptcp: register " Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 11/16] mptcp: add mptcp_sched_data_set_contexts helper Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 12/16] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 13/16] Squash to "bpf: Add bpf_mptcp_sched_kfunc_set" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 14/16] Squash to "selftests/bpf: Add bpf_first scheduler" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 15/16] Squash to "selftests/bpf: Add bpf_bkup scheduler" Geliang Tang
2022-10-12  4:50 ` [PATCH mptcp-next v2 16/16] Squash to "selftests/bpf: Add bpf_rr scheduler" Geliang Tang
2022-10-14  1:20 ` [PATCH mptcp-next v2 00/16] register default scheduler Mat Martineau

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.