From patchwork Mon Feb 17 10:41:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13977532 X-Patchwork-Delegate: mat@martineau.name Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E603F23CE for ; Mon, 17 Feb 2025 10:41:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788886; cv=none; b=fY5W+yoz+ygrVJCA6Tx8jUOYuBc2V4ju5RG6VM43bu60WE2G6CDhpRgeXaHUgXpKW1Zdhnn5FN1VZ1JEglbAgVQ/0xYFmRVG+5h5BGLlE7sTswz45a5NLqgQPy1b+hJ7aoV8Elhcx+9fe57zU11ap6EVlO6VLitg0Bupxm1nwaQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788886; c=relaxed/simple; bh=K3Rnb2UTkpBW7VUsFEJQvYCnR2M9r7U8PmE2AvJg74o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZnXTCCZDNQiTLiPbUKxaOD7cwpyzO5ZwLdL7lz+rgIQmy388CkpByJXLJ2MIhupeTquwT5zHqhujStkVpbi1oaL0xMqCTu5x80KR1WzZ1AXp1odxArdi+8op6SAEhXhui9lqQBpV0TGkSffxTovBsg5HJAQir0Y1LUJqzInngjk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ecdU9fIP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ecdU9fIP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5E067C4CED1; Mon, 17 Feb 2025 10:41:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739788885; bh=K3Rnb2UTkpBW7VUsFEJQvYCnR2M9r7U8PmE2AvJg74o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ecdU9fIPl2Yuj51we3wP00xblCRcQLEbw3Uk2Mz8l2yuLvG7ZYcSznmhccT0qj6UW LGxid3HRJd6ybDwTwWmMe1WkQaXTgjfyjxaGXTpVj4BPHrnmtkTRw2zVZdauJK0cgw fDkbp710WQK9V5NUiFAIxO3+rZLc5UN09pfRxGMSS3l53m3qW8BrHlT7XrekWIcj7z 9iLtDTk0GkSW549/7oh6lTmAZg/axQFHqzjr7qAxQc3m8rFttntrn26UnC4k0jZ4jc f7ZSq61bhnRzmkYh6qDLgcfuW3bHROAb3ljWRmNUf21xDMVepXHrInISdgWkbMuzhc yAnwhEwE9ybag== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v15 1/8] Squash to "mptcp: add sched_data helpers" Date: Mon, 17 Feb 2025 18:41:11 +0800 Message-ID: <7ea96bb05373a60d2a95de3a43527e71a5eeed7e.1739788598.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang Drop bpf_mptcp_subflow_ctx_by_pos. Keep mptcp_sched_data_set_contexts for future use. Signed-off-by: Geliang Tang --- net/mptcp/bpf.c | 8 -------- net/mptcp/protocol.h | 2 -- net/mptcp/sched.c | 15 --------------- 3 files changed, 25 deletions(-) diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c index 2256d4de1e20..2d2ad38ab1c1 100644 --- a/net/mptcp/bpf.c +++ b/net/mptcp/bpf.c @@ -278,14 +278,6 @@ bpf_iter_mptcp_subflow_destroy(struct bpf_iter_mptcp_subflow *it) { } -__bpf_kfunc struct mptcp_subflow_context * -bpf_mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos) -{ - if (pos >= MPTCP_SUBFLOWS_MAX) - return NULL; - return data->contexts[pos]; -} - __bpf_kfunc static bool bpf_mptcp_subflow_queues_empty(struct sock *sk) { return tcp_rtx_queue_empty(sk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index bac5c925a72f..a1d6d996aa93 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -718,8 +718,6 @@ void mptcp_subflow_queue_clean(struct sock *sk, struct sock *ssk); void mptcp_sock_graft(struct sock *sk, struct socket *parent); u64 mptcp_wnd_end(const struct mptcp_sock *msk); void mptcp_set_timeout(struct sock *sk); -struct mptcp_subflow_context * -bpf_mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos); struct sock *__mptcp_nmpc_sk(struct mptcp_sock *msk); bool __mptcp_close(struct sock *sk, long timeout); void mptcp_cancel_work(struct sock *sk); diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c index 37d86aadaeaa..ef3f0250ae1f 100644 --- a/net/mptcp/sched.c +++ b/net/mptcp/sched.c @@ -157,21 +157,6 @@ void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow, static 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; - } - data->subflows = i; - - for (; i < MPTCP_SUBFLOWS_MAX; i++) - data->contexts[i] = NULL; } int mptcp_sched_get_send(struct mptcp_sock *msk) From patchwork Mon Feb 17 10:41:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13977533 X-Patchwork-Delegate: mat@martineau.name Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FEA823CE for ; Mon, 17 Feb 2025 10:41:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788887; cv=none; b=RXDzn3ER4TJS5PUMx0xw3fgCI8rrs1xTZZVRKZ0Jmd0+ZVirqss9EOhmQaY1XgK/6vmPd0yoB/nKMkA/RhZoy2BAas1IGUHUdyL8VqeUe+mGi1yFpHkN9ggTA3XEbTWtFS61lfPz5Bz1CyXni9crWnx9xwPO9aKByj2iXYDWEBs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788887; c=relaxed/simple; bh=Zb8VbAQ0w/tAIbpc9ZelYKxLlWng0X2pfbgu13dUC2U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nWCvvByp1H+bAxfBQbp2hA+lm0JN2xXLEgnI/AV1fkiYzMSHaf+GeUsLY+MSbeWNthJEng1HbjUdrJzm1+4xHBpg62fI1mGluXPaJhzsOl3ZHkOcda4rojBiS556V4YCnO2kydqcaHH64U9v/4gGJ2zUFHz3y8XOb6za/KHSWCE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SBqfcayk; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SBqfcayk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6E14C4CEE2; Mon, 17 Feb 2025 10:41:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739788886; bh=Zb8VbAQ0w/tAIbpc9ZelYKxLlWng0X2pfbgu13dUC2U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SBqfcaykTUKIv1O5F41vPcR1DpiVbzFN5syYbrqXxsqbCm2wSSG1Ymy0X3dRpM5R2 VrpiZ+gEfBR3JcGBAzK4sNN2iVMCHBq/jY2HB+Xdr4KNxHI8A7TZ6/8F1PS8HmDgxs fJ1621SomrcAPAOU71HQUzY7sJ9HjPDaPnEezb8yyVuB4DfnD9QdyC9hNVj8e2yA7U e+pVaIhRiLMgZbRcjRwPjXb9pW4m93zy9IpDmmSOI/w+vu9ffb/RGey0URwGtdyeS8 E5LwQ1piiM/qcv8COhtiI6wvV2uMht1kKCyoXfDLQ9TskTySEE13MHl74tw98Y/P2P e2K4ZlK0HmZKw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v15 2/8] Squash to "bpf: Export mptcp packet scheduler helpers" Date: Mon, 17 Feb 2025 18:41:12 +0800 Message-ID: <6a7fe51097cb3bdfb01aec206869dfefc5ca6258.1739788598.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang Instead of adding a new BPF function bpf_mptcp_send_info_to_ssk() in v12, this patch uses a much more simpler approach, which using '__ign' suffix for the argument of bpf_mptcp_subflow_ctx() to let BPF to ignore the type check of this argument. Remove bpf_mptcp_subflow_ctx_by_pos from BPF kfunc set. Drop bpf_mptcp_sched_kfunc_set, use bpf_mptcp_common_kfunc_set instead. Add new helpers bpf_mptcp_subflow_tcp_sock() and bpf_sk_stream_memory_free(). Signed-off-by: Geliang Tang --- net/mptcp/bpf.c | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c index 2d2ad38ab1c1..80fb1799b067 100644 --- a/net/mptcp/bpf.c +++ b/net/mptcp/bpf.c @@ -224,8 +224,10 @@ struct bpf_iter_mptcp_subflow_kern { __bpf_kfunc_start_defs(); __bpf_kfunc static struct mptcp_subflow_context * -bpf_mptcp_subflow_ctx(const struct sock *sk) +bpf_mptcp_subflow_ctx(const struct sock *sk__ign) { + const struct sock *sk = sk__ign; + if (sk && sk_fullsock(sk) && sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk)) return mptcp_subflow_ctx(sk); @@ -233,6 +235,15 @@ bpf_mptcp_subflow_ctx(const struct sock *sk) return NULL; } +__bpf_kfunc static struct sock * +bpf_mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow) +{ + if (!subflow) + return NULL; + + return mptcp_subflow_tcp_sock(subflow); +} + __bpf_kfunc static int bpf_iter_mptcp_subflow_new(struct bpf_iter_mptcp_subflow *it, struct sock *sk) @@ -283,34 +294,37 @@ __bpf_kfunc static bool bpf_mptcp_subflow_queues_empty(struct sock *sk) return tcp_rtx_queue_empty(sk); } +__bpf_kfunc static bool bpf_sk_stream_memory_free(const struct sock *sk__ign) +{ + const struct sock *sk = sk__ign; + + if (sk && sk_fullsock(sk) && + sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk)) + return sk_stream_memory_free(sk); + + return NULL; +} + __bpf_kfunc_end_defs(); BTF_KFUNCS_START(bpf_mptcp_common_kfunc_ids) BTF_ID_FLAGS(func, bpf_mptcp_subflow_ctx, KF_RET_NULL) +BTF_ID_FLAGS(func, bpf_mptcp_subflow_tcp_sock, KF_RET_NULL) BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_new, KF_ITER_NEW | KF_TRUSTED_ARGS) BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_next, KF_ITER_NEXT | KF_RET_NULL) BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_destroy, KF_ITER_DESTROY) -BTF_KFUNCS_END(bpf_mptcp_common_kfunc_ids) - -static const struct btf_kfunc_id_set bpf_mptcp_common_kfunc_set = { - .owner = THIS_MODULE, - .set = &bpf_mptcp_common_kfunc_ids, -}; - -BTF_KFUNCS_START(bpf_mptcp_sched_kfunc_ids) BTF_ID_FLAGS(func, mptcp_subflow_set_scheduled) -BTF_ID_FLAGS(func, bpf_mptcp_subflow_ctx_by_pos) BTF_ID_FLAGS(func, mptcp_subflow_active) BTF_ID_FLAGS(func, mptcp_set_timeout) BTF_ID_FLAGS(func, mptcp_wnd_end) -BTF_ID_FLAGS(func, tcp_stream_memory_free) +BTF_ID_FLAGS(func, bpf_sk_stream_memory_free, KF_RET_NULL) BTF_ID_FLAGS(func, bpf_mptcp_subflow_queues_empty) BTF_ID_FLAGS(func, mptcp_pm_subflow_chk_stale, KF_SLEEPABLE) -BTF_KFUNCS_END(bpf_mptcp_sched_kfunc_ids) +BTF_KFUNCS_END(bpf_mptcp_common_kfunc_ids) -static const struct btf_kfunc_id_set bpf_mptcp_sched_kfunc_set = { +static const struct btf_kfunc_id_set bpf_mptcp_common_kfunc_set = { .owner = THIS_MODULE, - .set = &bpf_mptcp_sched_kfunc_ids, + .set = &bpf_mptcp_common_kfunc_ids, }; static int __init bpf_mptcp_kfunc_init(void) @@ -321,7 +335,7 @@ static int __init bpf_mptcp_kfunc_init(void) ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_CGROUP_SOCKOPT, &bpf_mptcp_common_kfunc_set); ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS, - &bpf_mptcp_sched_kfunc_set); + &bpf_mptcp_common_kfunc_set); #ifdef CONFIG_BPF_JIT ret = ret ?: register_bpf_struct_ops(&bpf_mptcp_sched_ops, mptcp_sched_ops); #endif From patchwork Mon Feb 17 10:41:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13977534 X-Patchwork-Delegate: mat@martineau.name Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C8FBE23CE for ; Mon, 17 Feb 2025 10:41:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788888; cv=none; b=bohrHFaJKu7vOTT4u56VcPpKMOC9bqDyGO/XLjFLFgQnEVXgDgApn9GsuVa4kp0QTMgm1FB+lMpEpwQiYHK2uXWYDSFf8pY88+mdAO8+3PwFcVf3ERCTw4C8mZoJw/dgTvkuP1ypi2X29rQqKiWXc0U5QZFPHTJMRjxhmfWICR0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788888; c=relaxed/simple; bh=nQZtedKpWAKqD5FAUaS5Q2jXabjfb2+9JYJPXNxUuYU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=et8/65zVJHEOOO7X5zWoSLEGBhn7MFK0d3WoL84PvvE9OKpHkPG6PV48FTrycUCUGH0dO20Wr4PsKPWFwFuBnrMnQ5ZblJQTMzRG42E1GiXjSgsVIarkEyJERuVkT/EocHHoUJh96tt3KgBkO3agOcEVCVLEHngeDk8Z5VVd5ss= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TFU1uQlT; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TFU1uQlT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 56D45C4CEE4; Mon, 17 Feb 2025 10:41:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739788888; bh=nQZtedKpWAKqD5FAUaS5Q2jXabjfb2+9JYJPXNxUuYU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TFU1uQlTC/o1JFzvJyViQWIKdGJmAkCvV4Iv88JwOcA1297eSmFjjz2TwMAwxMF1T Wth6B/XHjLfoCAXar6kJNhzYPqtsmQq/RzIReB0dTNWaMDeR+/Wrk4j6h4kto59cjs 0ccMYeRgF+UIZVOBCnc7bD6YdOEOQmmGzRMhPhRlT8sRZNWqoNLEVwoEsg6sMha3Fh LNSt+DVfaI+UE9UqG2zGjIywXJ81dHTthCTlQjdHpsKWKK9436qkkKqb7JJ2LjdvsT wDRfytLj/pdUdYvsZT6B4QZc/D5yztBDPnfHxl+h8eU0DQmehVsnolsF3HhCrtZjjp ln0yclbPKzfCg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v15 3/8] Squash to "selftests/bpf: Add bpf_first scheduler & test" Date: Mon, 17 Feb 2025 18:41:13 +0800 Message-ID: <472c328dea486ab602e167e5b68084a48cb906b0.1739788598.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang Use the newly added bpf_for_each() helper to walk the conn_list. Drop bpf_mptcp_subflow_ctx_by_pos declaration. Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/progs/mptcp_bpf.h | 3 --- tools/testing/selftests/bpf/progs/mptcp_bpf_first.c | 8 +++++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf.h b/tools/testing/selftests/bpf/progs/mptcp_bpf.h index 72263672510a..2eb2c1c3bffb 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf.h +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf.h @@ -49,7 +49,4 @@ bpf_mptcp_subflow_ctx(const struct sock *sk) __ksym; extern void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow, bool scheduled) __ksym; -extern struct mptcp_subflow_context * -bpf_mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos) __ksym; - #endif diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c index ab71ae3c6506..73b18eeeb62f 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c @@ -20,7 +20,13 @@ SEC("struct_ops") int BPF_PROG(bpf_first_get_send, struct mptcp_sock *msk, struct mptcp_sched_data *data) { - mptcp_subflow_set_scheduled(bpf_mptcp_subflow_ctx_by_pos(data, 0), true); + struct mptcp_subflow_context *subflow; + + subflow = bpf_mptcp_subflow_ctx(msk->first); + if (!subflow) + return -1; + + mptcp_subflow_set_scheduled(subflow, true); return 0; } From patchwork Mon Feb 17 10:41:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13977535 X-Patchwork-Delegate: mat@martineau.name Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CCF3023CE for ; Mon, 17 Feb 2025 10:41:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788889; cv=none; b=SEX7Od3Ef0qsWcYX7FXEfFd051sOHy1Dddl2RF4icgPRT6tTI5bEHDAB53+CgwdWUMP4+c35APGVHjztp07qlz9os9krEl/wS57uVk7km6gplqK/B82Eknh/KBpIw/VWJN2ulFEUZzKp31GlPXdJD9uOyPJ12cr/Xnj41TRWp+g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788889; c=relaxed/simple; bh=1su1M3eNFxvg6tCEug8h33AMhzMJVn4aAseRa4VGjmg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s4AVzbSzEREo1n2OCYsLCU7r+joNPa4PBPAeShKPkd9iCTil1XUGm5oIN35d6zhqZBcHvEXdbknA4ltrkM/FYHe8XqpZp4IljTN21AFo1Q3WQL93xEEeqeThR4aG+lyWAaSQj+7pRho59Xv1RQzwzenNDeit84GGE3/DY+LDTl0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZTzRhRj2; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZTzRhRj2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6E0FC4CED1; Mon, 17 Feb 2025 10:41:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739788889; bh=1su1M3eNFxvg6tCEug8h33AMhzMJVn4aAseRa4VGjmg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZTzRhRj2g4CT5qqMpoqhyer0cHyEcDO1onRL9NtokQ7+Y2g30uzD6uCFDA6D1iMdU K72b5hCE2pcurWU1APnQvgtOqyQg0qgcxO0Xl+UJYWvs3bMHWIorNJ9qwEPnsKl/8Y JOhVqS/1zYqgN01IYAKIM4BGVgLMZ56SMaLSYGoHyIVfBjt3Eo4K6RNTxcURG4Szbv FuR7Of+z/XcoGdtG57so+7Hhf47IABaJryeEIHrki2mKjbLyKZnvzeUHuHIg5P6AZA MW0VcmJwYZOzc8LaNeOqNJOSAXjABaZDJEqwAkiDcC7jh8+F7CGa3etaxuCYv75DBe OorTJdCV3MqQA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v15 4/8] Squash to "selftests/bpf: Add bpf_bkup scheduler & test" Date: Mon, 17 Feb 2025 18:41:14 +0800 Message-ID: <16da745e973898c10f57121ca368bcc6dc1bb78f.1739788598.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang Use the newly added bpf_for_each() helper to walk the conn_list. Signed-off-by: Geliang Tang --- .../testing/selftests/bpf/progs/mptcp_bpf_bkup.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c index 29be67e2f2ef..b7212101705d 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c @@ -20,26 +20,16 @@ SEC("struct_ops") int BPF_PROG(bpf_bkup_get_send, struct mptcp_sock *msk, struct mptcp_sched_data *data) { - int nr = -1; - - for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) { - struct mptcp_subflow_context *subflow; - - subflow = bpf_mptcp_subflow_ctx_by_pos(data, i); - if (!subflow) - break; + struct mptcp_subflow_context *subflow; + bpf_for_each(mptcp_subflow, subflow, (struct sock *)msk) { if (!BPF_CORE_READ_BITFIELD_PROBED(subflow, backup) || !BPF_CORE_READ_BITFIELD_PROBED(subflow, request_bkup)) { - nr = i; + mptcp_subflow_set_scheduled(subflow, true); break; } } - if (nr != -1) { - mptcp_subflow_set_scheduled(bpf_mptcp_subflow_ctx_by_pos(data, nr), true); - return -1; - } return 0; } From patchwork Mon Feb 17 10:41:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13977536 X-Patchwork-Delegate: mat@martineau.name Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82A0E15C0 for ; Mon, 17 Feb 2025 10:41:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788891; cv=none; b=OlaSm2VabwtDQDIVSSNp6czwHtROe1ZWteBA6szaP5Hg4wRtQsDqKkxc46GACwpi4IRu0FH1j9Tl5WD9wSUiCawaV4TteAFKSqHD4sjj3YBzkKaOKHrkm2hyhWT9mI1SUqxLhGNS5N8xQ8Xy8dsNfoZgO6jJ5qYYrIma0OeBKmA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788891; c=relaxed/simple; bh=NGXQE9Kif6loAReYC7iiycV9qt5iAyr/88XdrWpLpD0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IDAUBAPFzpJKhtD0L4GkkohfPZK6PQaS2hu4+9ZqyPPamnbOQoa1wnygb7f+F0UjXma4+EEzrerqX0WqKFre3Apr/Nw/upqYi5jX0+PaLxA6Xv3krAWnUg2lrHaDySspvV+g1D5rEz3wBIu8qty4gikKR8rDrBu0vj/XGqVLoeI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RhK1Ynub; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RhK1Ynub" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2EE2DC4CED1; Mon, 17 Feb 2025 10:41:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739788891; bh=NGXQE9Kif6loAReYC7iiycV9qt5iAyr/88XdrWpLpD0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RhK1Ynubn7ZLLHUbGLdjohx51aarScFoxwod0zLwaZZAo2VvavDE5BjG/MTuDrLv1 lnyJVT8zfGC5YaYI2udvkPqwcJ/Ux7LD6GgXy0E/9a+yNGhhx68M143UKOPYNNGMoh 8jpbyu3BkULV0B7jFVOQbsQts53gW53m5foq/SWB9BiDbOO6RX2w2K9hELMk270mMI sA+APAEJwPQQPTsL945ypBN+ppjM5kICU/q9B7UxagOcqqXGGXzG5UPGMCOGc5fgh0 vxw4IuQV6M+sM1ffALGpLWitMUZipM5zV+1rYqDDDFL51BVfKpNZEuC04Q6VWvsmvk rICEm+Po1hVKA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v15 5/8] Squash to "selftests/bpf: Add bpf_rr scheduler & test" Date: Mon, 17 Feb 2025 18:41:15 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang Use the newly added bpf_for_each() helper to walk the conn_list. Signed-off-by: Geliang Tang --- .../selftests/bpf/progs/mptcp_bpf_rr.c | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c index 405e96c116d5..4b109adc3602 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c @@ -34,38 +34,35 @@ SEC("struct_ops") int BPF_PROG(bpf_rr_get_send, struct mptcp_sock *msk, struct mptcp_sched_data *data) { - struct mptcp_subflow_context *subflow; + struct mptcp_subflow_context *subflow, *next; struct mptcp_rr_storage *ptr; - struct sock *last_snd = NULL; - int nr = 0; ptr = bpf_sk_storage_get(&mptcp_rr_map, msk, 0, BPF_LOCAL_STORAGE_GET_F_CREATE); if (!ptr) return -1; - last_snd = ptr->last_snd; + next = bpf_mptcp_subflow_ctx(msk->first); + if (!next) + return -1; - for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) { - subflow = bpf_mptcp_subflow_ctx_by_pos(data, i); - if (!last_snd || !subflow) - break; + if (!ptr->last_snd) + goto out; - if (mptcp_subflow_tcp_sock(subflow) == last_snd) { - if (i + 1 == MPTCP_SUBFLOWS_MAX || - !bpf_mptcp_subflow_ctx_by_pos(data, i + 1)) + bpf_for_each(mptcp_subflow, subflow, (struct sock *)msk) { + if (mptcp_subflow_tcp_sock(subflow) == ptr->last_snd) { + subflow = bpf_iter_mptcp_subflow_next(&___it); + if (!subflow) break; - nr = i + 1; + next = subflow; break; } } - subflow = bpf_mptcp_subflow_ctx_by_pos(data, nr); - if (!subflow) - return -1; - mptcp_subflow_set_scheduled(subflow, true); - ptr->last_snd = mptcp_subflow_tcp_sock(subflow); +out: + mptcp_subflow_set_scheduled(next, true); + ptr->last_snd = mptcp_subflow_tcp_sock(next); return 0; } From patchwork Mon Feb 17 10:41:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13977537 X-Patchwork-Delegate: mat@martineau.name Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA56F216E1B for ; Mon, 17 Feb 2025 10:41:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788892; cv=none; b=uOlOXon2mNoaOMk+DtwehH2yfoUqN1Cn9/duoT73dsM1+vQ0/cPXjZrDpJq6goudR07NuyPX6UhTUjRbzmhME/dRHvmKuiWRMI9hhb0+JgrVYEtns2b051cTAQR2e2TbAujHAQhjo5VbtdjO9YStKNRc4KChMJotg9HWAtWsgR4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788892; c=relaxed/simple; bh=PvRlww9oxwxOA+huQBk1xHRyv5mmqZH7amLe1b0bbxw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XJr8Rmv+liydhw0XwKSUVW20svENVwLIXJJareWQGNUrTOb9VZ8nrc1c1OybzfhXmLw/vMsOMT3ecIqgtWvRSF4+W4jFjoWGqToNqUyx6kFWmoCBWjcIYhgwb7G/wnG3B+QNd3dbcNmf72W8cf8YkVVkyDg3DjaXm9MjqzlPB24= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kM29NWlL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kM29NWlL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A02C1C4CEE8; Mon, 17 Feb 2025 10:41:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739788892; bh=PvRlww9oxwxOA+huQBk1xHRyv5mmqZH7amLe1b0bbxw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kM29NWlLViKI9VroFDvd08WhYtFA/A9zdVsEfvlMuJxEiQDS8VZsAorowBrN0sjuX pG29z2JPAvPK9xF09sFZ75PaoujEi6MxmXUaNbLLS+bpav1KA2TPoGXsoIBbBT6eym N/EluCcwqLB9NuMFUuFiX5Rib4yHejD71QLUqoT4qYewjpB8i/v+RgZwBRIDD/d4/0 2Nz4yd6updEUNjlng/lbMI8vEuaa1nHDjeIQPWttCA4KY6XP6Zlb1759w7Mfoq/Vm8 b13YJebscD7kHtMVEcD2l+MJABswmHNg5lUJrdhI2w9AT26i5cVJ0yQlQGZcDfL7mu ioSUe4asuG33w== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v15 6/8] Squash to "selftests/bpf: Add bpf_red scheduler & test" Date: Mon, 17 Feb 2025 18:41:16 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang Use the newly added bpf_for_each() helper to walk the conn_list. Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/progs/mptcp_bpf_red.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c index 627502e3c851..9f2cab4ba3f7 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c @@ -20,12 +20,10 @@ SEC("struct_ops") int BPF_PROG(bpf_red_get_send, struct mptcp_sock *msk, struct mptcp_sched_data *data) { - for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) { - if (!bpf_mptcp_subflow_ctx_by_pos(data, i)) - break; + struct mptcp_subflow_context *subflow; - mptcp_subflow_set_scheduled(bpf_mptcp_subflow_ctx_by_pos(data, i), true); - } + bpf_for_each(mptcp_subflow, subflow, (struct sock *)msk) + mptcp_subflow_set_scheduled(subflow, true); return 0; } From patchwork Mon Feb 17 10:41:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13977538 X-Patchwork-Delegate: mat@martineau.name Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0FB5101FF for ; Mon, 17 Feb 2025 10:41:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788895; cv=none; b=TNfASgW6WyvCfrbH0jWCFb6MzsCKlHN2Ho9T53lC5u/qzmxeCXDMR/CTZEpEHt54SPuYU9OB7si7w+XMJ1YmXPX+Pwq/bhVD7BxaJcvB4546hOCa0LmQIaPABvHU4ZnOa8Yr55T2CpRUMakNDcxPLfwYK11fhBXoQSr7K+xtUuw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788895; c=relaxed/simple; bh=g7fP8ZebFsSShxNW7pg6N+TWYUcFSFO2jiRRqlSTSbk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dD9ycAe331yUwHIkMlHcR4ELQyYweWgJBcsLXCwzks1xWyL1M2+bcFCqGSKsocwKYzk98Ieco3sMZV/6W94dTZgIlX9ZdEZf3+4CdYd7I+N+ulJHvcsxeAxX/uGtZp8UylrzLWzWZA+BD+XjKTvs/iKVSX48ssRD2glzj4tYuC0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VJ/s814E; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VJ/s814E" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 47AC2C4CED1; Mon, 17 Feb 2025 10:41:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739788894; bh=g7fP8ZebFsSShxNW7pg6N+TWYUcFSFO2jiRRqlSTSbk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VJ/s814ElgyIQn98M4SVYycjR60BZNXWsxvpQ3kwq6T4LAYhPaNVgHoUQbe6pZNgR YISGN+nHKlv6FIrDPIH+HXN/HNZFVi69PNITG0mOmDtjEWa0xh8wVmhlIvPPuzkd6+ TDZbyEh0TNDwMIz5L12ol0ZHXvYjPYoOYmgzqVfe39t7fnVeytfJXRy/lyKa42S4hB ldi79dm2YRG37/GuaAkq3O9Gl3jfPJAgPzhZH+z2IpJdJ0U6LlmUapLy8tZplF8Pkj FKqnSIueT2Yr+bNZJn/ADJeJt4gK2GtZ/vnzv8OVg8ET7A0Up//hYqzzNPX+QVuJCE AaOQCn0wHB3Zg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v15 7/8] Squash to "selftests/bpf: Add bpf_burst scheduler & test" Date: Mon, 17 Feb 2025 18:41:17 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang Use the newly added bpf_for_each() helper to walk the conn_list. Drop bpf_subflow_send_info, use subflow_send_info instead. Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/progs/mptcp_bpf.h | 2 + .../selftests/bpf/progs/mptcp_bpf_burst.c | 78 +++++++------------ 2 files changed, 28 insertions(+), 52 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf.h b/tools/testing/selftests/bpf/progs/mptcp_bpf.h index 2eb2c1c3bffb..badcffe0942c 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf.h +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf.h @@ -45,6 +45,8 @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow) /* ksym */ extern struct mptcp_subflow_context * bpf_mptcp_subflow_ctx(const struct sock *sk) __ksym; +extern struct sock * +bpf_mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow) __ksym; extern void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow, bool scheduled) __ksym; diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c index 5743601df9dc..482b30cfb011 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c @@ -11,15 +11,10 @@ char _license[] SEC("license") = "GPL"; #define min(a, b) ((a) < (b) ? (a) : (b)) -struct bpf_subflow_send_info { - __u8 subflow_id; - __u64 linger_time; -}; - extern bool mptcp_subflow_active(struct mptcp_subflow_context *subflow) __ksym; extern void mptcp_set_timeout(struct sock *sk) __ksym; extern __u64 mptcp_wnd_end(const struct mptcp_sock *msk) __ksym; -extern bool tcp_stream_memory_free(const struct sock *sk, int wake) __ksym; +extern bool bpf_sk_stream_memory_free(const struct sock *sk) __ksym; extern bool bpf_mptcp_subflow_queues_empty(struct sock *sk) __ksym; extern void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) __ksym; @@ -44,19 +39,6 @@ static __always_inline bool tcp_rtx_and_write_queues_empty(struct sock *sk) return bpf_mptcp_subflow_queues_empty(sk) && tcp_write_queue_empty(sk); } -static __always_inline bool __sk_stream_memory_free(const struct sock *sk, int wake) -{ - if (sk->sk_wmem_queued >= sk->sk_sndbuf) - return false; - - return tcp_stream_memory_free(sk, wake); -} - -static __always_inline bool sk_stream_memory_free(const struct sock *sk) -{ - return __sk_stream_memory_free(sk, 0); -} - SEC("struct_ops") void BPF_PROG(mptcp_sched_burst_init, struct mptcp_sock *msk) { @@ -71,7 +53,7 @@ SEC("struct_ops") int BPF_PROG(bpf_burst_get_send, struct mptcp_sock *msk, struct mptcp_sched_data *data) { - struct bpf_subflow_send_info send_info[SSK_MODE_MAX]; + struct subflow_send_info send_info[SSK_MODE_MAX]; struct mptcp_subflow_context *subflow; struct sock *sk = (struct sock *)msk; __u32 pace, burst, wmem; @@ -81,18 +63,12 @@ int BPF_PROG(bpf_burst_get_send, struct mptcp_sock *msk, /* pick the subflow with the lower wmem/wspace ratio */ for (i = 0; i < SSK_MODE_MAX; ++i) { - send_info[i].subflow_id = MPTCP_SUBFLOWS_MAX; + send_info[i].ssk = NULL; send_info[i].linger_time = -1; } - for (i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) { - bool backup; - - subflow = bpf_mptcp_subflow_ctx_by_pos(data, i); - if (!subflow) - break; - - backup = subflow->backup || subflow->request_bkup; + bpf_for_each(mptcp_subflow, subflow, sk) { + bool backup = subflow->backup || subflow->request_bkup; ssk = mptcp_subflow_tcp_sock(subflow); if (!mptcp_subflow_active(subflow)) @@ -110,7 +86,7 @@ int BPF_PROG(bpf_burst_get_send, struct mptcp_sock *msk, linger_time = div_u64((__u64)ssk->sk_wmem_queued << 32, pace); if (linger_time < send_info[backup].linger_time) { - send_info[backup].subflow_id = i; + send_info[backup].ssk = ssk; send_info[backup].linger_time = linger_time; } } @@ -118,16 +94,18 @@ int BPF_PROG(bpf_burst_get_send, struct mptcp_sock *msk, /* pick the best backup if no other subflow is active */ if (!nr_active) - send_info[SSK_MODE_ACTIVE].subflow_id = send_info[SSK_MODE_BACKUP].subflow_id; + send_info[SSK_MODE_ACTIVE].ssk = send_info[SSK_MODE_BACKUP].ssk; - subflow = bpf_mptcp_subflow_ctx_by_pos(data, send_info[SSK_MODE_ACTIVE].subflow_id); - if (!subflow) + ssk = send_info[SSK_MODE_ACTIVE].ssk; + if (!ssk || !bpf_sk_stream_memory_free(ssk)) return -1; - ssk = mptcp_subflow_tcp_sock(subflow); - if (!ssk || !sk_stream_memory_free(ssk)) + + subflow = bpf_mptcp_subflow_ctx(ssk); + if (!subflow) return -1; burst = min(MPTCP_SEND_BURST_SIZE, mptcp_wnd_end(msk) - msk->snd_nxt); + ssk = bpf_core_cast(ssk, struct sock); wmem = ssk->sk_wmem_queued; if (!burst) goto out; @@ -146,20 +124,16 @@ SEC("struct_ops") int BPF_PROG(bpf_burst_get_retrans, struct mptcp_sock *msk, struct mptcp_sched_data *data) { - int backup = MPTCP_SUBFLOWS_MAX, pick = MPTCP_SUBFLOWS_MAX, subflow_id; + struct sock *backup = NULL, *pick = NULL; struct mptcp_subflow_context *subflow; int min_stale_count = INT_MAX; - struct sock *ssk; - for (int i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) { - subflow = bpf_mptcp_subflow_ctx_by_pos(data, i); - if (!subflow) - break; + bpf_for_each(mptcp_subflow, subflow, (struct sock *)msk) { + struct sock *ssk = bpf_mptcp_subflow_tcp_sock(subflow); - if (!mptcp_subflow_active(subflow)) + if (!ssk || !mptcp_subflow_active(subflow)) continue; - ssk = mptcp_subflow_tcp_sock(subflow); /* still data outstanding at TCP level? skip this */ if (!tcp_rtx_and_write_queues_empty(ssk)) { mptcp_pm_subflow_chk_stale(msk, ssk); @@ -168,23 +142,23 @@ int BPF_PROG(bpf_burst_get_retrans, struct mptcp_sock *msk, } if (subflow->backup || subflow->request_bkup) { - if (backup == MPTCP_SUBFLOWS_MAX) - backup = i; + if (!backup) + backup = ssk; continue; } - if (pick == MPTCP_SUBFLOWS_MAX) - pick = i; + if (!pick) + pick = ssk; } - if (pick < MPTCP_SUBFLOWS_MAX) { - subflow_id = pick; + if (pick) goto out; - } - subflow_id = min_stale_count > 1 ? backup : MPTCP_SUBFLOWS_MAX; + pick = min_stale_count > 1 ? backup : NULL; out: - subflow = bpf_mptcp_subflow_ctx_by_pos(data, subflow_id); + if (!pick) + return -1; + subflow = bpf_mptcp_subflow_ctx(pick); if (!subflow) return -1; mptcp_subflow_set_scheduled(subflow, true); From patchwork Mon Feb 17 10:41:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13977539 X-Patchwork-Delegate: mat@martineau.name Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0B8A8101FF for ; Mon, 17 Feb 2025 10:41:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788896; cv=none; b=ny4HUoqxFrgdP5KPCFSMGHJYxTOdKBVddSQcn3zhXsK+jwDr5hTIpwizxiNg5B9unw4qnRFOq+Gnj/MFt5PlDFhEudQfUJrfmJrD2+FVais2Z7nvVzgzbt7yJalrS7CXmEXNLt22mqdBuUVeY5Oz58j22aSyPosaakUmDlXBZ5M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739788896; c=relaxed/simple; bh=QH8lswTyWVWhcaVom/XLC2qNwS0O3SXO+M66ZfsxXTM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hNCT1Y4+WkXa44+sV9YMdZIpeATF6Ub8HJZwxp6d/T3Qk6GWxyZZYwqBOXLXXY7aVUKCqnYef+oe5PZM8PoqmQ2NkYfarB/SQpvfLOBIpFEhAZWSySpj+GH4tP6euzxWFDKxbZEFpyuVCRNqXEnqdq9ZykJFpTyp4rTthfDj/CU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qw38xLUB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qw38xLUB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E3DD6C4CEE2; Mon, 17 Feb 2025 10:41:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739788895; bh=QH8lswTyWVWhcaVom/XLC2qNwS0O3SXO+M66ZfsxXTM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qw38xLUBDRsTx7mg3IP+0lGf3nX+aB12zCPSthjclkeXI5zwp9sdjc1PzRkf1IHIi sExUBXPRDOI/xRj0Tp0b3e66lTvpItMTwxaL9uAt4QLkZq/42BmwSCPQ8d+fr2q7+7 1CqN5y4JJgidWUSx2UK10hqm8z2z79v2F9Y4xsmit6jc29hS2OYq6TLR6xjWTFKIyh cX+V3G7KEPmm+cJ7cy5woeEZnHmBpDkG6eQWWic1gqyLSyHMbzhwjuL0TU2CeuruBg lytJmaE4iDjiQ5U0P0bkqAHF5Ui5HuKRYPXlM3vpuKdyAAEwdH4DtNN/NlgcU4oP33 oKrMJOLjzTYOg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v15 8/8] mptcp: drop subflow contexts in mptcp_sched_data Date: Mon, 17 Feb 2025 18:41:18 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang The mptcp_subflow bpf_iter is added now, it's better to use the helper bpf_for_each(mptcp_subflow) to traverse all subflows on the conn_list of an MPTCP socket and then call kfunc to modify the fields of each subflow in the WIP MPTCP BPF packet scheduler examples, instead of converting them to a fixed array. With this helper, we can get rid of this subflow array "contexts" and the size of it "subflows" in struct mptcp_sched_data. And keep struct mptcp_sched_data for future use. Signed-off-by: Geliang Tang --- include/net/mptcp.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 2c85ca92bb1c..df87114deb1c 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -100,11 +100,7 @@ struct mptcp_out_options { #define MPTCP_SCHED_MAX 128 #define MPTCP_SCHED_BUF_MAX (MPTCP_SCHED_NAME_MAX * MPTCP_SCHED_MAX) -#define MPTCP_SUBFLOWS_MAX 8 - struct mptcp_sched_data { - u8 subflows; - struct mptcp_subflow_context *contexts[MPTCP_SUBFLOWS_MAX]; }; struct mptcp_sched_ops {