From nobody Tue Dec 16 20:32:27 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 661CEC4167B for ; Thu, 30 Nov 2023 11:28:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345164AbjK3L20 (ORCPT ); Thu, 30 Nov 2023 06:28:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45808 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345155AbjK3L2Y (ORCPT ); Thu, 30 Nov 2023 06:28:24 -0500 Received: from out30-119.freemail.mail.aliyun.com (out30-119.freemail.mail.aliyun.com [115.124.30.119]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9319DD7F; Thu, 30 Nov 2023 03:28:29 -0800 (PST) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R161e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046056;MF=guwen@linux.alibaba.com;NM=1;PH=DS;RN=21;SR=0;TI=SMTPD_---0VxRPu7z_1701343705; Received: from localhost(mailfrom:guwen@linux.alibaba.com fp:SMTPD_---0VxRPu7z_1701343705) by smtp.aliyun-inc.com; Thu, 30 Nov 2023 19:28:27 +0800 From: Wen Gu To: wintera@linux.ibm.com, wenjia@linux.ibm.com, hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, kgraul@linux.ibm.com, jaka@linux.ibm.com Cc: borntraeger@linux.ibm.com, svens@linux.ibm.com, alibuda@linux.alibaba.com, tonylu@linux.alibaba.com, guwen@linux.alibaba.com, raspl@linux.ibm.com, schnelle@linux.ibm.com, linux-s390@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v3 2/7] net/smc: support SMCv2.x supplemental features negotiation Date: Thu, 30 Nov 2023 19:28:10 +0800 Message-Id: <1701343695-122657-3-git-send-email-guwen@linux.alibaba.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1701343695-122657-1-git-send-email-guwen@linux.alibaba.com> References: <1701343695-122657-1-git-send-email-guwen@linux.alibaba.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch adds SMCv2.x supplemental features negotiation. Supported SMCv2.x supplemental features are represented by feature_mask in FCE field. The negotiation process is as follows. Server Client Proposal(features(c-mask bits)) <----------------------------------------- Accept(features(s-mask bits)) -----------------------------------------> Confirm(features(s&c-mask bits)) <----------------------------------------- Signed-off-by: Wen Gu --- net/smc/smc.h | 4 ++++ net/smc/smc_clc.c | 7 +++++++ net/smc/smc_clc.h | 14 ++++++++++---- net/smc/smc_core.h | 1 + 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/net/smc/smc.h b/net/smc/smc.h index cd51261..95f56c7 100644 --- a/net/smc/smc.h +++ b/net/smc/smc.h @@ -58,6 +58,10 @@ enum smc_state { /* possible states of an SMC socket */ SMC_PROCESSABORT =3D 27, }; =20 +#define SMC_FEATURE_MASK 0 /* bitmask of + * supported supplemental features + */ + struct smc_link_group; =20 struct smc_wr_rx_hdr { /* common prefix part of LLC and CDC to demultiplex= */ diff --git a/net/smc/smc_clc.c b/net/smc/smc_clc.c index 147a771..e2e437b 100644 --- a/net/smc/smc_clc.c +++ b/net/smc/smc_clc.c @@ -437,6 +437,7 @@ static int smc_clc_fill_fce_v2x(struct smc_clc_first_co= ntact_ext_v2x *fce_v2x, fce_v2x->max_conns =3D ini->max_conns; fce_v2x->max_links =3D ini->max_links; } + fce_v2x->feature_mask =3D htons(ini->feature_mask); } =20 out: @@ -907,6 +908,7 @@ int smc_clc_send_proposal(struct smc_sock *smc, struct = smc_init_info *ini) pclc_smcd->v2_ext_offset =3D htons(v2_ext_offset); plen +=3D sizeof(*v2_ext); =20 + v2_ext->feature_mask =3D htons(SMC_FEATURE_MASK); read_lock(&smc_clc_eid_table.lock); v2_ext->hdr.eid_cnt =3D smc_clc_eid_table.ueid_cnt; plen +=3D smc_clc_eid_table.ueid_cnt * SMC_MAX_EID_LEN; @@ -1181,6 +1183,7 @@ int smc_clc_srv_v2x_features_validate(struct smc_sock= *smc, =20 ini->max_conns =3D SMC_CONN_PER_LGR_MAX; ini->max_links =3D SMC_LINKS_ADD_LNK_MAX; + ini->feature_mask =3D SMC_FEATURE_MASK; =20 if ((!(ini->smcd_version & SMC_V2) && !(ini->smcr_version & SMC_V2)) || ini->release_nr < SMC_RELEASE_1) @@ -1224,6 +1227,8 @@ int smc_clc_clnt_v2x_features_validate(struct smc_clc= _first_contact_ext *fce, return SMC_CLC_DECL_MAXLINKERR; ini->max_links =3D fce_v2x->max_links; } + /* common supplemental features of server and client */ + ini->feature_mask =3D ntohs(fce_v2x->feature_mask) & SMC_FEATURE_MASK; =20 return 0; } @@ -1254,6 +1259,8 @@ int smc_clc_v2x_features_confirm_check(struct smc_clc= _msg_accept_confirm *cclc, if (fce_v2x->max_links !=3D ini->max_links) return SMC_CLC_DECL_MAXLINKERR; } + /* common supplemental features returned by client */ + ini->feature_mask =3D ntohs(fce_v2x->feature_mask); =20 return 0; } diff --git a/net/smc/smc_clc.h b/net/smc/smc_clc.h index 89b258c..e64c235 100644 --- a/net/smc/smc_clc.h +++ b/net/smc/smc_clc.h @@ -138,7 +138,8 @@ struct smc_clc_v2_extension { u8 roce[16]; /* RoCEv2 GID */ u8 max_conns; u8 max_links; - u8 reserved[14]; + __be16 feature_mask; + u8 reserved[12]; u8 user_eids[][SMC_MAX_EID_LEN]; }; =20 @@ -240,9 +241,14 @@ struct smc_clc_first_contact_ext { =20 struct smc_clc_first_contact_ext_v2x { struct smc_clc_first_contact_ext fce_v2_base; - u8 max_conns; /* for SMC-R only */ - u8 max_links; /* for SMC-R only */ - u8 reserved3[2]; + union { + struct { + u8 max_conns; /* for SMC-R only */ + u8 max_links; /* for SMC-R only */ + }; + u8 reserved3[2]; /* for SMC-D only */ + }; + __be16 feature_mask; __be32 vendor_exp_options; u8 reserved4[8]; } __packed; /* format defined in diff --git a/net/smc/smc_core.h b/net/smc/smc_core.h index 120027d..9f65678 100644 --- a/net/smc/smc_core.h +++ b/net/smc/smc_core.h @@ -401,6 +401,7 @@ struct smc_init_info { u8 max_links; u8 first_contact_peer; u8 first_contact_local; + u16 feature_mask; unsigned short vlan_id; u32 rc; u8 negotiated_eid[SMC_MAX_EID_LEN]; --=20 1.8.3.1