IB/hfi1: Pull FECN/BECN processing to a common place
There were multiple places where FECN/BECN processing was being done for the different types of QPs. All of that code was very similar, which meant that it could be pulled into a single function used by the different QP types. To retain the performance in the fastpath, the common code starts with an inline function, which only calls the slow path if the packet has any of the [FB]ECN bits set. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Mitko Haralanov <mitko.haralanov@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
这个提交包含在:
@@ -1583,6 +1583,22 @@ static inline struct hfi1_ibport *to_iport(struct ib_device *ibdev, u8 port)
|
||||
return &dd->pport[pidx].ibport_data;
|
||||
}
|
||||
|
||||
void hfi1_process_ecn_slowpath(struct rvt_qp *qp, struct hfi1_packet *pkt,
|
||||
bool do_cnp);
|
||||
static inline bool process_ecn(struct rvt_qp *qp, struct hfi1_packet *pkt,
|
||||
bool do_cnp)
|
||||
{
|
||||
struct hfi1_other_headers *ohdr = pkt->ohdr;
|
||||
u32 bth1;
|
||||
|
||||
bth1 = be32_to_cpu(ohdr->bth[1]);
|
||||
if (unlikely(bth1 & (HFI1_BECN_SMASK | HFI1_FECN_SMASK))) {
|
||||
hfi1_process_ecn_slowpath(qp, pkt, do_cnp);
|
||||
return bth1 & HFI1_FECN_SMASK;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the indexed PKEY from the port PKEY table.
|
||||
*/
|
||||
|
在新工单中引用
屏蔽一个用户