Commit f1eb02f9 authored by Ursula Braun's avatar Ursula Braun Committed by David S. Miller

net/smc: CLC header fields renaming

SMCD version 2 defines 2 more bits in the CLC header to specify
version 2 types. This patch prepares better naming of the CLC
header fields. No functional change.
Signed-off-by: default avatarUrsula Braun <ubraun@linux.ibm.com>
Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a304e29a
...@@ -618,7 +618,7 @@ static int smc_connect_rdma(struct smc_sock *smc, ...@@ -618,7 +618,7 @@ static int smc_connect_rdma(struct smc_sock *smc,
ini->is_smcd = false; ini->is_smcd = false;
ini->ib_lcl = &aclc->r0.lcl; ini->ib_lcl = &aclc->r0.lcl;
ini->ib_clcqpn = ntoh24(aclc->r0.qpn); ini->ib_clcqpn = ntoh24(aclc->r0.qpn);
ini->first_contact_peer = aclc->hdr.flag; ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK;
mutex_lock(&smc_client_lgr_pending); mutex_lock(&smc_client_lgr_pending);
reason_code = smc_conn_create(smc, ini); reason_code = smc_conn_create(smc, ini);
...@@ -713,7 +713,7 @@ static int smc_connect_ism(struct smc_sock *smc, ...@@ -713,7 +713,7 @@ static int smc_connect_ism(struct smc_sock *smc,
ini->is_smcd = true; ini->is_smcd = true;
ini->ism_peer_gid = aclc->d0.gid; ini->ism_peer_gid = aclc->d0.gid;
ini->first_contact_peer = aclc->hdr.flag; ini->first_contact_peer = aclc->hdr.typev2 & SMC_FIRST_CONTACT_MASK;
/* there is only one lgr role for SMC-D; use server lock */ /* there is only one lgr role for SMC-D; use server lock */
mutex_lock(&smc_server_lgr_pending); mutex_lock(&smc_server_lgr_pending);
...@@ -804,9 +804,9 @@ static int __smc_connect(struct smc_sock *smc) ...@@ -804,9 +804,9 @@ static int __smc_connect(struct smc_sock *smc)
} }
/* depending on previous steps, connect using rdma or ism */ /* depending on previous steps, connect using rdma or ism */
if (rdma_supported && aclc.hdr.path == SMC_TYPE_R) if (rdma_supported && aclc.hdr.typev1 == SMC_TYPE_R)
rc = smc_connect_rdma(smc, &aclc, &ini); rc = smc_connect_rdma(smc, &aclc, &ini);
else if (ism_supported && aclc.hdr.path == SMC_TYPE_D) else if (ism_supported && aclc.hdr.typev1 == SMC_TYPE_D)
rc = smc_connect_ism(smc, &aclc, &ini); rc = smc_connect_ism(smc, &aclc, &ini);
else else
rc = SMC_CLC_DECL_MODEUNSUPP; rc = SMC_CLC_DECL_MODEUNSUPP;
...@@ -1316,7 +1316,7 @@ static void smc_listen_work(struct work_struct *work) ...@@ -1316,7 +1316,7 @@ static void smc_listen_work(struct work_struct *work)
smc_tx_init(new_smc); smc_tx_init(new_smc);
/* check if ISM is available */ /* check if ISM is available */
if (pclc->hdr.path == SMC_TYPE_D || pclc->hdr.path == SMC_TYPE_B) { if (pclc->hdr.typev1 == SMC_TYPE_D || pclc->hdr.typev1 == SMC_TYPE_B) {
struct smc_clc_msg_smcd *pclc_smcd = smc_get_clc_msg_smcd(pclc); struct smc_clc_msg_smcd *pclc_smcd = smc_get_clc_msg_smcd(pclc);
ini.is_smcd = true; /* prepare ISM check */ ini.is_smcd = true; /* prepare ISM check */
...@@ -1326,7 +1326,7 @@ static void smc_listen_work(struct work_struct *work) ...@@ -1326,7 +1326,7 @@ static void smc_listen_work(struct work_struct *work)
rc = smc_listen_ism_init(new_smc, pclc, &ini); rc = smc_listen_ism_init(new_smc, pclc, &ini);
if (!rc) if (!rc)
ism_supported = true; ism_supported = true;
else if (pclc->hdr.path == SMC_TYPE_D) else if (pclc->hdr.typev1 == SMC_TYPE_D)
goto out_unlock; /* skip RDMA and decline */ goto out_unlock; /* skip RDMA and decline */
} }
...@@ -1339,7 +1339,7 @@ static void smc_listen_work(struct work_struct *work) ...@@ -1339,7 +1339,7 @@ static void smc_listen_work(struct work_struct *work)
rc = smc_find_rdma_device(new_smc, &ini); rc = smc_find_rdma_device(new_smc, &ini);
if (rc) { if (rc) {
/* no RDMA device found */ /* no RDMA device found */
if (pclc->hdr.path == SMC_TYPE_B) if (pclc->hdr.typev1 == SMC_TYPE_B)
/* neither ISM nor RDMA device found */ /* neither ISM nor RDMA device found */
rc = SMC_CLC_DECL_NOSMCDEV; rc = SMC_CLC_DECL_NOSMCDEV;
goto out_unlock; goto out_unlock;
......
...@@ -64,12 +64,12 @@ static bool smc_clc_msg_hdr_valid(struct smc_clc_msg_hdr *clcm, bool check_trl) ...@@ -64,12 +64,12 @@ static bool smc_clc_msg_hdr_valid(struct smc_clc_msg_hdr *clcm, bool check_trl)
break; break;
case SMC_CLC_ACCEPT: case SMC_CLC_ACCEPT:
case SMC_CLC_CONFIRM: case SMC_CLC_CONFIRM:
if (clcm->path != SMC_TYPE_R && clcm->path != SMC_TYPE_D) if (clcm->typev1 != SMC_TYPE_R && clcm->typev1 != SMC_TYPE_D)
return false; return false;
clc = (struct smc_clc_msg_accept_confirm *)clcm; clc = (struct smc_clc_msg_accept_confirm *)clcm;
if ((clcm->path == SMC_TYPE_R && if ((clcm->typev1 == SMC_TYPE_R &&
ntohs(clc->hdr.length) != SMCR_CLC_ACCEPT_CONFIRM_LEN) || ntohs(clc->hdr.length) != SMCR_CLC_ACCEPT_CONFIRM_LEN) ||
(clcm->path == SMC_TYPE_D && (clcm->typev1 == SMC_TYPE_D &&
ntohs(clc->hdr.length) != SMCD_CLC_ACCEPT_CONFIRM_LEN)) ntohs(clc->hdr.length) != SMCD_CLC_ACCEPT_CONFIRM_LEN))
return false; return false;
trl = (struct smc_clc_msg_trail *) trl = (struct smc_clc_msg_trail *)
...@@ -327,7 +327,7 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen, ...@@ -327,7 +327,7 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen,
goto out; goto out;
} }
if (clcm->type == SMC_CLC_PROPOSAL && clcm->path == SMC_TYPE_N) if (clcm->type == SMC_CLC_PROPOSAL && clcm->typev1 == SMC_TYPE_N)
reason_code = SMC_CLC_DECL_VERSMISMAT; /* just V2 offered */ reason_code = SMC_CLC_DECL_VERSMISMAT; /* just V2 offered */
/* receive the complete CLC message */ /* receive the complete CLC message */
...@@ -365,7 +365,8 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen, ...@@ -365,7 +365,8 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen,
dclc = (struct smc_clc_msg_decline *)clcm; dclc = (struct smc_clc_msg_decline *)clcm;
reason_code = SMC_CLC_DECL_PEERDECL; reason_code = SMC_CLC_DECL_PEERDECL;
smc->peer_diagnosis = ntohl(dclc->peer_diagnosis); smc->peer_diagnosis = ntohl(dclc->peer_diagnosis);
if (((struct smc_clc_msg_decline *)buf)->hdr.flag) { if (((struct smc_clc_msg_decline *)buf)->hdr.typev2 &
SMC_FIRST_CONTACT_MASK) {
smc->conn.lgr->sync_err = 1; smc->conn.lgr->sync_err = 1;
smc_lgr_terminate_sched(smc->conn.lgr); smc_lgr_terminate_sched(smc->conn.lgr);
} }
...@@ -389,7 +390,8 @@ int smc_clc_send_decline(struct smc_sock *smc, u32 peer_diag_info) ...@@ -389,7 +390,8 @@ int smc_clc_send_decline(struct smc_sock *smc, u32 peer_diag_info)
dclc.hdr.type = SMC_CLC_DECLINE; dclc.hdr.type = SMC_CLC_DECLINE;
dclc.hdr.length = htons(sizeof(struct smc_clc_msg_decline)); dclc.hdr.length = htons(sizeof(struct smc_clc_msg_decline));
dclc.hdr.version = SMC_V1; dclc.hdr.version = SMC_V1;
dclc.hdr.flag = (peer_diag_info == SMC_CLC_DECL_SYNCERR) ? 1 : 0; dclc.hdr.typev2 = (peer_diag_info == SMC_CLC_DECL_SYNCERR) ?
SMC_FIRST_CONTACT_MASK : 0;
if ((!smc->conn.lgr || !smc->conn.lgr->is_smcd) && if ((!smc->conn.lgr || !smc->conn.lgr->is_smcd) &&
smc_ib_is_valid_local_systemid()) smc_ib_is_valid_local_systemid())
memcpy(dclc.id_for_peer, local_systemid, memcpy(dclc.id_for_peer, local_systemid,
...@@ -447,7 +449,7 @@ int smc_clc_send_proposal(struct smc_sock *smc, int smc_type, ...@@ -447,7 +449,7 @@ int smc_clc_send_proposal(struct smc_sock *smc, int smc_type,
sizeof(SMC_EYECATCHER)); sizeof(SMC_EYECATCHER));
pclc_base->hdr.type = SMC_CLC_PROPOSAL; pclc_base->hdr.type = SMC_CLC_PROPOSAL;
pclc_base->hdr.version = SMC_V1; /* SMC version */ pclc_base->hdr.version = SMC_V1; /* SMC version */
pclc_base->hdr.path = smc_type; pclc_base->hdr.typev1 = smc_type;
if (smc_type == SMC_TYPE_R || smc_type == SMC_TYPE_B) { if (smc_type == SMC_TYPE_R || smc_type == SMC_TYPE_B) {
/* add SMC-R specifics */ /* add SMC-R specifics */
memcpy(pclc_base->lcl.id_for_peer, local_systemid, memcpy(pclc_base->lcl.id_for_peer, local_systemid,
...@@ -509,12 +511,12 @@ static int smc_clc_send_confirm_accept(struct smc_sock *smc, ...@@ -509,12 +511,12 @@ static int smc_clc_send_confirm_accept(struct smc_sock *smc,
/* send SMC Confirm CLC msg */ /* send SMC Confirm CLC msg */
clc->hdr.version = SMC_V1; /* SMC version */ clc->hdr.version = SMC_V1; /* SMC version */
if (first_contact) if (first_contact)
clc->hdr.flag = 1; clc->hdr.typev2 |= SMC_FIRST_CONTACT_MASK;
if (conn->lgr->is_smcd) { if (conn->lgr->is_smcd) {
/* SMC-D specific settings */ /* SMC-D specific settings */
memcpy(clc->hdr.eyecatcher, SMCD_EYECATCHER, memcpy(clc->hdr.eyecatcher, SMCD_EYECATCHER,
sizeof(SMCD_EYECATCHER)); sizeof(SMCD_EYECATCHER));
clc->hdr.path = SMC_TYPE_D; clc->hdr.typev1 = SMC_TYPE_D;
clc->hdr.length = htons(SMCD_CLC_ACCEPT_CONFIRM_LEN); clc->hdr.length = htons(SMCD_CLC_ACCEPT_CONFIRM_LEN);
clc->d0.gid = conn->lgr->smcd->local_gid; clc->d0.gid = conn->lgr->smcd->local_gid;
clc->d0.token = conn->rmb_desc->token; clc->d0.token = conn->rmb_desc->token;
...@@ -530,7 +532,7 @@ static int smc_clc_send_confirm_accept(struct smc_sock *smc, ...@@ -530,7 +532,7 @@ static int smc_clc_send_confirm_accept(struct smc_sock *smc,
link = conn->lnk; link = conn->lnk;
memcpy(clc->hdr.eyecatcher, SMC_EYECATCHER, memcpy(clc->hdr.eyecatcher, SMC_EYECATCHER,
sizeof(SMC_EYECATCHER)); sizeof(SMC_EYECATCHER));
clc->hdr.path = SMC_TYPE_R; clc->hdr.typev1 = SMC_TYPE_R;
clc->hdr.length = htons(SMCR_CLC_ACCEPT_CONFIRM_LEN); clc->hdr.length = htons(SMCR_CLC_ACCEPT_CONFIRM_LEN);
memcpy(clc->r0.lcl.id_for_peer, local_systemid, memcpy(clc->r0.lcl.id_for_peer, local_systemid,
sizeof(local_systemid)); sizeof(local_systemid));
......
...@@ -54,19 +54,19 @@ ...@@ -54,19 +54,19 @@
#define SMC_CLC_DECL_ERR_RDYLNK 0x09990002 /* ib ready link failed */ #define SMC_CLC_DECL_ERR_RDYLNK 0x09990002 /* ib ready link failed */
#define SMC_CLC_DECL_ERR_REGRMB 0x09990003 /* reg rmb failed */ #define SMC_CLC_DECL_ERR_REGRMB 0x09990003 /* reg rmb failed */
#define SMC_FIRST_CONTACT_MASK 0b10 /* first contact bit within typev2 */
struct smc_clc_msg_hdr { /* header1 of clc messages */ struct smc_clc_msg_hdr { /* header1 of clc messages */
u8 eyecatcher[4]; /* eye catcher */ u8 eyecatcher[4]; /* eye catcher */
u8 type; /* proposal / accept / confirm / decline */ u8 type; /* proposal / accept / confirm / decline */
__be16 length; __be16 length;
#if defined(__BIG_ENDIAN_BITFIELD) #if defined(__BIG_ENDIAN_BITFIELD)
u8 version : 4, u8 version : 4,
flag : 1, typev2 : 2,
rsvd : 1, typev1 : 2;
path : 2;
#elif defined(__LITTLE_ENDIAN_BITFIELD) #elif defined(__LITTLE_ENDIAN_BITFIELD)
u8 path : 2, u8 typev1 : 2,
rsvd : 1, typev2 : 2,
flag : 1,
version : 4; version : 4;
#endif #endif
} __packed; /* format defined in RFC7609 */ } __packed; /* format defined in RFC7609 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment