Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

RDMA/iw_cxgb4: only read markers_enabled mod param once

markers_enabled should be read only once during MPA negotiation.
The present code does read markers_enabled twice during negotiation
which results in setting wrong recv/xmit markers if the markers_enabled is
changed in the middle of negotiation.
With this change the markers_enabled is read only once during MPA
negotiation. recv markers are set based on markers enabled module
parameter and xmit markers are set based on markers flag from the
MPA_START_REQ/MPA_START_REP.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>

authored by

Hariprasad S and committed by
Doug Ledford
3d4e7994 5edb5649

+18 -6
+18 -6
drivers/infiniband/hw/cxgb4/cm.c
··· 992 992 993 993 mpa = (struct mpa_message *)(req + 1); 994 994 memcpy(mpa->key, MPA_KEY_REQ, sizeof(mpa->key)); 995 - mpa->flags = (crc_enabled ? MPA_CRC : 0) | 996 - (markers_enabled ? MPA_MARKERS : 0) | 997 - (mpa_rev_to_use == 2 ? MPA_ENHANCED_RDMA_CONN : 0); 995 + 996 + mpa->flags = 0; 997 + if (crc_enabled) 998 + mpa->flags |= MPA_CRC; 999 + if (markers_enabled) { 1000 + mpa->flags |= MPA_MARKERS; 1001 + ep->mpa_attr.recv_marker_enabled = 1; 1002 + } else { 1003 + ep->mpa_attr.recv_marker_enabled = 0; 1004 + } 1005 + if (mpa_rev_to_use == 2) 1006 + mpa->flags |= MPA_ENHANCED_RDMA_CONN; 1007 + 998 1008 mpa->private_data_size = htons(ep->plen); 999 1009 mpa->revision = mpa_rev_to_use; 1000 1010 if (mpa_rev_to_use == 1) { ··· 1179 1169 mpa = (struct mpa_message *)(req + 1); 1180 1170 memset(mpa, 0, sizeof(*mpa)); 1181 1171 memcpy(mpa->key, MPA_KEY_REP, sizeof(mpa->key)); 1182 - mpa->flags = (ep->mpa_attr.crc_enabled ? MPA_CRC : 0) | 1183 - (markers_enabled ? MPA_MARKERS : 0); 1172 + mpa->flags = 0; 1173 + if (ep->mpa_attr.crc_enabled) 1174 + mpa->flags |= MPA_CRC; 1175 + if (ep->mpa_attr.recv_marker_enabled) 1176 + mpa->flags |= MPA_MARKERS; 1184 1177 mpa->revision = ep->mpa_attr.version; 1185 1178 mpa->private_data_size = htons(plen); 1186 1179 ··· 1568 1555 */ 1569 1556 __state_set(&ep->com, FPDU_MODE); 1570 1557 ep->mpa_attr.crc_enabled = (mpa->flags & MPA_CRC) | crc_enabled ? 1 : 0; 1571 - ep->mpa_attr.recv_marker_enabled = markers_enabled; 1572 1558 ep->mpa_attr.xmit_marker_enabled = mpa->flags & MPA_MARKERS ? 1 : 0; 1573 1559 ep->mpa_attr.version = mpa->revision; 1574 1560 ep->mpa_attr.p2p_type = FW_RI_INIT_P2PTYPE_DISABLED;