From patchwork Tue Oct 22 07:52:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13845254 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 702B1127E37 for ; Tue, 22 Oct 2024 07:52:37 +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=1729583557; cv=none; b=pRmfXPmjlYAPQxRjXKFGzqQ7Jss5/Gg5K1+SsTFva2sd8gG2QrKj9uPswD36R9al0S/hjBRrUX5PSam5jQIPnMsO9xIpsIceMStWnDtj1wgsgEHeZi7A8Soq9+0tELxovv0ihXzhrH7I+Mn+ItFbay6/6Gcz18FaO90WNYAFBLU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729583557; c=relaxed/simple; bh=Ec8Z7woGTXV2BvkDP0bL2AvpRDclTAnC8E1ey3KzY+E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tuhR54QNegnlONSgXrDlr10rUZ6udeAxgu1/P+ukZtZCkVGam1Fw/4evkCDzFmUJfxSh8L+BJ1Z4HaP8mpmPeiWScRfbm/jb0zprf8bFf71p0vvOtPFatmKj4+RO71d6+5iSEZTw5F6hHJ5OlvHnPr38lsWUcvnQoPu6ddVZr2E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FXSbumeE; 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="FXSbumeE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BF646C4CEC3; Tue, 22 Oct 2024 07:52:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1729583557; bh=Ec8Z7woGTXV2BvkDP0bL2AvpRDclTAnC8E1ey3KzY+E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FXSbumeEKVNAu8JqiRnmG094YxQZGc2y3+yqHx+kf0Xda4Su2wSw5IJyCjLwxhyAi rL+F1lFKhAHF1SdPOraCM+RD0FixntQOzSIW05IPFBZBcMCkFpB1oIirFtDW1/CDHJ wc66MsZW8gGLktUB6eYJ2lfBcw4Y83lXYnrxAUTc+6xx5QGFQmhGUFqvBg5MY847KQ NFF8JZnPzm4tnsYivAPcpKgcvWhNjQhySmm8vrkGX9gySMX+R9Wv5+fOI0Wyh9Mk0Y Y9FURIs2E8intKxxrJnUFRk7QPPNHfhLV6hE9EBsWA4OX2QGJimewNUFKMr0e4X/r6 oG0V9/WwfGb4Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 1/5] Squash to "selftests/bpf: Add bpf_bkup scheduler & test" Date: Tue, 22 Oct 2024 15:52:25 +0800 Message-ID: X-Mailer: git-send-email 2.45.2 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_bkup.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c index 296f0318d843..0c32ce623bab 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c @@ -20,30 +20,20 @@ SEC("struct_ops") int BPF_PROG(bpf_bkup_get_subflow, 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, 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; } -SEC(".struct_ops") +SEC(".struct_ops.link") struct mptcp_sched_ops bkup = { .init = (void *)mptcp_sched_bkup_init, .release = (void *)mptcp_sched_bkup_release, From patchwork Tue Oct 22 07:52:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13845255 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 497BA127E37 for ; Tue, 22 Oct 2024 07:52:39 +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=1729583559; cv=none; b=Pz8322G9sSUKJ7hrS3OjIyaRAkQR/69+tB3bkPscb9YkiIQJyiygUPxp+IxBodRuri4PJjykjzPfiQEcmlDptKQCtYH/0BjwQOxNrUdPM0QhXb01bT1F52FiB3ZTyhwt/YZnbTv9HGvM6BZ274ghpI9Pti3mJgDSrOfRYmOssIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729583559; c=relaxed/simple; bh=BXAkn57XeLeVxj5gIP0uzffNzK3MLWYTvRXhGad04EY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jyGfqqzZwKPXLKHUdI5MvJJRV1QRPtkIPrYiJBKF6qiSZtDb/9YP8EtCZkFQd5PYibLoqzD0IYhWCVCe8E5JsCheQ7hi59GCX8KpM5U+TnvGlUqoEG0bSi9CflGcW+irgspZDX3wHkjLNG0Rb2IQZqiPBkSGV7sL1j2g0MwZPko= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=l7C+DF2W; 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="l7C+DF2W" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 99DB7C4CEC3; Tue, 22 Oct 2024 07:52:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1729583558; bh=BXAkn57XeLeVxj5gIP0uzffNzK3MLWYTvRXhGad04EY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l7C+DF2W4bQLi451dppX3h8gz4H5fAHDJpzv8UFlS5GVoPSRCCNukP1i3rQjnitix LPU+eXJqkpF9oI69flhefEEGV052/Ru3feE0CkR0d448y2A0G5G6WuOsycqNcg+Qj+ Ifev8GtC+QicWoeGTCpDWPd4y+ljJLiVXhVct9HCew+cpckl25WGOTu87yZI8mElKt I8dIKA3zeSqQbbPnZ3PpGo+EynqkYj+re/bPUK0eNeYWIfsa7smC5HRnk37iP0Rkus oCglznVuwMYgG19DMRXtivP+KQitONxMsPRuoJdfqsmY09Dk6QyWEVmbMOLTp+YbkI wct64yK0xv4jA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 2/5] Squash to "selftests/bpf: Add bpf_rr scheduler & test" Date: Tue, 22 Oct 2024 15:52:26 +0800 Message-ID: X-Mailer: git-send-email 2.45.2 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 | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c index 638ea6aa63b7..e02b8cfb262b 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c @@ -34,10 +34,9 @@ SEC("struct_ops") int BPF_PROG(bpf_rr_get_subflow, 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); @@ -45,31 +44,28 @@ int BPF_PROG(bpf_rr_get_subflow, struct mptcp_sock *msk, return -1; last_snd = ptr->last_snd; + next = bpf_mptcp_subflow_ctx(msk->first); - 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) + bpf_for_each(mptcp_subflow, subflow, msk) { + if (!last_snd) break; - if (mptcp_subflow_tcp_sock(subflow) == last_snd) { - if (i + 1 == MPTCP_SUBFLOWS_MAX || - !bpf_mptcp_subflow_ctx_by_pos(data, i + 1)) + if (bpf_mptcp_subflow_tcp_sock(subflow) == 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); + mptcp_subflow_set_scheduled(next, true); + ptr->last_snd = bpf_mptcp_subflow_tcp_sock(next); return 0; } -SEC(".struct_ops") +SEC(".struct_ops.link") struct mptcp_sched_ops rr = { .init = (void *)mptcp_sched_rr_init, .release = (void *)mptcp_sched_rr_release, From patchwork Tue Oct 22 07:52:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13845256 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 A997E127E37 for ; Tue, 22 Oct 2024 07:52:40 +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=1729583560; cv=none; b=twbe/U3zU3Q3UKINbAJbsvG9daTwu2pDLzrgDi87L3Ud1ImHIdg9pJg2juJTz8MoneWXUWOYmztj2GU+MQ13bUvbXdA05sJiZgrgjhFMQET59IwTg3NO+NxvB7y6x7EyFenAU/vvbaBf1FNUiy8i+GXAmJLBhVbBZQd93x9a3VU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729583560; c=relaxed/simple; bh=JSUmuBTwu1x4sBQbIAfNyjGcKmC9tyCHX7JskrteV14=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IiCna/Z416tbIVf/kWnpAzKNnCbi0noYFD2w/eU6843XwYoFN0GaTsGdADzR7+WvY+viPJkzCWs4Xk7i3q/7tJgaKR82GxVsXM3R+/Bw7JpBq8zcWKtZfhxgvibQ8OqwvkPihnxd8IEEIfx2uZ/EC28k9EoLRI077135RX/ccNU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YGkCy8nI; 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="YGkCy8nI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C99DC4CEC3; Tue, 22 Oct 2024 07:52:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1729583560; bh=JSUmuBTwu1x4sBQbIAfNyjGcKmC9tyCHX7JskrteV14=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YGkCy8nIh/wJgkn3TIEyo5u3up7y/affYMXMnqDdwG11Ml6nMfQ5kxddO9NbqUPOg FFg93vc/9Mor6WZ91rc3qVpTIgP3iFeP0wexE4ZbnKSraXXVFp9u8VrpubSFyfoPcq 3bsmnwaYFuZ8kxy9j6waa66RtjZ2KfH74Ot+GBzZPBzb37sJg27qUVwmDb0FyjoMf1 orOKpfZMH+ZiTwW/o3HYQ+QZlgBrgU6KQ+Ci26WwzI37biXzl3VdojeVtW7GWzuv1w jpqsPwS9ihmTlLEDdN3Mp1o1b4EWo6yHkkJeob+fzJM1AX313wbTik3i9DyNuUZztz 1kT9AUBpEz7PQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 3/5] Squash to "selftests/bpf: Add bpf_red scheduler & test" Date: Tue, 22 Oct 2024 15:52:27 +0800 Message-ID: X-Mailer: git-send-email 2.45.2 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 | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c index cc0aab732fc4..35150771e174 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c @@ -20,17 +20,15 @@ SEC("struct_ops") int BPF_PROG(bpf_red_get_subflow, 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, msk) + mptcp_subflow_set_scheduled(subflow, true); return 0; } -SEC(".struct_ops") +SEC(".struct_ops.link") struct mptcp_sched_ops red = { .init = (void *)mptcp_sched_red_init, .release = (void *)mptcp_sched_red_release, From patchwork Tue Oct 22 07:52:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13845257 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 C4101127E37 for ; Tue, 22 Oct 2024 07:52:42 +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=1729583562; cv=none; b=WF+Pw995v0zuomaCWda1WbQFlVQzq2cNE4fsbKlGwrpI8/CEjdYFZuQlXDNXKLC0Ci0cO0UchGOkIN8PleHPAblFWDkRSGPOWulrgqSlORtLH9flXew8OPaMRq++7F8sd4FnXXCYnSnZYClPZgqSd9LtPdbsWaVA1AnWkS0k7sA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729583562; c=relaxed/simple; bh=989zuQy9ZWbw+HALND2Ya5dwiJF+nqKKl8FNCnN53uQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qTx2QYWaabjuI2FrXfMebOqb4FNKH7B9W5oUNbq0xjCXHx2B/sZH2wi3UGzPyX1dbliY+zh87CXlX5clim1zVcPJ1G0FeAhVrPXqpcxFXh6dLGfL25EEZ8UGWZ9JzsW0gPD1Z/1PmMpJlxMjXpSVUU55yO1c4nSfzdHgP1fn3do= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QlnZ+vhY; 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="QlnZ+vhY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3376EC4CEC3; Tue, 22 Oct 2024 07:52:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1729583562; bh=989zuQy9ZWbw+HALND2Ya5dwiJF+nqKKl8FNCnN53uQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QlnZ+vhY3+CLBVoEqGhNI7qtxYK/9aV/f4+obU7rTY+WSOE4WVp6LbeZ2CgFrLK5Q Q2AQDnuKtBBMCkObE2pPv4NCQCd4DTyOAdPlptV9xClSbgZ7WZVl0XKbSzAgIBGChV RtHxgm2Nf44Q3gJGNJnTLFyZA9ZvcpPdglt9wc2612kDWyUDeN0IvLD/4Fe79BUf2a widpT9HVyKM9xOsjZiVtP7yVo6YWwUfKMkfLc0ehTrRUo2lj4K9vw3C9U/eHsbcvMN 8ahzTW5gAjawnWdh7dSdQaMULnPdP++KmZgQKSGfDAak6UIMRKDSd2jygwlRwnPSiV XNgk17QuKOinw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 4/5] Squash to "selftests/bpf: Add bpf_burst scheduler & test" Date: Tue, 22 Oct 2024 15:52:28 +0800 Message-ID: X-Mailer: git-send-email 2.45.2 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_burst.c | 79 ++++++++++--------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c index eb21119aa8f7..e7df5f048aa4 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c @@ -11,6 +11,10 @@ char _license[] SEC("license") = "GPL"; #define min(a, b) ((a) < (b) ? (a) : (b)) +#define SSK_MODE_ACTIVE 0 +#define SSK_MODE_BACKUP 1 +#define SSK_MODE_MAX 2 + struct bpf_subflow_send_info { __u8 subflow_id; __u64 linger_time; @@ -23,10 +27,6 @@ extern bool tcp_stream_memory_free(const struct sock *sk, int wake) __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; -#define SSK_MODE_ACTIVE 0 -#define SSK_MODE_BACKUP 1 -#define SSK_MODE_MAX 2 - static __always_inline __u64 div_u64(__u64 dividend, __u32 divisor) { return dividend / divisor; @@ -57,6 +57,19 @@ static __always_inline bool sk_stream_memory_free(const struct sock *sk) return __sk_stream_memory_free(sk, 0); } +static struct mptcp_subflow_context * +mptcp_lookup_subflow_by_id(struct mptcp_sock *msk, unsigned int id) +{ + struct mptcp_subflow_context *subflow; + + bpf_for_each(mptcp_subflow, subflow, msk) { + if (subflow->subflow_id == id) + return subflow; + } + + return NULL; +} + SEC("struct_ops") void BPF_PROG(mptcp_sched_burst_init, struct mptcp_sock *msk) { @@ -67,8 +80,7 @@ void BPF_PROG(mptcp_sched_burst_release, struct mptcp_sock *msk) { } -static int bpf_burst_get_send(struct mptcp_sock *msk, - struct mptcp_sched_data *data) +static int bpf_burst_get_send(struct mptcp_sock *msk) { struct bpf_subflow_send_info send_info[SSK_MODE_MAX]; struct mptcp_subflow_context *subflow; @@ -84,16 +96,10 @@ static int bpf_burst_get_send(struct mptcp_sock *msk, send_info[i].linger_time = -1; } - for (i = 0; i < data->subflows && i < MPTCP_SUBFLOWS_MAX; i++) { - bool backup; + bpf_for_each(mptcp_subflow, subflow, msk) { + bool backup = subflow->backup || subflow->request_bkup; - subflow = bpf_mptcp_subflow_ctx_by_pos(data, i); - if (!subflow) - break; - - backup = subflow->backup || subflow->request_bkup; - - ssk = mptcp_subflow_tcp_sock(subflow); + ssk = bpf_mptcp_subflow_tcp_sock(subflow); if (!mptcp_subflow_active(subflow)) continue; @@ -109,7 +115,7 @@ static int 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].subflow_id = subflow->subflow_id; send_info[backup].linger_time = linger_time; } } @@ -119,10 +125,10 @@ static int bpf_burst_get_send(struct mptcp_sock *msk, if (!nr_active) send_info[SSK_MODE_ACTIVE].subflow_id = send_info[SSK_MODE_BACKUP].subflow_id; - subflow = bpf_mptcp_subflow_ctx_by_pos(data, send_info[SSK_MODE_ACTIVE].subflow_id); + subflow = mptcp_lookup_subflow_by_id(msk, send_info[SSK_MODE_ACTIVE].subflow_id); if (!subflow) return -1; - ssk = mptcp_subflow_tcp_sock(subflow); + ssk = bpf_mptcp_subflow_tcp_sock(subflow); if (!ssk || !sk_stream_memory_free(ssk)) return -1; @@ -141,23 +147,18 @@ static int bpf_burst_get_send(struct mptcp_sock *msk, return 0; } -static int bpf_burst_get_retrans(struct mptcp_sock *msk, - struct mptcp_sched_data *data) +static int bpf_burst_get_retrans(struct mptcp_sock *msk) { - 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, msk) { + struct sock *ssk = bpf_mptcp_subflow_tcp_sock(subflow); if (!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); @@ -166,23 +167,23 @@ static int 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); @@ -194,11 +195,11 @@ int BPF_PROG(bpf_burst_get_subflow, struct mptcp_sock *msk, struct mptcp_sched_data *data) { if (data->reinject) - return bpf_burst_get_retrans(msk, data); - return bpf_burst_get_send(msk, data); + return bpf_burst_get_retrans(msk); + return bpf_burst_get_send(msk); } -SEC(".struct_ops") +SEC(".struct_ops.link") struct mptcp_sched_ops burst = { .init = (void *)mptcp_sched_burst_init, .release = (void *)mptcp_sched_burst_release, From patchwork Tue Oct 22 07:52:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13845258 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 40484127E37 for ; Tue, 22 Oct 2024 07:52:44 +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=1729583564; cv=none; b=hkw8//BowM3aWBUAQXH5Qt9MGQ0cpoxljqkQ9+kpSUEv+5uSZMeiDdxI0otnLiIyWW10Y//FUYezU+KTS5BpR5cZDioCzCwmEZRQBy/IBgmGFYas36gL84Wqg20ysgDbd8kEcDtEFxnaRXf4ZyWvJnBXjLMWOHlahjriZj+VIaU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729583564; c=relaxed/simple; bh=Im3omfG89LYGFOkjuGgqpEJyEMP6QwgSILEx9wbbmDM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KtI0opSoNNk/P92H0VRwtV8a4XEZz7zzmbfLbOugvUy+Q9N6p7o6wGOtCf1XssmGS7GWEPL58ObFOXKSiuU47u6m4RUakekY+AP+C3aB7jyXGxW4I/ZC8WUNR6YzmG3haylTXnHOTAlKDRjjKdndISPz8MeV4wO7qIoeARG1PtY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MYRSiHV6; 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="MYRSiHV6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E7DACC4CEC3; Tue, 22 Oct 2024 07:52:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1729583564; bh=Im3omfG89LYGFOkjuGgqpEJyEMP6QwgSILEx9wbbmDM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MYRSiHV6QC1fn9hwGDfZ0rykVwe1MKPtml7/jtO9BJE7zJs54wutWNU9FCb8CWxKv UDqh7gUllt6LZEg1wLeMoQoYbSpIfjzHymhKsJ3MqueJ34i0M4lASWWgPSZqsBwd5O F+glaS5UZp+svD5m3dOJBPm+Wk3wXn8j421+1H+hXEaqoAfl3IYb7I6d1OG1wMkp0C ypk+pL65CQJPrC3+LKsYIEd1hW6m8gYV3eGS/VMF/ef5ybUdXzpwNDQBvBwyXhtnW1 4Rk4eGfouWbZQb6Uo4HRo5zNiDs1NhaEXGcvnJAWqBedHXuMRrvu/eYIIQj96e25EN IaCLhBjTYm6Mg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 5/5] Squash to "selftests/bpf: Add bpf_first scheduler & test" Date: Tue, 22 Oct 2024 15:52:29 +0800 Message-ID: <47d89319cf58196896a25ae6b3199b27ad73fe97.1729583414.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.45.2 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.h | 3 --- tools/testing/selftests/bpf/progs/mptcp_bpf_first.c | 10 ++++++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf.h b/tools/testing/selftests/bpf/progs/mptcp_bpf.h index 376979a9c4f0..52bc8ac03508 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf.h +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf.h @@ -60,7 +60,4 @@ extern bool bpf_ipv6_addr_v4mapped(const struct mptcp_addr_info *a) __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 d57399b407a7..f2f9e66455b6 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c @@ -20,11 +20,17 @@ SEC("struct_ops") int BPF_PROG(bpf_first_get_subflow, 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; + + bpf_for_each(mptcp_subflow, subflow, msk) { + mptcp_subflow_set_scheduled(subflow, true); + break; + } + return 0; } -SEC(".struct_ops") +SEC(".struct_ops.link") struct mptcp_sched_ops first = { .init = (void *)mptcp_sched_first_init, .release = (void *)mptcp_sched_first_release,