mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 05:24:12 +08:00
IB/hfi1: Create inline to get extended headers
This paves the way for another patch that reacts to a
flush sdma completion for RC.
Fixes: 81cd3891f0
("IB/hfi1: Add support for 16B Management Packets")
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
3230f4a8d4
commit
9755f72496
@ -539,6 +539,37 @@ static inline void hfi1_16B_set_qpn(struct opa_16b_mgmt *mgmt,
|
|||||||
mgmt->src_qpn = cpu_to_be32(src_qp & OPA_16B_MGMT_QPN_MASK);
|
mgmt->src_qpn = cpu_to_be32(src_qp & OPA_16B_MGMT_QPN_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hfi1_get_rc_ohdr - get extended header
|
||||||
|
* @opah - the opaheader
|
||||||
|
*/
|
||||||
|
static inline struct ib_other_headers *
|
||||||
|
hfi1_get_rc_ohdr(struct hfi1_opa_header *opah)
|
||||||
|
{
|
||||||
|
struct ib_other_headers *ohdr;
|
||||||
|
struct ib_header *hdr = NULL;
|
||||||
|
struct hfi1_16b_header *hdr_16b = NULL;
|
||||||
|
|
||||||
|
/* Find out where the BTH is */
|
||||||
|
if (opah->hdr_type == HFI1_PKT_TYPE_9B) {
|
||||||
|
hdr = &opah->ibh;
|
||||||
|
if (ib_get_lnh(hdr) == HFI1_LRH_BTH)
|
||||||
|
ohdr = &hdr->u.oth;
|
||||||
|
else
|
||||||
|
ohdr = &hdr->u.l.oth;
|
||||||
|
} else {
|
||||||
|
u8 l4;
|
||||||
|
|
||||||
|
hdr_16b = &opah->opah;
|
||||||
|
l4 = hfi1_16B_get_l4(hdr_16b);
|
||||||
|
if (l4 == OPA_16B_L4_IB_LOCAL)
|
||||||
|
ohdr = &hdr_16b->u.oth;
|
||||||
|
else
|
||||||
|
ohdr = &hdr_16b->u.l.oth;
|
||||||
|
}
|
||||||
|
return ohdr;
|
||||||
|
}
|
||||||
|
|
||||||
struct rvt_sge_state;
|
struct rvt_sge_state;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1709,8 +1709,6 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah)
|
|||||||
struct ib_other_headers *ohdr;
|
struct ib_other_headers *ohdr;
|
||||||
struct hfi1_qp_priv *priv = qp->priv;
|
struct hfi1_qp_priv *priv = qp->priv;
|
||||||
struct rvt_swqe *wqe;
|
struct rvt_swqe *wqe;
|
||||||
struct ib_header *hdr = NULL;
|
|
||||||
struct hfi1_16b_header *hdr_16b = NULL;
|
|
||||||
u32 opcode, head, tail;
|
u32 opcode, head, tail;
|
||||||
u32 psn;
|
u32 psn;
|
||||||
struct tid_rdma_request *req;
|
struct tid_rdma_request *req;
|
||||||
@ -1719,24 +1717,7 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah)
|
|||||||
if (!(ib_rvt_state_ops[qp->state] & RVT_SEND_OR_FLUSH_OR_RECV_OK))
|
if (!(ib_rvt_state_ops[qp->state] & RVT_SEND_OR_FLUSH_OR_RECV_OK))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Find out where the BTH is */
|
ohdr = hfi1_get_rc_ohdr(opah);
|
||||||
if (priv->hdr_type == HFI1_PKT_TYPE_9B) {
|
|
||||||
hdr = &opah->ibh;
|
|
||||||
if (ib_get_lnh(hdr) == HFI1_LRH_BTH)
|
|
||||||
ohdr = &hdr->u.oth;
|
|
||||||
else
|
|
||||||
ohdr = &hdr->u.l.oth;
|
|
||||||
} else {
|
|
||||||
u8 l4;
|
|
||||||
|
|
||||||
hdr_16b = &opah->opah;
|
|
||||||
l4 = hfi1_16B_get_l4(hdr_16b);
|
|
||||||
if (l4 == OPA_16B_L4_IB_LOCAL)
|
|
||||||
ohdr = &hdr_16b->u.oth;
|
|
||||||
else
|
|
||||||
ohdr = &hdr_16b->u.l.oth;
|
|
||||||
}
|
|
||||||
|
|
||||||
opcode = ib_bth_get_opcode(ohdr);
|
opcode = ib_bth_get_opcode(ohdr);
|
||||||
if ((opcode >= OP(RDMA_READ_RESPONSE_FIRST) &&
|
if ((opcode >= OP(RDMA_READ_RESPONSE_FIRST) &&
|
||||||
opcode <= OP(ATOMIC_ACKNOWLEDGE)) ||
|
opcode <= OP(ATOMIC_ACKNOWLEDGE)) ||
|
||||||
|
Loading…
Reference in New Issue
Block a user