Merge branch 'wip/dl-for-rc' into wip/dl-for-next
The fix for IB port statistics initialization ("IB/core: Fix querying total rdma stats") is needed before we take a follow-on patch to for-next. Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
@@ -14452,7 +14452,7 @@ void hfi1_deinit_vnic_rsm(struct hfi1_devdata *dd)
|
||||
clear_rcvctrl(dd, RCV_CTRL_RCV_RSM_ENABLE_SMASK);
|
||||
}
|
||||
|
||||
static void init_rxe(struct hfi1_devdata *dd)
|
||||
static int init_rxe(struct hfi1_devdata *dd)
|
||||
{
|
||||
struct rsm_map_table *rmt;
|
||||
u64 val;
|
||||
@@ -14461,6 +14461,9 @@ static void init_rxe(struct hfi1_devdata *dd)
|
||||
write_csr(dd, RCV_ERR_MASK, ~0ull);
|
||||
|
||||
rmt = alloc_rsm_map_table(dd);
|
||||
if (!rmt)
|
||||
return -ENOMEM;
|
||||
|
||||
/* set up QOS, including the QPN map table */
|
||||
init_qos(dd, rmt);
|
||||
init_fecn_handling(dd, rmt);
|
||||
@@ -14487,6 +14490,7 @@ static void init_rxe(struct hfi1_devdata *dd)
|
||||
val |= ((4ull & RCV_BYPASS_HDR_SIZE_MASK) <<
|
||||
RCV_BYPASS_HDR_SIZE_SHIFT);
|
||||
write_csr(dd, RCV_BYPASS, val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void init_other(struct hfi1_devdata *dd)
|
||||
@@ -15024,7 +15028,10 @@ int hfi1_init_dd(struct hfi1_devdata *dd)
|
||||
goto bail_cleanup;
|
||||
|
||||
/* set initial RXE CSRs */
|
||||
init_rxe(dd);
|
||||
ret = init_rxe(dd);
|
||||
if (ret)
|
||||
goto bail_cleanup;
|
||||
|
||||
/* set initial TXE CSRs */
|
||||
init_txe(dd);
|
||||
/* set initial non-RXE, non-TXE CSRs */
|
||||
|
@@ -1835,7 +1835,6 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah)
|
||||
cmp_psn(qp->s_sending_psn, qp->s_sending_hpsn) <= 0)
|
||||
break;
|
||||
trdma_clean_swqe(qp, wqe);
|
||||
rvt_qp_wqe_unreserve(qp, wqe);
|
||||
trace_hfi1_qp_send_completion(qp, wqe, qp->s_last);
|
||||
rvt_qp_complete_swqe(qp,
|
||||
wqe,
|
||||
@@ -1882,7 +1881,6 @@ struct rvt_swqe *do_rc_completion(struct rvt_qp *qp,
|
||||
if (cmp_psn(wqe->lpsn, qp->s_sending_psn) < 0 ||
|
||||
cmp_psn(qp->s_sending_psn, qp->s_sending_hpsn) > 0) {
|
||||
trdma_clean_swqe(qp, wqe);
|
||||
rvt_qp_wqe_unreserve(qp, wqe);
|
||||
trace_hfi1_qp_send_completion(qp, wqe, qp->s_last);
|
||||
rvt_qp_complete_swqe(qp,
|
||||
wqe,
|
||||
|
@@ -1620,6 +1620,7 @@ static int hfi1_kern_exp_rcv_alloc_flows(struct tid_rdma_request *req,
|
||||
flows[i].req = req;
|
||||
flows[i].npagesets = 0;
|
||||
flows[i].pagesets[0].mapped = 0;
|
||||
flows[i].resync_npkts = 0;
|
||||
}
|
||||
req->flows = flows;
|
||||
return 0;
|
||||
@@ -1673,34 +1674,6 @@ static struct tid_rdma_flow *find_flow_ib(struct tid_rdma_request *req,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct tid_rdma_flow *
|
||||
__find_flow_ranged(struct tid_rdma_request *req, u16 head, u16 tail,
|
||||
u32 psn, u16 *fidx)
|
||||
{
|
||||
for ( ; CIRC_CNT(head, tail, MAX_FLOWS);
|
||||
tail = CIRC_NEXT(tail, MAX_FLOWS)) {
|
||||
struct tid_rdma_flow *flow = &req->flows[tail];
|
||||
u32 spsn, lpsn;
|
||||
|
||||
spsn = full_flow_psn(flow, flow->flow_state.spsn);
|
||||
lpsn = full_flow_psn(flow, flow->flow_state.lpsn);
|
||||
|
||||
if (cmp_psn(psn, spsn) >= 0 && cmp_psn(psn, lpsn) <= 0) {
|
||||
if (fidx)
|
||||
*fidx = tail;
|
||||
return flow;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct tid_rdma_flow *find_flow(struct tid_rdma_request *req,
|
||||
u32 psn, u16 *fidx)
|
||||
{
|
||||
return __find_flow_ranged(req, req->setup_head, req->clear_tail, psn,
|
||||
fidx);
|
||||
}
|
||||
|
||||
/* TID RDMA READ functions */
|
||||
u32 hfi1_build_tid_rdma_read_packet(struct rvt_swqe *wqe,
|
||||
struct ib_other_headers *ohdr, u32 *bth1,
|
||||
@@ -2788,19 +2761,7 @@ static bool handle_read_kdeth_eflags(struct hfi1_ctxtdata *rcd,
|
||||
* to prevent continuous Flow Sequence errors for any
|
||||
* packets that could be still in the fabric.
|
||||
*/
|
||||
flow = find_flow(req, psn, NULL);
|
||||
if (!flow) {
|
||||
/*
|
||||
* We can't find the IB PSN matching the
|
||||
* received KDETH PSN. The only thing we can
|
||||
* do at this point is report the error to
|
||||
* the QP.
|
||||
*/
|
||||
hfi1_kern_read_tid_flow_free(qp);
|
||||
spin_unlock(&qp->s_lock);
|
||||
rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR);
|
||||
return ret;
|
||||
}
|
||||
flow = &req->flows[req->clear_tail];
|
||||
if (priv->s_flags & HFI1_R_TID_SW_PSN) {
|
||||
diff = cmp_psn(psn,
|
||||
flow->flow_state.r_next_psn);
|
||||
|
Reference in New Issue
Block a user