+++ /dev/null
-From 61576515c6913e1ae2c4e7c01d832b985f66500e Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 11 Oct 2023 15:48:51 +0800
-Subject: net/smc: fix smc clc failed issue when netdevice not in init_net
-
-From: Albert Huang <huangjie.albert@bytedance.com>
-
-[ Upstream commit c68681ae46eaaa1640b52fe366d21a93b2185df5 ]
-
-If the netdevice is within a container and communicates externally
-through network technologies such as VxLAN, we won't be able to find
-routing information in the init_net namespace. To address this issue,
-we need to add a struct net parameter to the smc_ib_find_route function.
-This allow us to locate the routing information within the corresponding
-net namespace, ensuring the correct completion of the SMC CLC interaction.
-
-Fixes: e5c4744cfb59 ("net/smc: add SMC-Rv2 connection establishment")
-Signed-off-by: Albert Huang <huangjie.albert@bytedance.com>
-Reviewed-by: Dust Li <dust.li@linux.alibaba.com>
-Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
-Link: https://lore.kernel.org/r/20231011074851.95280-1-huangjie.albert@bytedance.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/smc/af_smc.c | 3 ++-
- net/smc/smc_ib.c | 7 ++++---
- net/smc/smc_ib.h | 2 +-
- 3 files changed, 7 insertions(+), 5 deletions(-)
-
-diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
-index fa7b8015cd7bb..01bd576ffa5e1 100644
---- a/net/smc/af_smc.c
-+++ b/net/smc/af_smc.c
-@@ -1199,6 +1199,7 @@ static int smc_connect_rdma_v2_prepare(struct smc_sock *smc,
- (struct smc_clc_msg_accept_confirm_v2 *)aclc;
- struct smc_clc_first_contact_ext *fce =
- smc_get_clc_first_contact_ext(clc_v2, false);
-+ struct net *net = sock_net(&smc->sk);
- int rc;
-
- if (!ini->first_contact_peer || aclc->hdr.version == SMC_V1)
-@@ -1208,7 +1209,7 @@ static int smc_connect_rdma_v2_prepare(struct smc_sock *smc,
- memcpy(ini->smcrv2.nexthop_mac, &aclc->r0.lcl.mac, ETH_ALEN);
- ini->smcrv2.uses_gateway = false;
- } else {
-- if (smc_ib_find_route(smc->clcsock->sk->sk_rcv_saddr,
-+ if (smc_ib_find_route(net, smc->clcsock->sk->sk_rcv_saddr,
- smc_ib_gid_to_ipv4(aclc->r0.lcl.gid),
- ini->smcrv2.nexthop_mac,
- &ini->smcrv2.uses_gateway))
-diff --git a/net/smc/smc_ib.c b/net/smc/smc_ib.c
-index 9b66d6aeeb1ae..89981dbe46c94 100644
---- a/net/smc/smc_ib.c
-+++ b/net/smc/smc_ib.c
-@@ -193,7 +193,7 @@ bool smc_ib_port_active(struct smc_ib_device *smcibdev, u8 ibport)
- return smcibdev->pattr[ibport - 1].state == IB_PORT_ACTIVE;
- }
-
--int smc_ib_find_route(__be32 saddr, __be32 daddr,
-+int smc_ib_find_route(struct net *net, __be32 saddr, __be32 daddr,
- u8 nexthop_mac[], u8 *uses_gateway)
- {
- struct neighbour *neigh = NULL;
-@@ -205,7 +205,7 @@ int smc_ib_find_route(__be32 saddr, __be32 daddr,
-
- if (daddr == cpu_to_be32(INADDR_NONE))
- goto out;
-- rt = ip_route_output_flow(&init_net, &fl4, NULL);
-+ rt = ip_route_output_flow(net, &fl4, NULL);
- if (IS_ERR(rt))
- goto out;
- if (rt->rt_uses_gateway && rt->rt_gw_family != AF_INET)
-@@ -235,6 +235,7 @@ static int smc_ib_determine_gid_rcu(const struct net_device *ndev,
- if (smcrv2 && attr->gid_type == IB_GID_TYPE_ROCE_UDP_ENCAP &&
- smc_ib_gid_to_ipv4((u8 *)&attr->gid) != cpu_to_be32(INADDR_NONE)) {
- struct in_device *in_dev = __in_dev_get_rcu(ndev);
-+ struct net *net = dev_net(ndev);
- const struct in_ifaddr *ifa;
- bool subnet_match = false;
-
-@@ -248,7 +249,7 @@ static int smc_ib_determine_gid_rcu(const struct net_device *ndev,
- }
- if (!subnet_match)
- goto out;
-- if (smcrv2->daddr && smc_ib_find_route(smcrv2->saddr,
-+ if (smcrv2->daddr && smc_ib_find_route(net, smcrv2->saddr,
- smcrv2->daddr,
- smcrv2->nexthop_mac,
- &smcrv2->uses_gateway))
-diff --git a/net/smc/smc_ib.h b/net/smc/smc_ib.h
-index 034295676e881..ebcb05ede7f55 100644
---- a/net/smc/smc_ib.h
-+++ b/net/smc/smc_ib.h
-@@ -113,7 +113,7 @@ void smc_ib_sync_sg_for_device(struct smc_link *lnk,
- int smc_ib_determine_gid(struct smc_ib_device *smcibdev, u8 ibport,
- unsigned short vlan_id, u8 gid[], u8 *sgid_index,
- struct smc_init_info_smcrv2 *smcrv2);
--int smc_ib_find_route(__be32 saddr, __be32 daddr,
-+int smc_ib_find_route(struct net *net, __be32 saddr, __be32 daddr,
- u8 nexthop_mac[], u8 *uses_gateway);
- bool smc_ib_is_valid_local_systemid(void);
- int smcr_nl_get_device(struct sk_buff *skb, struct netlink_callback *cb);
---
-2.40.1
-
+++ /dev/null
-From a1e70723561808918567b223a81c29b808e3b664 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 17 Aug 2023 21:20:27 +0800
-Subject: net/smc: support smc release version negotiation in clc handshake
-
-From: Guangguan Wang <guangguan.wang@linux.alibaba.com>
-
-[ Upstream commit 1e700948c9db0d09f691f715e8f4b947e51e35b5 ]
-
-Support smc release version negotiation in clc handshake based on
-SMC v2, where no negotiation process for different releases, but
-for different versions. The latest smc release version was updated
-to v2.1. And currently there are two release versions of SMCv2, v2.0
-and v2.1. In the release version negotiation, client sends the preferred
-release version by CLC Proposal Message, server makes decision for which
-release version to use based on the client preferred release version and
-self-supported release version (here choose the minimum release version
-of the client preferred and server latest supported), then the decision
-returns to client by CLC Accept Message. Client confirms the decision by
-CLC Confirm Message.
-
-Client Server
- Proposal(preferred release version)
- ------------------------------------>
-
- Accept(accpeted release version)
- min(client preferred, server latest supported)
- <------------------------------------
-
- Confirm(accpeted release version)
- ------------------------------------>
-
-Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
-Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>
-Reviewed-by: Jan Karcher <jaka@linux.ibm.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Stable-dep-of: c68681ae46ea ("net/smc: fix smc clc failed issue when netdevice not in init_net")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/smc/af_smc.c | 21 +++++++++++++++++----
- net/smc/smc.h | 5 ++++-
- net/smc/smc_clc.c | 14 +++++++-------
- net/smc/smc_clc.h | 23 ++++++++++++++++++++++-
- net/smc/smc_core.h | 1 +
- 5 files changed, 51 insertions(+), 13 deletions(-)
-
-diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
-index c0e4e587b4994..077e5864fc441 100644
---- a/net/smc/af_smc.c
-+++ b/net/smc/af_smc.c
-@@ -1198,8 +1198,7 @@ static int smc_connect_rdma_v2_prepare(struct smc_sock *smc,
- struct smc_clc_msg_accept_confirm_v2 *clc_v2 =
- (struct smc_clc_msg_accept_confirm_v2 *)aclc;
- struct smc_clc_first_contact_ext *fce =
-- (struct smc_clc_first_contact_ext *)
-- (((u8 *)clc_v2) + sizeof(*clc_v2));
-+ smc_get_clc_first_contact_ext(clc_v2, false);
-
- if (!ini->first_contact_peer || aclc->hdr.version == SMC_V1)
- return 0;
-@@ -1218,6 +1217,9 @@ static int smc_connect_rdma_v2_prepare(struct smc_sock *smc,
- return SMC_CLC_DECL_NOINDIRECT;
- }
- }
-+
-+ ini->release_nr = fce->release;
-+
- return 0;
- }
-
-@@ -1386,6 +1388,13 @@ static int smc_connect_ism(struct smc_sock *smc,
- struct smc_clc_msg_accept_confirm_v2 *aclc_v2 =
- (struct smc_clc_msg_accept_confirm_v2 *)aclc;
-
-+ if (ini->first_contact_peer) {
-+ struct smc_clc_first_contact_ext *fce =
-+ smc_get_clc_first_contact_ext(aclc_v2, true);
-+
-+ ini->release_nr = fce->release;
-+ }
-+
- rc = smc_v2_determine_accepted_chid(aclc_v2, ini);
- if (rc)
- return rc;
-@@ -1420,7 +1429,7 @@ static int smc_connect_ism(struct smc_sock *smc,
- }
-
- rc = smc_clc_send_confirm(smc, ini->first_contact_local,
-- aclc->hdr.version, eid, NULL);
-+ aclc->hdr.version, eid, ini);
- if (rc)
- goto connect_abort;
- mutex_unlock(&smc_server_lgr_pending);
-@@ -1996,6 +2005,10 @@ static int smc_listen_v2_check(struct smc_sock *new_smc,
- }
- }
-
-+ ini->release_nr = pclc_v2_ext->hdr.flag.release;
-+ if (pclc_v2_ext->hdr.flag.release > SMC_RELEASE)
-+ ini->release_nr = SMC_RELEASE;
-+
- out:
- if (!ini->smcd_version && !ini->smcr_version)
- return rc;
-@@ -2443,7 +2456,7 @@ static void smc_listen_work(struct work_struct *work)
- /* send SMC Accept CLC message */
- accept_version = ini->is_smcd ? ini->smcd_version : ini->smcr_version;
- rc = smc_clc_send_accept(new_smc, ini->first_contact_local,
-- accept_version, ini->negotiated_eid);
-+ accept_version, ini->negotiated_eid, ini);
- if (rc)
- goto out_unlock;
-
-diff --git a/net/smc/smc.h b/net/smc/smc.h
-index 1f2b912c43d10..24745fde4ac26 100644
---- a/net/smc/smc.h
-+++ b/net/smc/smc.h
-@@ -21,7 +21,10 @@
-
- #define SMC_V1 1 /* SMC version V1 */
- #define SMC_V2 2 /* SMC version V2 */
--#define SMC_RELEASE 0
-+
-+#define SMC_RELEASE_0 0
-+#define SMC_RELEASE_1 1
-+#define SMC_RELEASE SMC_RELEASE_1 /* the latest release version */
-
- #define SMCPROTO_SMC 0 /* SMC protocol, IPv4 */
- #define SMCPROTO_SMC6 1 /* SMC protocol, IPv6 */
-diff --git a/net/smc/smc_clc.c b/net/smc/smc_clc.c
-index c90d9e5dda540..fb0be0817e8a5 100644
---- a/net/smc/smc_clc.c
-+++ b/net/smc/smc_clc.c
-@@ -420,11 +420,11 @@ smc_clc_msg_decl_valid(struct smc_clc_msg_decline *dclc)
- return true;
- }
-
--static void smc_clc_fill_fce(struct smc_clc_first_contact_ext *fce, int *len)
-+static void smc_clc_fill_fce(struct smc_clc_first_contact_ext *fce, int *len, int release_nr)
- {
- memset(fce, 0, sizeof(*fce));
- fce->os_type = SMC_CLC_OS_LINUX;
-- fce->release = SMC_RELEASE;
-+ fce->release = release_nr;
- memcpy(fce->hostname, smc_hostname, sizeof(smc_hostname));
- (*len) += sizeof(*fce);
- }
-@@ -1019,7 +1019,7 @@ static int smc_clc_send_confirm_accept(struct smc_sock *smc,
- memcpy(clc_v2->d1.eid, eid, SMC_MAX_EID_LEN);
- len = SMCD_CLC_ACCEPT_CONFIRM_LEN_V2;
- if (first_contact)
-- smc_clc_fill_fce(&fce, &len);
-+ smc_clc_fill_fce(&fce, &len, ini->release_nr);
- clc_v2->hdr.length = htons(len);
- }
- memcpy(trl.eyecatcher, SMCD_EYECATCHER,
-@@ -1063,10 +1063,10 @@ static int smc_clc_send_confirm_accept(struct smc_sock *smc,
- memcpy(clc_v2->r1.eid, eid, SMC_MAX_EID_LEN);
- len = SMCR_CLC_ACCEPT_CONFIRM_LEN_V2;
- if (first_contact) {
-- smc_clc_fill_fce(&fce, &len);
-+ smc_clc_fill_fce(&fce, &len, ini->release_nr);
- fce.v2_direct = !link->lgr->uses_gateway;
- memset(&gle, 0, sizeof(gle));
-- if (ini && clc->hdr.type == SMC_CLC_CONFIRM) {
-+ if (clc->hdr.type == SMC_CLC_CONFIRM) {
- gle.gid_cnt = ini->smcrv2.gidlist.len;
- len += sizeof(gle);
- len += gle.gid_cnt * sizeof(gle.gid[0]);
-@@ -1141,7 +1141,7 @@ int smc_clc_send_confirm(struct smc_sock *smc, bool clnt_first_contact,
-
- /* send CLC ACCEPT message across internal TCP socket */
- int smc_clc_send_accept(struct smc_sock *new_smc, bool srv_first_contact,
-- u8 version, u8 *negotiated_eid)
-+ u8 version, u8 *negotiated_eid, struct smc_init_info *ini)
- {
- struct smc_clc_msg_accept_confirm_v2 aclc_v2;
- int len;
-@@ -1149,7 +1149,7 @@ int smc_clc_send_accept(struct smc_sock *new_smc, bool srv_first_contact,
- memset(&aclc_v2, 0, sizeof(aclc_v2));
- aclc_v2.hdr.type = SMC_CLC_ACCEPT;
- len = smc_clc_send_confirm_accept(new_smc, &aclc_v2, srv_first_contact,
-- version, negotiated_eid, NULL);
-+ version, negotiated_eid, ini);
- if (len < ntohs(aclc_v2.hdr.length))
- len = len >= 0 ? -EPROTO : -new_smc->clcsock->sk->sk_err;
-
-diff --git a/net/smc/smc_clc.h b/net/smc/smc_clc.h
-index 5fee545c9a109..b923e89acafb0 100644
---- a/net/smc/smc_clc.h
-+++ b/net/smc/smc_clc.h
-@@ -370,6 +370,27 @@ smc_get_clc_smcd_v2_ext(struct smc_clc_v2_extension *prop_v2ext)
- ntohs(prop_v2ext->hdr.smcd_v2_ext_offset));
- }
-
-+static inline struct smc_clc_first_contact_ext *
-+smc_get_clc_first_contact_ext(struct smc_clc_msg_accept_confirm_v2 *clc_v2,
-+ bool is_smcd)
-+{
-+ int clc_v2_len;
-+
-+ if (clc_v2->hdr.version == SMC_V1 ||
-+ !(clc_v2->hdr.typev2 & SMC_FIRST_CONTACT_MASK))
-+ return NULL;
-+
-+ if (is_smcd)
-+ clc_v2_len =
-+ offsetofend(struct smc_clc_msg_accept_confirm_v2, d1);
-+ else
-+ clc_v2_len =
-+ offsetofend(struct smc_clc_msg_accept_confirm_v2, r1);
-+
-+ return (struct smc_clc_first_contact_ext *)(((u8 *)clc_v2) +
-+ clc_v2_len);
-+}
-+
- struct smcd_dev;
- struct smc_init_info;
-
-@@ -382,7 +403,7 @@ int smc_clc_send_proposal(struct smc_sock *smc, struct smc_init_info *ini);
- int smc_clc_send_confirm(struct smc_sock *smc, bool clnt_first_contact,
- u8 version, u8 *eid, struct smc_init_info *ini);
- int smc_clc_send_accept(struct smc_sock *smc, bool srv_first_contact,
-- u8 version, u8 *negotiated_eid);
-+ u8 version, u8 *negotiated_eid, struct smc_init_info *ini);
- void smc_clc_init(void) __init;
- void smc_clc_exit(void);
- void smc_clc_get_hostname(u8 **host);
-diff --git a/net/smc/smc_core.h b/net/smc/smc_core.h
-index 1645fba0d2d38..5bbc16f851e05 100644
---- a/net/smc/smc_core.h
-+++ b/net/smc/smc_core.h
-@@ -374,6 +374,7 @@ struct smc_init_info {
- u8 is_smcd;
- u8 smc_type_v1;
- u8 smc_type_v2;
-+ u8 release_nr;
- u8 first_contact_peer;
- u8 first_contact_local;
- unsigned short vlan_id;
---
-2.40.1
-
+++ /dev/null
-From 6a0b0a9ecf20c93587831891cd4b1f11447de56c Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 17 Aug 2023 21:20:29 +0800
-Subject: net/smc: support smc v2.x features validate
-
-From: Guangguan Wang <guangguan.wang@linux.alibaba.com>
-
-[ Upstream commit 6ac1e6563f5915cd38b6bc6a8b26964b2252f751 ]
-
-Support SMC v2.x features validate for SMC v2.1. This is the frame
-code for SMC v2.x features validate, and will take effects only when
-the negotiated release version is v2.1 or later.
-
-For Server, v2.x features' validation should be done in smc_clc_srv_
-v2x_features_validate when receiving v2.1 or later CLC Proposal Message,
-such as max conns, max links negotiation, the decision of the final
-value of max conns and max links should be made in this function.
-And final check for server when receiving v2.1 or later CLC Confirm
-Message should be done in smc_clc_v2x_features_confirm_check.
-
-For client, v2.x features' validation should be done in smc_clc_clnt_
-v2x_features_validate when receiving v2.1 or later CLC Accept Message,
-for example, the decision to accpt the accepted value or to decline
-should be made in this function.
-
-Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
-Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>
-Reviewed-by: Jan Karcher <jaka@linux.ibm.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Stable-dep-of: c68681ae46ea ("net/smc: fix smc clc failed issue when netdevice not in init_net")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/smc/af_smc.c | 18 ++++++++++++++++++
- net/smc/smc_clc.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
- net/smc/smc_clc.h | 7 +++++++
- 3 files changed, 71 insertions(+)
-
-diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
-index 077e5864fc441..fa7b8015cd7bb 100644
---- a/net/smc/af_smc.c
-+++ b/net/smc/af_smc.c
-@@ -1199,6 +1199,7 @@ static int smc_connect_rdma_v2_prepare(struct smc_sock *smc,
- (struct smc_clc_msg_accept_confirm_v2 *)aclc;
- struct smc_clc_first_contact_ext *fce =
- smc_get_clc_first_contact_ext(clc_v2, false);
-+ int rc;
-
- if (!ini->first_contact_peer || aclc->hdr.version == SMC_V1)
- return 0;
-@@ -1219,6 +1220,9 @@ static int smc_connect_rdma_v2_prepare(struct smc_sock *smc,
- }
-
- ini->release_nr = fce->release;
-+ rc = smc_clc_clnt_v2x_features_validate(fce, ini);
-+ if (rc)
-+ return rc;
-
- return 0;
- }
-@@ -1393,6 +1397,9 @@ static int smc_connect_ism(struct smc_sock *smc,
- smc_get_clc_first_contact_ext(aclc_v2, true);
-
- ini->release_nr = fce->release;
-+ rc = smc_clc_clnt_v2x_features_validate(fce, ini);
-+ if (rc)
-+ return rc;
- }
-
- rc = smc_v2_determine_accepted_chid(aclc_v2, ini);
-@@ -2443,6 +2450,10 @@ static void smc_listen_work(struct work_struct *work)
- if (rc)
- goto out_decl;
-
-+ rc = smc_clc_srv_v2x_features_validate(pclc, ini);
-+ if (rc)
-+ goto out_decl;
-+
- mutex_lock(&smc_server_lgr_pending);
- smc_close_init(new_smc);
- smc_rx_init(new_smc);
-@@ -2475,6 +2486,13 @@ static void smc_listen_work(struct work_struct *work)
- goto out_decl;
- }
-
-+ rc = smc_clc_v2x_features_confirm_check(cclc, ini);
-+ if (rc) {
-+ if (!ini->is_smcd)
-+ goto out_unlock;
-+ goto out_decl;
-+ }
-+
- /* finish worker */
- if (!ini->is_smcd) {
- rc = smc_listen_rdma_finish(new_smc, cclc,
-diff --git a/net/smc/smc_clc.c b/net/smc/smc_clc.c
-index fb0be0817e8a5..f50d1b019a80f 100644
---- a/net/smc/smc_clc.c
-+++ b/net/smc/smc_clc.c
-@@ -1156,6 +1156,52 @@ int smc_clc_send_accept(struct smc_sock *new_smc, bool srv_first_contact,
- return len > 0 ? 0 : len;
- }
-
-+int smc_clc_srv_v2x_features_validate(struct smc_clc_msg_proposal *pclc,
-+ struct smc_init_info *ini)
-+{
-+ struct smc_clc_v2_extension *pclc_v2_ext;
-+
-+ if ((!(ini->smcd_version & SMC_V2) && !(ini->smcr_version & SMC_V2)) ||
-+ ini->release_nr < SMC_RELEASE_1)
-+ return 0;
-+
-+ pclc_v2_ext = smc_get_clc_v2_ext(pclc);
-+ if (!pclc_v2_ext)
-+ return SMC_CLC_DECL_NOV2EXT;
-+
-+ return 0;
-+}
-+
-+int smc_clc_clnt_v2x_features_validate(struct smc_clc_first_contact_ext *fce,
-+ struct smc_init_info *ini)
-+{
-+ if (ini->release_nr < SMC_RELEASE_1)
-+ return 0;
-+
-+ return 0;
-+}
-+
-+int smc_clc_v2x_features_confirm_check(struct smc_clc_msg_accept_confirm *cclc,
-+ struct smc_init_info *ini)
-+{
-+ struct smc_clc_msg_accept_confirm_v2 *clc_v2 =
-+ (struct smc_clc_msg_accept_confirm_v2 *)cclc;
-+ struct smc_clc_first_contact_ext *fce =
-+ smc_get_clc_first_contact_ext(clc_v2, ini->is_smcd);
-+
-+ if (cclc->hdr.version == SMC_V1 ||
-+ !(cclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK))
-+ return 0;
-+
-+ if (ini->release_nr != fce->release)
-+ return SMC_CLC_DECL_RELEASEERR;
-+
-+ if (fce->release < SMC_RELEASE_1)
-+ return 0;
-+
-+ return 0;
-+}
-+
- void smc_clc_get_hostname(u8 **host)
- {
- *host = &smc_hostname[0];
-diff --git a/net/smc/smc_clc.h b/net/smc/smc_clc.h
-index b923e89acafb0..32fa56bfa06d5 100644
---- a/net/smc/smc_clc.h
-+++ b/net/smc/smc_clc.h
-@@ -45,6 +45,7 @@
- #define SMC_CLC_DECL_NOSEID 0x03030006 /* peer sent no SEID */
- #define SMC_CLC_DECL_NOSMCD2DEV 0x03030007 /* no SMC-Dv2 device found */
- #define SMC_CLC_DECL_NOUEID 0x03030008 /* peer sent no UEID */
-+#define SMC_CLC_DECL_RELEASEERR 0x03030009 /* release version negotiate failed */
- #define SMC_CLC_DECL_MODEUNSUPP 0x03040000 /* smc modes do not match (R or D)*/
- #define SMC_CLC_DECL_RMBE_EC 0x03050000 /* peer has eyecatcher in RMBE */
- #define SMC_CLC_DECL_OPTUNSUPP 0x03060000 /* fastopen sockopt not supported */
-@@ -404,6 +405,12 @@ int smc_clc_send_confirm(struct smc_sock *smc, bool clnt_first_contact,
- u8 version, u8 *eid, struct smc_init_info *ini);
- int smc_clc_send_accept(struct smc_sock *smc, bool srv_first_contact,
- u8 version, u8 *negotiated_eid, struct smc_init_info *ini);
-+int smc_clc_srv_v2x_features_validate(struct smc_clc_msg_proposal *pclc,
-+ struct smc_init_info *ini);
-+int smc_clc_clnt_v2x_features_validate(struct smc_clc_first_contact_ext *fce,
-+ struct smc_init_info *ini);
-+int smc_clc_v2x_features_confirm_check(struct smc_clc_msg_accept_confirm *cclc,
-+ struct smc_init_info *ini);
- void smc_clc_init(void) __init;
- void smc_clc_exit(void);
- void smc_clc_get_hostname(u8 **host);
---
-2.40.1
-
net-mlx5e-fix-vf-representors-reporting-zero-counter.patch
net-tls-split-tls_rx_reader_lock.patch
tcp-allow-again-tcp_disconnect-when-threads-are-wait.patch
-net-smc-support-smc-release-version-negotiation-in-c.patch
-net-smc-support-smc-v2.x-features-validate.patch
-net-smc-fix-smc-clc-failed-issue-when-netdevice-not-.patch
bluetooth-hci_event-fix-using-memcmp-when-comparing-.patch
tcp_bpf-properly-release-resources-on-error-paths.patch
mtd-rawnand-qcom-unmap-the-right-resource-upon-probe-failure.patch