From nobody Sun Jul 5 05:52:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 1D7FE3546D7 for ; Mon, 22 Jun 2026 05:45:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107118; cv=none; b=QkqeN9tOsJ0ZRublG0uj+/JTpj4w6ib5kAWO2ncd8scGXi8pTBZqPGEHq1rA8s+AtMbyrLojkaK4/ue6tcMWeI4uh/yTh/G1hXzlYdEvxhz/iNEeda2F9eeO9vf1xJWWOroq1Xb+UfEVs5al2sVQ0kzyGsYNPNeT40qVkFfwgSU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107118; c=relaxed/simple; bh=kym+qBjlodY0u2hYBsCmui9bf1mdepv4ZExhGaElc8k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MbtXtJAxW9yxhTslJE9HO+xnyyJzwxuIoIjpP0dgGJ4PUKzudcPr96+oaMZ+77V4XPoqg0E/FAYdFjXr6HDJ+pZf1Bt0ue+CSjqrHd4tKjHcPGYVo4Cj2f/oq90/UQnyOk8En+DiKqUnz/XtWPfan0Qc7M+Elx0HteWkMhBt2Z8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TIciGCEh; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TIciGCEh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C091B1F00A3A; Mon, 22 Jun 2026 05:45:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782107116; bh=OfgDFaSVw2FuwahDh3l1T41V1fY36q/RCFV8aV14sAk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=TIciGCEhdv1CpAy2lNCggxBIMrviYhxLdno/CJQ3PPrMO17gMFwjVkrX/fb3OLznp ZICxxyuo/4QeMhnjkvi//xRiuGWeez+sFpTEUZ2bvqIYjdVDJqtHTIlz0t/fOAEEo7 9oOx0Vg6wL8+HyagkOV5ut1VPznNhC4uUorKqtq0j0/m+7VOLrCfu4j16RfhA3Nl6h uNMxtoiiW1ergGAGQ3hoookirWkq0PY3gbzlkWy1bXacreBfNjp0Tct1vRf1HYCoZn dwmHq6i/OhTHyI1o9AtB8LCH0sp6eCEoD2Kqd4Llu0XwFVLhm59o9F2ruW5UXx+8rO Ev5MiB17Ok9TA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v2 1/7] Squash to "bpf: Export mptcp packet scheduler helpers" Date: Mon, 22 Jun 2026 13:45:01 +0800 Message-ID: <748696aea2486ca11c8d818ec2d253a00692c668.1782106180.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang bpf_sk_stream_memory_free() returns bool but erroneously returned NULL. Change to false and drop the KF_RET_NULL flag. Signed-off-by: Geliang Tang --- net/mptcp/bpf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c index 08bb037f0951..259a2ca4fb0b 100644 --- a/net/mptcp/bpf.c +++ b/net/mptcp/bpf.c @@ -297,7 +297,7 @@ __bpf_kfunc static bool bpf_sk_stream_memory_free(const= struct sock *sk__ign) sk->sk_protocol =3D=3D IPPROTO_TCP && sk_is_mptcp(sk)) return sk_stream_memory_free(sk); =20 - return NULL; + return false; } =20 __bpf_kfunc_end_defs(); @@ -320,7 +320,7 @@ BTF_ID_FLAGS(func, mptcp_subflow_set_scheduled) 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, bpf_sk_stream_memory_free, KF_RET_NULL) +BTF_ID_FLAGS(func, bpf_sk_stream_memory_free) 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_common_kfunc_ids) --=20 2.53.0 From nobody Sun Jul 5 05:52:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 7759035DA55 for ; Mon, 22 Jun 2026 05:45:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107119; cv=none; b=bhQxmlnX77CxEQmL7tP9hTzUm7r7/GSSGgpUW1FRCNhiZmpm1x3Tvzvvh1tKraGeV8iQfz3I17Z6+//Gp2AR1eun3nirTBSriy8RepA2Y6rMgFa2uZRLYRaDdrgA0ftGepTc+nF2KXZuruXVe/yMYSD7bjdGgEmlrSQWk2K5h/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107119; c=relaxed/simple; bh=oGoZmHTnPOSoFASTgyeTDs85JOsE6y8rQ7/fs9c1ipA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SRXz35TtGTNF92JPNOdgsFr6n87VBRJ/Ib4FoGLS9DrXlzBOIBt2U2Rb7GJ+1uRR1Sjp6ncz/WHHMhili0M3+7uXfyNRWs4AdfDcJvOABJwhDNeHp/ptsye8ZfFnvoIXNJVjy2PRu0pF/kvCA9VshjcV+tKczh7M1MwrOlNWjUY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=a/qhLUrB; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="a/qhLUrB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2CA731F00A3E; Mon, 22 Jun 2026 05:45:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782107118; bh=WRz9IpWItXlrxHRY0Hz5Hutp4C0tMMgzMgN9XLfhouo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=a/qhLUrBX13FmOoguxH5Vg1j9+P822h8hyr5TN/Cdmy7cv37TsoMAcUlNUgQcExAt 2Z36MBVlDSFYh40WiVt8ep7wf7nZuOXTQQcurLfTY3GWUd1OMQinE7pwmjAqxWE8kA hFsqnusr4CqCl6XrSUXYF+o8mowESMMQFtl0NefnRbYm5DKz+i2uHOG6W9QH/4GrPb QsFLal9LVv49fMgtxatDx0pd4cmEOL25xzQK3xzkJSo+ZFVm/A34FItIGnhwSXQLdy MYesFLVB8VRsnySp/ea81qeMnBLoyqOUrn2e8XyzPAaA4MAnNGrLnFkHmRozKueyYx SG5gWMQhkauMA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v2 2/7] Squash to "bpf: Export mptcp packet scheduler helpers" 2 Date: Mon, 22 Jun 2026 13:45:02 +0800 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Remove bpf_sk_stream_memory_free() kfunc entirely. The function is no longer used by any BPF scheduler, and its implementation will be moved inline into the burst scheduler to avoid verifier trust issues. Signed-off-by: Geliang Tang --- net/mptcp/bpf.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c index 259a2ca4fb0b..938aa6399608 100644 --- a/net/mptcp/bpf.c +++ b/net/mptcp/bpf.c @@ -289,17 +289,6 @@ __bpf_kfunc static bool bpf_mptcp_subflow_queues_empty= (struct sock *sk) return tcp_rtx_queue_empty(sk); } =20 -__bpf_kfunc static bool bpf_sk_stream_memory_free(const struct sock *sk__i= gn) -{ - const struct sock *sk =3D sk__ign; - - if (sk && sk_fullsock(sk) && - sk->sk_protocol =3D=3D IPPROTO_TCP && sk_is_mptcp(sk)) - return sk_stream_memory_free(sk); - - return false; -} - __bpf_kfunc_end_defs(); =20 BTF_KFUNCS_START(bpf_mptcp_iter_kfunc_ids) @@ -320,7 +309,6 @@ BTF_ID_FLAGS(func, mptcp_subflow_set_scheduled) 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, bpf_sk_stream_memory_free) 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_common_kfunc_ids) --=20 2.53.0 From nobody Sun Jul 5 05:52:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 B597B35E94F for ; Mon, 22 Jun 2026 05:45:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107121; cv=none; b=Rz5YPiDtWKXiZKWNq/cp5+y+i4DtNZp1l3CPsF/bVvZEQsTlVe4Wy3h+uhForCoRqLnVUkghanwxiIfp8eHR9Y3kWLsZE0d93V75QUdfzx2tvp/P5hGE+OWyPanDUpDx9DyRSJMeCIsaOg9p80XjHz/yDB799+45bjI5CGhOJkE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107121; c=relaxed/simple; bh=s8/ZVSjx5uGYQgF2yUjZtjqYZvLOMFauNjcRdufCEmk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pSOqbsht1g63QdbbfG7BruaT3Ju6FHPjE+acgLDjBqiCEb2hni4YXLucCBrkXswIBaMxJTENDv6RVu9RL0/xZAO3G39AEyCfeM5X/Pj9lFAwuWkosogCxtrbLd/MHJloXn3vt4v2oPKMWeyr0u09Z60xLkdfAcH3C+WwmZeiARY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Vt5y1wW6; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Vt5y1wW6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EA67D1F000E9; Mon, 22 Jun 2026 05:45:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782107120; bh=kKnWJNPfEXte+tBflpKIjdfVz6HrWblQsG17NAxwgKs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Vt5y1wW6k2mcVQMGfFplet+ajJAELwg4J8MZnLw4WUOlScE+y5KdgV5qUvZMc9IK+ HMlhkHmka4S5WCgQoEkwP97PdxOTPhG9+Ots2GxwCUZR3eo7CLVnWo7H0h49iblPiO nb/6GvOMddQz+JfPYlyLCtDpLxXyVwOg/ZbVje5Qeko7vH11Dt6arvuZ848dmF5oke cTNKdy4tsph0zjc4rZo+nQADTO3g5OK57uvO7dMQGjT8ITu9oG2hOgui4P67RNIZqu ZbYTMx+MudmcRL5Bai1M76hc8WBarsR7XZmWq43QSbhZ7FMqxC0E8I8utwkXHcv9+N SLyhuID/+0EKw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v2 3/7] Squash to "selftests/bpf: Add bpf_burst scheduler & test" Date: Mon, 22 Jun 2026 13:45:03 +0800 Message-ID: <9478b630e87e24d61b2d3c236462a70ada74aa44.1782106180.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Implement sk_stream_memory_free() logic inline in bpf_burst_get_send. The original approach relied on the bpf_sk_stream_memory_free() kfunc, which is being removed. The new implementation: - Checks subflow send buffer (sk_wmem_queued < sk_sndbuf) - Checks MPTCP notsent_bytes against msk->notsent_lowat - Follows the same semantics as the kernel's __sk_stream_memory_free() Signed-off-by: Geliang Tang --- .../selftests/bpf/progs/mptcp_bpf_burst.c | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/te= sting/selftests/bpf/progs/mptcp_bpf_burst.c index 693fab55f7be..bd258776076c 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c @@ -18,10 +18,39 @@ char _license[] SEC("license") =3D "GPL"; 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 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, struc= t sock *ssk) __ksym; =20 +static __always_inline u32 mptcp_notsent_lowat(struct mptcp_sock *msk) +{ + return msk->notsent_lowat ?: UINT_MAX; +} + +static __always_inline bool mptcp_stream_memory_free(struct mptcp_sock *ms= k, + int wake) +{ + u32 notsent_bytes; + + notsent_bytes =3D msk->write_seq - msk->snd_nxt; + return (notsent_bytes << wake) < mptcp_notsent_lowat(msk); +} + +static __always_inline bool __sk_stream_memory_free(struct mptcp_sock *msk, + const struct sock *ssk, + int wake) +{ + if (ssk->sk_wmem_queued >=3D ssk->sk_sndbuf) + return false; + + return mptcp_stream_memory_free(msk, wake); +} + +static __always_inline bool sk_stream_memory_free(struct mptcp_sock *msk, + const struct sock *ssk) +{ + return __sk_stream_memory_free(msk, ssk, 0); +} + static __always_inline __u64 div_u64(__u64 dividend, __u32 divisor) { return dividend / divisor; @@ -96,7 +125,7 @@ int BPF_PROG(bpf_burst_get_send, struct mptcp_sock *msk) send_info[SSK_MODE_ACTIVE].ssk =3D send_info[SSK_MODE_BACKUP].ssk; =20 ssk =3D send_info[SSK_MODE_ACTIVE].ssk; - if (!ssk || !bpf_sk_stream_memory_free(ssk)) + if (!ssk || !sk_stream_memory_free(msk, ssk)) return -1; =20 subflow =3D bpf_mptcp_subflow_ctx(ssk); --=20 2.53.0 From nobody Sun Jul 5 05:52:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 928392D661C for ; Mon, 22 Jun 2026 05:45:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107123; cv=none; b=tWeAudfgKb+JMyault1lFWj88Z0vLj5a+uODtVVLo24CIqkXkqz6/tpRn5xEEBfJiKqtoBL6/S3w1vM8cq8MzO//0QmprKikdWQknDIPE1UmLB22x2+KflOwOeFatfNzd8OLZTDR1m5J92PkJ7QrZz53eBO3rXKA9aDt7C2ML9g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107123; c=relaxed/simple; bh=LMXxjI1a1jcwmEtD7nOG63FCumyJ5IAjBANjgI3RwkU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pVM1pUchrjIFITqgchBdeIJHqKY2vQdng1hjbND79ozqplo2T/s/5P+t+1aFqQxTIW/5tWYMTOE/sgd/O1NRfxzOgQDu0ej+sekAUsPLeOZfRKMD9IprkM5pbwrsY4zs9SMuIwAgQp5ur9eJRAi1Vf9EtnPJBKtbckZBkIa/geA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YqdJOmbv; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YqdJOmbv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 016D51F00A3A; Mon, 22 Jun 2026 05:45:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782107122; bh=ByQEZ+G9rsZ1yCNVeGmUMKIu3yQduJcqXC2bVyJKxrk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=YqdJOmbvaLUFWTgoj9tGtzx9qY+HxRLZCqHG2im4q04I2Z5vAIwE+qeu6iutDst/t O2NnOloLXikfr2PAtNu8scGYWt68OSv50IkuhcUmqXenRigU89DdVxcXbttiP543nl Y6fWQ06n5C+h//lrk6kS5vrbUVpttFhV91YJ8tDFkR2ARImE0NQ5WBP3jH5CJKD/wY D+y++gUIgYTzkng3YYvaO7MCCIDmIMwt+VBjlLED7Zl0Mmx5LKlaH6I7NzlaxYe0uA kBlgJecWz5CB+86kE8ci2PyS+h7hb37B0b6sluLw68hr/zeXSukfxbUo0fgWDQgS/4 bTrrbS93ECf3g== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v2 4/7] Squash to "bpf: Export mptcp packet scheduler helpers" 3 Date: Mon, 22 Jun 2026 13:45:04 +0800 Message-ID: <08252d393466ad6dacaae4d71d2481c807cba8ed.1782106180.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Remove the unsafe __ign suffix from the sk parameter of bpf_mptcp_subflow_ctx(). This suffix was used to bypass verifier checks but is no longer effective in newer kernels. The function now uses a normal parameter name, though it will soon be replaced by inline iterations in BPF programs. Signed-off-by: Geliang Tang --- net/mptcp/bpf.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c index 938aa6399608..57ee40077a48 100644 --- a/net/mptcp/bpf.c +++ b/net/mptcp/bpf.c @@ -220,10 +220,8 @@ struct bpf_iter_mptcp_subflow_kern { __bpf_kfunc_start_defs(); =20 __bpf_kfunc static struct mptcp_subflow_context * -bpf_mptcp_subflow_ctx(const struct sock *sk__ign) +bpf_mptcp_subflow_ctx(const struct sock *sk) { - const struct sock *sk =3D sk__ign; - if (sk && sk_fullsock(sk) && sk->sk_protocol =3D=3D IPPROTO_TCP && sk_is_mptcp(sk)) return mptcp_subflow_ctx(sk); --=20 2.53.0 From nobody Sun Jul 5 05:52:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 2125D2D661C for ; Mon, 22 Jun 2026 05:45:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107125; cv=none; b=e2tkacSTl+XtQzkWt8wxS3DoY/rPzopyBcfqNmPQcRvL3LHXU83ZWcWooAkPL+pZcdQSbtbOEgKHKsee+FyUrvbJDV+O0BH5lDZusyXucZ7BmzpyBy+nNXknzM8ybZQEaaq8R3dRw444dXvHXxMoCWzz9rpz1Bn3wYf+HdIuwEk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107125; c=relaxed/simple; bh=nvKtB6cWQU6jGJyD9lZOP2a7XdO8+ioT4ska3aZ+mZI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NhT60Hsu+63y+QEf1TC27YrD3tWhMfbOD10Wmbj6z40ZWf1l5mWSG+BcjCR35c++Dqb6h8m1Y4yFpKg1RPdpduM7jQHZzl+lMZ6/C3IgtRYQrwN9giGLi3rYjJeJALSg6ZiEabBXDXQWm9NM/P5gnlwo2JMDGJucJiI9LCcfdOg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=l/hD++Sl; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="l/hD++Sl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E866C1F000E9; Mon, 22 Jun 2026 05:45:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782107124; bh=vXRAaj2pbgMW1FkG+K0dYT2Mld1BOclxfeYQJoAoRao=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=l/hD++SlgE8At+Dy/aEHC1kd34fvIPw8OjajXYfOfm0ooybUGjMZ7J0jXNTCkM9P/ 1WZiFdW/PJbrJnWcEEt01FSUJzSPVc7vRYyGP1gFvHZAeHKhOZo2F1Nkk6Pvcw79Xo tZwiKgzhyHMNKZ9hdaXX3fbuftp3KEwdTXGeb50hwurLpj8FCMshYuRH2RS2BzR8no 03GqcTpdt18Kv4ErlrOvFjKwY+z5YJNTa7vvFIa1QBxce7y1CL1l/VIfCO/BWw20tD keQ5Rk68SPS+UPslexi1sKyRpjVfJiPCX5QutjF/xoDAWDaaNKR88ep1XsBmVaHy23 8Wd2TTzBYHQ6w== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v2 5/7] Squash to "selftests/bpf: Add bpf_first scheduler & test" Date: Mon, 22 Jun 2026 13:45:05 +0800 Message-ID: <337e8534ddcfb3dd2bcf375bbd637d67ed47aae9.1782106180.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Replace bpf_mptcp_subflow_ctx(msk->first) with a bpf_for_each iteration over subflows to find the one whose tcp_sock matches msk->first. This avoids passing an untrusted pointer (msk->first) to a kfunc that requires trusted/referenced arguments, resolving the verifier error "R1 must be referenced or trusted". Signed-off-by: Geliang Tang --- .../selftests/bpf/progs/mptcp_bpf_first.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c b/tools/te= sting/selftests/bpf/progs/mptcp_bpf_first.c index 96b002808ce7..13ecee9833cf 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c @@ -20,13 +20,16 @@ SEC("struct_ops") int BPF_PROG(bpf_first_get_send, struct mptcp_sock *msk) { struct mptcp_subflow_context *subflow; - - subflow =3D bpf_mptcp_subflow_ctx(msk->first); - if (!subflow) - return -1; - - mptcp_subflow_set_scheduled(subflow, true); - return 0; + struct sock *ssk; + + bpf_for_each(mptcp_subflow, subflow, (struct sock *)msk) { + ssk =3D bpf_mptcp_subflow_tcp_sock(subflow); + if (ssk =3D=3D msk->first) { + mptcp_subflow_set_scheduled(subflow, true); + return 0; + } + } + return -1; } =20 SEC(".struct_ops.link") --=20 2.53.0 From nobody Sun Jul 5 05:52:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 5AAAB23370F for ; Mon, 22 Jun 2026 05:45:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107127; cv=none; b=WxuPrN5HeNZnjPUiehxfT/ifp+6b5Wb9RMAfo/UUpsOommD0nazh8Iv/IyowJHqPuIAgt2n1PyXLdR+9QhabNsgll99kx1+eOLSFVGntIBE7J9An5LdSV3HqbiLO6cXhiP5/pLBtr13mYUdhu6NyZ2vF4ff6qt0MtYiE3fPQtJ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107127; c=relaxed/simple; bh=HSVHdZ9FvFrkqL9nrrZTv7VzB6JIRdqzbrIXDlMn2vU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JEPQ1M7Ser0igrmISgfaz1T3OpDj909AmawACt+Vs1SjCCJdXK/u6G58nS+qkVWCYD/d6SLCjvwLWK276gh7DYOilnjBot5UYEm2bmUvYZRHkBDsP/AJugKfsJuhv2ZSpi0QJMxRoAPcwNZG7gKFHKlwUbQ7nkKoqITh67C+s2g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dUb05sR9; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dUb05sR9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C24A21F00A3A; Mon, 22 Jun 2026 05:45:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782107126; bh=/h/0Acka8EVlY31LkuuvWJz8yeLpPn4ytT4iocaqNsc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=dUb05sR9wReB5MV9e2052l4aura6xBFM/oNkjrfv1elno5+28WliOWowHR85DL+Fg wEx7BmVrnnZxE0p6ztbM93s0D4ipegn8XbMrwmTqnKmTNW1pynuPPT6zSvIN5t6Ytv 9TmI4T08nHB5UmyF5KPhMGQ8xJEjYsK/+SYIVha0kXs4zWoIydJslgYqwBkXmVCkU4 KqqGXHbNLXp0RGkbfENw0MqSQKZmZADmeU3oCWisx0wzdeZNO9uoqobQ/hftIkvkIn uqNSrMZiJqTit3diIG1MumfQMc5HS1NvJ9ffbrO46yzHpyZyLFlaraKYc49YMVo3g4 /MYx2rRuwYQnQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v2 6/7] Squash to "selftests/bpf: Add bpf_rr scheduler & test" Date: Mon, 22 Jun 2026 13:45:06 +0800 Message-ID: <89fe8219efe03d16f0bb9eccc6075f0adadbe1a5.1782106180.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Rewrite bpf_rr_get_send to use a single traversal over subflows instead of calling bpf_mptcp_subflow_ctx() and bpf_iter_mptcp_subflow_next(). The new implementation: - Records the first subflow as a fallback - Uses a flag to find the subflow after ptr->last_snd - Falls back to first when last_snd is NULL or not found This eliminates unsafe pointer handling and avoids verifier trust issues. Signed-off-by: Geliang Tang --- .../selftests/bpf/progs/mptcp_bpf_rr.c | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c b/tools/testi= ng/selftests/bpf/progs/mptcp_bpf_rr.c index 3c685c77f67f..10cef8abf206 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c @@ -33,33 +33,37 @@ void BPF_PROG(mptcp_sched_rr_release, struct mptcp_sock= *msk) SEC("struct_ops") int BPF_PROG(bpf_rr_get_send, struct mptcp_sock *msk) { - struct mptcp_subflow_context *subflow, *next; + struct mptcp_subflow_context *subflow, *first =3D NULL, *next =3D NULL; struct mptcp_rr_storage *ptr; + bool found =3D false; =20 ptr =3D bpf_sk_storage_get(&mptcp_rr_map, msk, 0, BPF_LOCAL_STORAGE_GET_F_CREATE); if (!ptr) return -1; =20 - next =3D bpf_mptcp_subflow_ctx(msk->first); - if (!next) - return -1; - - if (!ptr->last_snd) - goto out; - bpf_for_each(mptcp_subflow, subflow, (struct sock *)msk) { - if (mptcp_subflow_tcp_sock(subflow) =3D=3D ptr->last_snd) { - subflow =3D bpf_iter_mptcp_subflow_next(&___it); - if (!subflow) - break; + if (!first) + first =3D subflow; + + if (!ptr->last_snd) + break; =20 + if (found) { next =3D subflow; break; } + + if (mptcp_subflow_tcp_sock(subflow) =3D=3D ptr->last_snd) + found =3D true; } =20 -out: + if (!first) + return -1; + + if (!next) + next =3D first; + mptcp_subflow_set_scheduled(next, true); ptr->last_snd =3D mptcp_subflow_tcp_sock(next); return 0; --=20 2.53.0 From nobody Sun Jul 5 05:52:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 EE98835CB6E for ; Mon, 22 Jun 2026 05:45:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107129; cv=none; b=S3CAiqAgyqAkpk4gj5g6YxtvCo9UM1EqyjVs4Li0SPI3+agfrCEuuCT+iTe7LB79ybfE8RK5A7FdOllGOEixUsEgRfTQ+HeA+eJx4OpESB5t2mSxvFmrRDgDAyPJ6iPNyQKXBeksAX8720+oMUmunjwRG65iF8w5t2g2tBkrx34= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782107129; c=relaxed/simple; bh=Mw+1o4rF8vNREt6l8EWQ3xs/m4kxAL0OA0dN3Gn3vcU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=T9yiUSKDrLEsCkKuhiD8jZq3JN/Wjx5FYVECD2TN8b5RJWLYTnbvc7ph1x8FiFvdCwe8KR7QyMCWr/QDI5Rgwdj76ZDsIW/headh5rrdzZMbhL/j6cwsRhb9LsrARzIHcF26CCw5UFUHqYbgEEyLuPDosR6Um0fbm4UAFqpHlVA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cus6nBvy; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cus6nBvy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9BD7F1F000E9; Mon, 22 Jun 2026 05:45:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782107127; bh=tBkYRsA0jgJvbtXoN6VKY5g0sWH9rsfb4cuOcntGBq8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cus6nBvyVA1AhZ1bvZrOuHQyfs+YCSQI56aX4/hJo3sv3CDqe/795RmCsxbx7hukR oFoi2U2MCY5MV2twUvj2GdJN2by+UcCmEIVa+g4mkorMdZBCeZHQa4kPTPAMN/8TUt zYv6ExQ/NJqMuxRPncdEGTXd+Qg4Sjakx2dbrLZa3HPCFAJKi3AFY5xUJ6QiAx49xh S8kZNKWvDOCHqS8xn+NPrkfeTgf80xF0F9op3CdCnHWMRxF7NBDQiYwo2rYPSVz2nl fWhUnFz57vwj4kOwONzUksg1VvvKb8iLwKxt49qVedlvg6FIyxKwQNKIy+iU8wJpaN tF51q4jJBFquQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v2 7/7] Squash to "selftests/bpf: Add bpf_burst scheduler & test" 2 Date: Mon, 22 Jun 2026 13:45:07 +0800 Message-ID: <9424d61f707814629bffe2f6093a330cd82b1410.1782106180.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Modify bpf_burst_get_send to store subflow pointers instead of sock pointers in the send_info array, eliminating the need to call bpf_mptcp_subflow_ctx() for reverse lookup. The selected subflow pointer from the iterator is trusted, so it can be used directly for scheduling and member updates. This resolves the verifier error caused by passing untrusted sock pointers to kfuncs. Signed-off-by: Geliang Tang --- .../selftests/bpf/progs/mptcp_bpf_burst.c | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/te= sting/selftests/bpf/progs/mptcp_bpf_burst.c index bd258776076c..585d643d6e31 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c +++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c @@ -9,6 +9,11 @@ char _license[] SEC("license") =3D "GPL"; =20 #define MPTCP_SEND_BURST_SIZE 65428 =20 +struct bpf_subflow_send_info { + struct mptcp_subflow_context *subflow; + u64 linger_time; +}; + #define SSK_MODE_ACTIVE 0 #define SSK_MODE_BACKUP 1 #define SSK_MODE_MAX 2 @@ -81,7 +86,7 @@ void BPF_PROG(mptcp_sched_burst_release, struct mptcp_soc= k *msk) SEC("struct_ops") int BPF_PROG(bpf_burst_get_send, struct mptcp_sock *msk) { - struct subflow_send_info send_info[SSK_MODE_MAX]; + struct bpf_subflow_send_info send_info[SSK_MODE_MAX]; struct mptcp_subflow_context *subflow; struct sock *sk =3D (struct sock *)msk; __u32 pace, burst, wmem; @@ -91,7 +96,7 @@ int BPF_PROG(bpf_burst_get_send, struct mptcp_sock *msk) =20 /* pick the subflow with the lower wmem/wspace ratio */ for (i =3D 0; i < SSK_MODE_MAX; ++i) { - send_info[i].ssk =3D NULL; + send_info[i].subflow =3D NULL; send_info[i].linger_time =3D -1; } =20 @@ -114,7 +119,7 @@ int BPF_PROG(bpf_burst_get_send, struct mptcp_sock *msk) =20 linger_time =3D div_u64((__u64)ssk->sk_wmem_queued << 32, pace); if (linger_time < send_info[backup].linger_time) { - send_info[backup].ssk =3D ssk; + send_info[backup].subflow =3D subflow; send_info[backup].linger_time =3D linger_time; } } @@ -122,18 +127,17 @@ int BPF_PROG(bpf_burst_get_send, struct mptcp_sock *m= sk) =20 /* pick the best backup if no other subflow is active */ if (!nr_active) - send_info[SSK_MODE_ACTIVE].ssk =3D send_info[SSK_MODE_BACKUP].ssk; + send_info[SSK_MODE_ACTIVE].subflow =3D send_info[SSK_MODE_BACKUP].subflo= w; =20 - ssk =3D send_info[SSK_MODE_ACTIVE].ssk; - if (!ssk || !sk_stream_memory_free(msk, ssk)) + subflow =3D send_info[SSK_MODE_ACTIVE].subflow; + if (!subflow) return -1; =20 - subflow =3D bpf_mptcp_subflow_ctx(ssk); - if (!subflow) + ssk =3D mptcp_subflow_tcp_sock(subflow); + if (!ssk || !sk_stream_memory_free(msk, ssk)) return -1; =20 burst =3D min(MPTCP_SEND_BURST_SIZE, mptcp_wnd_end(msk) - msk->snd_nxt); - ssk =3D bpf_core_cast(ssk, struct sock); wmem =3D ssk->sk_wmem_queued; if (!burst) goto out; --=20 2.53.0