Commit 78d3633b authored by Mike Marciniszyn's avatar Mike Marciniszyn Committed by Jason Gunthorpe

IB/hfi1: Remove blind constants from 16B update

These values were introduced as part of the 16B code to
account for the varying size of the LRH between the differing
packet formats.

Replace the blind constants with defines based on FIELD_SIZEOF()
calls.

Fixes: 5b6cabb0 ("IB/hfi1: Add 16B RC/UC support")
Reviewed-by: default avatarDon Hiatt <don.hiatt@intel.com>
Signed-off-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 07190076
...@@ -1499,8 +1499,10 @@ static int hfi1_setup_bypass_packet(struct hfi1_packet *packet) ...@@ -1499,8 +1499,10 @@ static int hfi1_setup_bypass_packet(struct hfi1_packet *packet)
/* Query commonly used fields from packet header */ /* Query commonly used fields from packet header */
packet->opcode = ib_bth_get_opcode(packet->ohdr); packet->opcode = ib_bth_get_opcode(packet->ohdr);
packet->hlen = hdr_len_by_opcode[packet->opcode] + 8 + grh_len; /* hdr_len_by_opcode already has an IB LRH factored in */
packet->payload = packet->ebuf + packet->hlen - (4 * sizeof(u32)); packet->hlen = hdr_len_by_opcode[packet->opcode] +
(LRH_16B_BYTES - LRH_9B_BYTES) + grh_len;
packet->payload = packet->ebuf + packet->hlen - LRH_16B_BYTES;
packet->slid = hfi1_16B_get_slid(packet->hdr); packet->slid = hfi1_16B_get_slid(packet->hdr);
packet->dlid = hfi1_16B_get_dlid(packet->hdr); packet->dlid = hfi1_16B_get_dlid(packet->hdr);
if (unlikely(hfi1_is_16B_mcast(packet->dlid))) if (unlikely(hfi1_is_16B_mcast(packet->dlid)))
......
...@@ -758,8 +758,6 @@ static inline void hfi1_make_ruc_header_16B(struct rvt_qp *qp, ...@@ -758,8 +758,6 @@ static inline void hfi1_make_ruc_header_16B(struct rvt_qp *qp,
struct ib_grh *grh; struct ib_grh *grh;
struct ib_global_route *grd = struct ib_global_route *grd =
rdma_ah_retrieve_grh(&qp->remote_ah_attr); rdma_ah_retrieve_grh(&qp->remote_ah_attr);
int hdrwords;
/* /*
* Ensure OPA GIDs are transformed to IB gids * Ensure OPA GIDs are transformed to IB gids
* before creating the GRH. * before creating the GRH.
...@@ -768,9 +766,10 @@ static inline void hfi1_make_ruc_header_16B(struct rvt_qp *qp, ...@@ -768,9 +766,10 @@ static inline void hfi1_make_ruc_header_16B(struct rvt_qp *qp,
grd->sgid_index = 0; grd->sgid_index = 0;
grh = &ps->s_txreq->phdr.hdr.opah.u.l.grh; grh = &ps->s_txreq->phdr.hdr.opah.u.l.grh;
l4 = OPA_16B_L4_IB_GLOBAL; l4 = OPA_16B_L4_IB_GLOBAL;
hdrwords = ps->s_txreq->hdr_dwords - 4; ps->s_txreq->hdr_dwords +=
ps->s_txreq->hdr_dwords += hfi1_make_grh(ibp, grh, grd, hfi1_make_grh(ibp, grh, grd,
hdrwords, nwords); ps->s_txreq->hdr_dwords - LRH_16B_DWORDS,
nwords);
middle = 0; middle = 0;
} }
...@@ -824,13 +823,13 @@ static inline void hfi1_make_ruc_header_9B(struct rvt_qp *qp, ...@@ -824,13 +823,13 @@ static inline void hfi1_make_ruc_header_9B(struct rvt_qp *qp,
if (unlikely(rdma_ah_get_ah_flags(&qp->remote_ah_attr) & IB_AH_GRH)) { if (unlikely(rdma_ah_get_ah_flags(&qp->remote_ah_attr) & IB_AH_GRH)) {
struct ib_grh *grh = &ps->s_txreq->phdr.hdr.ibh.u.l.grh; struct ib_grh *grh = &ps->s_txreq->phdr.hdr.ibh.u.l.grh;
int hdrwords = ps->s_txreq->hdr_dwords - 2;
lrh0 = HFI1_LRH_GRH; lrh0 = HFI1_LRH_GRH;
ps->s_txreq->hdr_dwords += ps->s_txreq->hdr_dwords +=
hfi1_make_grh(ibp, grh, hfi1_make_grh(ibp, grh,
rdma_ah_read_grh(&qp->remote_ah_attr), rdma_ah_read_grh(&qp->remote_ah_attr),
hdrwords, nwords); ps->s_txreq->hdr_dwords - LRH_9B_DWORDS,
nwords);
middle = 0; middle = 0;
} }
lrh0 |= (priv->s_sc & 0xf) << 12 | lrh0 |= (priv->s_sc & 0xf) << 12 |
......
...@@ -348,7 +348,8 @@ void hfi1_make_ud_req_9B(struct rvt_qp *qp, struct hfi1_pkt_state *ps, ...@@ -348,7 +348,8 @@ void hfi1_make_ud_req_9B(struct rvt_qp *qp, struct hfi1_pkt_state *ps,
grh = &ps->s_txreq->phdr.hdr.ibh.u.l.grh; grh = &ps->s_txreq->phdr.hdr.ibh.u.l.grh;
ps->s_txreq->hdr_dwords += ps->s_txreq->hdr_dwords +=
hfi1_make_grh(ibp, grh, rdma_ah_read_grh(ah_attr), hfi1_make_grh(ibp, grh, rdma_ah_read_grh(ah_attr),
ps->s_txreq->hdr_dwords - 2, nwords); ps->s_txreq->hdr_dwords - LRH_9B_DWORDS,
nwords);
lrh0 = HFI1_LRH_GRH; lrh0 = HFI1_LRH_GRH;
ohdr = &ps->s_txreq->phdr.hdr.ibh.u.l.oth; ohdr = &ps->s_txreq->phdr.hdr.ibh.u.l.oth;
} else { } else {
...@@ -428,8 +429,10 @@ void hfi1_make_ud_req_16B(struct rvt_qp *qp, struct hfi1_pkt_state *ps, ...@@ -428,8 +429,10 @@ void hfi1_make_ud_req_16B(struct rvt_qp *qp, struct hfi1_pkt_state *ps,
grd->sgid_index = 0; grd->sgid_index = 0;
} }
grh = &ps->s_txreq->phdr.hdr.opah.u.l.grh; grh = &ps->s_txreq->phdr.hdr.opah.u.l.grh;
ps->s_txreq->hdr_dwords += hfi1_make_grh(ibp, grh, grd, ps->s_txreq->hdr_dwords += hfi1_make_grh(
ps->s_txreq->hdr_dwords - 4, nwords); ibp, grh, grd,
ps->s_txreq->hdr_dwords - LRH_16B_DWORDS,
nwords);
ohdr = &ps->s_txreq->phdr.hdr.opah.u.l.oth; ohdr = &ps->s_txreq->phdr.hdr.opah.u.l.oth;
l4 = OPA_16B_L4_IB_GLOBAL; l4 = OPA_16B_L4_IB_GLOBAL;
} else { } else {
...@@ -648,7 +651,8 @@ void return_cnp_16B(struct hfi1_ibport *ibp, struct rvt_qp *qp, ...@@ -648,7 +651,8 @@ void return_cnp_16B(struct hfi1_ibport *ibp, struct rvt_qp *qp,
struct ib_grh *grh = &hdr.u.l.grh; struct ib_grh *grh = &hdr.u.l.grh;
grh->version_tclass_flow = old_grh->version_tclass_flow; grh->version_tclass_flow = old_grh->version_tclass_flow;
grh->paylen = cpu_to_be16((hwords - 4 + nwords) << 2); grh->paylen = cpu_to_be16(
(hwords - LRH_16B_DWORDS + nwords) << 2);
grh->hop_limit = 0xff; grh->hop_limit = 0xff;
grh->sgid = old_grh->dgid; grh->sgid = old_grh->dgid;
grh->dgid = old_grh->sgid; grh->dgid = old_grh->sgid;
...@@ -702,7 +706,8 @@ void return_cnp(struct hfi1_ibport *ibp, struct rvt_qp *qp, u32 remote_qpn, ...@@ -702,7 +706,8 @@ void return_cnp(struct hfi1_ibport *ibp, struct rvt_qp *qp, u32 remote_qpn,
struct ib_grh *grh = &hdr.u.l.grh; struct ib_grh *grh = &hdr.u.l.grh;
grh->version_tclass_flow = old_grh->version_tclass_flow; grh->version_tclass_flow = old_grh->version_tclass_flow;
grh->paylen = cpu_to_be16((hwords - 2 + SIZE_OF_CRC) << 2); grh->paylen = cpu_to_be16(
(hwords - LRH_9B_DWORDS + SIZE_OF_CRC) << 2);
grh->hop_limit = 0xff; grh->hop_limit = 0xff;
grh->sgid = old_grh->dgid; grh->sgid = old_grh->dgid;
grh->dgid = old_grh->sgid; grh->dgid = old_grh->sgid;
......
...@@ -105,6 +105,11 @@ enum { ...@@ -105,6 +105,11 @@ enum {
HFI1_HAS_GRH = (1 << 0), HFI1_HAS_GRH = (1 << 0),
}; };
#define LRH_16B_BYTES (FIELD_SIZEOF(struct hfi1_16b_header, lrh))
#define LRH_16B_DWORDS (LRH_16B_BYTES / sizeof(u32))
#define LRH_9B_BYTES (FIELD_SIZEOF(struct ib_header, lrh))
#define LRH_9B_DWORDS (LRH_9B_BYTES / sizeof(u32))
struct hfi1_16b_header { struct hfi1_16b_header {
u32 lrh[4]; u32 lrh[4];
union { union {
......
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