From: Wenjia Zhang <wenjia@linux.ibm.com>
To: Guangguan Wang <guangguan.wang@linux.alibaba.com>,
jaka@linux.ibm.com, kgraul@linux.ibm.com,
tonylu@linux.alibaba.com, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com
Cc: horms@kernel.org, alibuda@linux.alibaba.com,
guwen@linux.alibaba.com, linux-s390@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH v2 net-next 3/6] net/smc: support smc v2.x features validate
Date: Wed, 9 Aug 2023 18:03:58 +0200 [thread overview]
Message-ID: <1f162370-5878-80fc-25b9-0de22ba2efe1@linux.ibm.com> (raw)
In-Reply-To: <20230807062720.20555-4-guangguan.wang@linux.alibaba.com>
On 07.08.23 08:27, Guangguan Wang wrote:
> Support smc v2.x features validate for smc v2.1.
>
a bit more description?
> Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
> Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>
> ---
> 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 52279bdc100a..fd58e25beddf 100644
> --- a/net/smc/af_smc.c
> +++ b/net/smc/af_smc.c
> @@ -1169,6 +1169,7 @@ static int smc_connect_rdma_v2_prepare(struct smc_sock *smc,
> struct smc_clc_first_contact_ext *fce =
> (struct smc_clc_first_contact_ext *)
> (((u8 *)clc_v2) + sizeof(*clc_v2));
> + int rc;
>
> if (!ini->first_contact_peer || aclc->hdr.version == SMC_V1)
> return 0;
> @@ -1191,6 +1192,9 @@ static int smc_connect_rdma_v2_prepare(struct smc_sock *smc,
> if (fce->release > SMC_RELEASE)
> return SMC_CLC_DECL_VERSMISMAT;
> ini->release_ver = fce->release;
> + rc = smc_clc_cli_v2x_features_validate(fce, ini);
> + if (rc)
> + return rc;
>
> return 0;
> }
> @@ -1367,6 +1371,9 @@ static int smc_connect_ism(struct smc_sock *smc,
> if (fce->release > SMC_RELEASE)
> return SMC_CLC_DECL_VERSMISMAT;
> ini->release_ver = fce->release;
> + rc = smc_clc_cli_v2x_features_validate(fce, ini);
> + if (rc)
> + return rc;
> }
>
> rc = smc_v2_determine_accepted_chid(aclc_v2, ini);
> @@ -2417,6 +2424,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);
> @@ -2449,6 +2460,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 ae80c191a834..4f6b69af2b80 100644
> --- a/net/smc/smc_clc.c
> +++ b/net/smc/smc_clc.c
> @@ -1158,6 +1158,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_ver < 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_cli_v2x_features_validate(struct smc_clc_first_contact_ext *fce,
> + struct smc_init_info *ini)
> +{
> + if (ini->release_ver < SMC_RELEASE_1)
> + return 0;
> +
> + return 0;
> +}
Why need the function? Since it returns 0 anyway.
> +
> +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_ver != 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 6133276a8839..66932bfdc6d0 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 */
> @@ -415,6 +416,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_cli_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);
next prev parent reply other threads:[~2023-08-09 16:09 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-07 6:27 [RFC PATCH v2 net-next 0/6] net/smc: several features's implementation for smc v2.1 Guangguan Wang
2023-08-07 6:27 ` [RFC PATCH v2 net-next 1/6] net/smc: support smc release version negotiation in clc handshake Guangguan Wang
2023-08-09 16:03 ` Wenjia Zhang
2023-08-15 3:57 ` Guangguan Wang
2023-08-07 6:27 ` [RFC PATCH v2 net-next 2/6] net/smc: add vendor unique experimental options area " Guangguan Wang
2023-08-07 6:27 ` [RFC PATCH v2 net-next 3/6] net/smc: support smc v2.x features validate Guangguan Wang
2023-08-09 16:03 ` Wenjia Zhang [this message]
2023-08-15 3:59 ` Guangguan Wang
2023-08-07 6:27 ` [RFC PATCH v2 net-next 4/6] net/smc: support max connections per lgr negotiation Guangguan Wang
2023-08-09 16:04 ` Wenjia Zhang
2023-08-15 6:31 ` Guangguan Wang
2023-08-28 12:54 ` Wenjia Zhang
2023-08-29 2:31 ` Guangguan Wang
2023-08-29 13:18 ` Wenjia Zhang
2023-08-30 3:17 ` Guangguan Wang
2023-08-30 15:22 ` Wenjia Zhang
2023-08-07 6:27 ` [RFC PATCH v2 net-next 5/6] net/smc: support max links per lgr negotiation in clc handshake Guangguan Wang
2023-08-07 15:08 ` Simon Horman
2023-08-07 6:27 ` [RFC PATCH v2 net-next 6/6] net/smc: Extend SMCR v2 linkgroup netlink attribute Guangguan Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1f162370-5878-80fc-25b9-0de22ba2efe1@linux.ibm.com \
--to=wenjia@linux.ibm.com \
--cc=alibuda@linux.alibaba.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=guangguan.wang@linux.alibaba.com \
--cc=guwen@linux.alibaba.com \
--cc=horms@kernel.org \
--cc=jaka@linux.ibm.com \
--cc=kgraul@linux.ibm.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=tonylu@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.