Lines Matching full:qp
41 pr_warn("siw: %s: [QP %u]: bogus addr: %p, %p\n", in siw_rx_umem()
65 pr_warn("siw: [QP %u]: %s, len %d, page %p, rv %d\n", in siw_rx_umem()
112 pr_warn("siw: [QP %u]: %s, len %d, kva 0x%p, rv %d\n", in siw_rx_kva()
191 pr_warn("siw: [QP %u]: rresp stag: %08x != %08x\n", in siw_rresp_check_ntoh()
197 pr_warn("siw: [QP %u]: rresp off: %016llx != %016llx\n", in siw_rresp_check_ntoh()
205 pr_warn("siw: [QP %u]: rresp len: %d != %d\n", in siw_rresp_check_ntoh()
244 pr_warn("siw: [QP %u]: write stag: %08x != %08x\n", in siw_write_check_ntoh()
251 pr_warn("siw: [QP %u]: write off: %016llx != %016llx\n", in siw_write_check_ntoh()
289 pr_warn("siw: [QP %u]: invalid ddp qn %d for send\n", in siw_send_check_ntoh()
295 pr_warn("siw: [QP %u]: send msn: %u != %u\n", in siw_send_check_ntoh()
302 pr_warn("siw: [QP %u], send mo: %u != %u\n", in siw_send_check_ntoh()
330 static struct siw_wqe *siw_rqe_get(struct siw_qp *qp) in siw_rqe_get() argument
338 srq = qp->srq; in siw_rqe_get()
346 if (unlikely(!qp->recvq)) in siw_rqe_get()
349 rqe = &qp->recvq[qp->rq_get % qp->attrs.rq_size]; in siw_rqe_get()
357 wqe = rx_wqe(&qp->rx_untagged); in siw_rqe_get()
377 siw_dbg_qp(qp, "too many sge's: %d\n", rqe->num_sge); in siw_rqe_get()
383 qp->rq_get++; in siw_rqe_get()
435 int siw_proc_send(struct siw_qp *qp) in siw_proc_send() argument
437 struct siw_rx_stream *srx = &qp->rx_stream; in siw_proc_send()
438 struct siw_rx_fpdu *frx = &qp->rx_untagged; in siw_proc_send()
445 wqe = siw_rqe_get(qp); in siw_proc_send()
447 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, in siw_proc_send()
458 siw_qp_event(qp, IB_EVENT_QP_FATAL); in siw_proc_send()
487 * check with QP's PD if no SRQ present, SRQ's PD otherwise in siw_proc_send()
489 pd = qp->srq == NULL ? qp->pd : qp->srq->base_srq.pd; in siw_proc_send()
494 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, in siw_proc_send()
498 siw_qp_event(qp, IB_EVENT_QP_ACCESS_ERR); in siw_proc_send()
507 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, in siw_proc_send()
545 int siw_proc_write(struct siw_qp *qp) in siw_proc_write() argument
547 struct siw_rx_stream *srx = &qp->rx_stream; in siw_proc_write()
548 struct siw_rx_fpdu *frx = &qp->rx_tagged; in siw_proc_write()
558 siw_qp_event(qp, IB_EVENT_QP_FATAL); in siw_proc_write()
567 rx_mem(frx) = siw_mem_id2obj(qp->sdev, srx->ddp_stag >> 8); in siw_proc_write()
569 siw_dbg_qp(qp, in siw_proc_write()
573 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, in siw_proc_write()
589 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, in siw_proc_write()
594 rv = siw_check_mem(qp->pd, mem, srx->ddp_to + srx->fpdu_part_rcvd, in siw_proc_write()
597 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, in siw_proc_write()
601 siw_qp_event(qp, IB_EVENT_QP_ACCESS_ERR); in siw_proc_write()
609 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, in siw_proc_write()
627 int siw_proc_rreq(struct siw_qp *qp) in siw_proc_rreq() argument
629 struct siw_rx_stream *srx = &qp->rx_stream; in siw_proc_rreq()
634 pr_warn("siw: [QP %u]: rreq with mpa len %d\n", qp_id(qp), in siw_proc_rreq()
656 static int siw_init_rresp(struct siw_qp *qp, struct siw_rx_stream *srx) in siw_init_rresp() argument
658 struct siw_wqe *tx_work = tx_wqe(qp); in siw_init_rresp()
672 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, in siw_init_rresp()
677 spin_lock_irqsave(&qp->sq_lock, flags); in siw_init_rresp()
679 if (unlikely(!qp->attrs.irq_size)) { in siw_init_rresp()
693 resp = irq_alloc_free(qp); in siw_init_rresp()
716 pr_warn("siw: [QP %u]: IRQ exceeded or null, size %d\n", in siw_init_rresp()
717 qp_id(qp), qp->attrs.irq_size); in siw_init_rresp()
719 siw_init_terminate(qp, TERM_ERROR_LAYER_RDMAP, in siw_init_rresp()
725 spin_unlock_irqrestore(&qp->sq_lock, flags); in siw_init_rresp()
728 rv = siw_sq_start(qp); in siw_init_rresp()
739 static int siw_orqe_start_rx(struct siw_qp *qp) in siw_orqe_start_rx() argument
744 if (unlikely(!qp->attrs.orq_size)) in siw_orqe_start_rx()
750 orqe = orq_get_current(qp); in siw_orqe_start_rx()
753 wqe = rx_wqe(&qp->rx_tagged); in siw_orqe_start_rx()
782 int siw_proc_rresp(struct siw_qp *qp) in siw_proc_rresp() argument
784 struct siw_rx_stream *srx = &qp->rx_stream; in siw_proc_rresp()
785 struct siw_rx_fpdu *frx = &qp->rx_tagged; in siw_proc_rresp()
793 pr_warn("siw: [QP %u]: proc RRESP: status %d, op %d\n", in siw_proc_rresp()
794 qp_id(qp), wqe->wr_status, wqe->sqe.opcode); in siw_proc_rresp()
801 rv = siw_orqe_start_rx(qp); in siw_proc_rresp()
803 pr_warn("siw: [QP %u]: ORQ empty, size %d\n", in siw_proc_rresp()
804 qp_id(qp), qp->attrs.orq_size); in siw_proc_rresp()
809 siw_qp_event(qp, IB_EVENT_QP_FATAL); in siw_proc_rresp()
814 pr_warn("siw: [QP %u]: resume RRESP: status %d\n", in siw_proc_rresp()
815 qp_id(qp), wqe->wr_status); in siw_proc_rresp()
830 rv = siw_check_sge(qp->pd, sge, mem, IB_ACCESS_LOCAL_WRITE, 0, in siw_proc_rresp()
833 siw_dbg_qp(qp, "target mem check: %d\n", rv); in siw_proc_rresp()
836 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, in siw_proc_rresp()
840 siw_qp_event(qp, IB_EVENT_QP_ACCESS_ERR); in siw_proc_rresp()
866 siw_init_terminate(qp, TERM_ERROR_LAYER_DDP, DDP_ETYPE_CATASTROPHIC, in siw_proc_rresp()
878 int siw_proc_terminate(struct siw_qp *qp) in siw_proc_terminate() argument
880 struct siw_rx_stream *srx = &qp->rx_stream; in siw_proc_terminate()
894 qp->rx_stream.ddp_msn[RDMAP_UNTAGGED_QN_TERMINATE] || in siw_proc_terminate()
935 siw_dbg_qp(qp, "TERM reports RDMAP hdr type %u, len %u (%s)\n", in siw_proc_terminate()
939 siw_dbg_qp(qp, "TERM reports DDP hdr type %u, len %u (%s)\n", in siw_proc_terminate()
951 static int siw_get_trailer(struct siw_qp *qp, struct siw_rx_stream *srx) in siw_get_trailer() argument
958 siw_dbg_qp(qp, "expected %d, available %d, pad %u\n", in siw_get_trailer()
983 crc_in, crc_own, qp->rx_stream.rdmap_op); in siw_get_trailer()
985 siw_init_terminate(qp, TERM_ERROR_LAYER_LLP, in siw_get_trailer()
998 struct siw_qp *qp = rx_qp(srx); in siw_get_hdr() local
1061 set_rx_fpdu_context(qp, opcode); in siw_get_hdr()
1062 frx = qp->rx_fpdu; in siw_get_hdr()
1116 set_rx_fpdu_context(qp, frx->prev_rdmap_op); in siw_get_hdr()
1129 static int siw_check_tx_fence(struct siw_qp *qp) in siw_check_tx_fence() argument
1131 struct siw_wqe *tx_waiting = tx_wqe(qp); in siw_check_tx_fence()
1136 spin_lock_irqsave(&qp->orq_lock, flags); in siw_check_tx_fence()
1139 rreq = orq_get_current(qp); in siw_check_tx_fence()
1142 qp->orq_get++; in siw_check_tx_fence()
1144 if (qp->tx_ctx.orq_fence) { in siw_check_tx_fence()
1146 pr_warn("siw: [QP %u]: fence resume: bad status %d\n", in siw_check_tx_fence()
1147 qp_id(qp), tx_waiting->wr_status); in siw_check_tx_fence()
1156 rreq = orq_get_free(qp); in siw_check_tx_fence()
1158 pr_warn("siw: [QP %u]: no ORQE\n", qp_id(qp)); in siw_check_tx_fence()
1164 qp->orq_put++; in siw_check_tx_fence()
1165 qp->tx_ctx.orq_fence = 0; in siw_check_tx_fence()
1168 } else if (siw_orq_empty(qp)) { in siw_check_tx_fence()
1173 qp->tx_ctx.orq_fence = 0; in siw_check_tx_fence()
1178 spin_unlock_irqrestore(&qp->orq_lock, flags); in siw_check_tx_fence()
1181 rv = siw_sq_start(qp); in siw_check_tx_fence()
1198 static int siw_rdmap_complete(struct siw_qp *qp, int error) in siw_rdmap_complete() argument
1200 struct siw_rx_stream *srx = &qp->rx_stream; in siw_rdmap_complete()
1201 struct siw_wqe *wqe = rx_wqe(qp->rx_fpdu); in siw_rdmap_complete()
1227 rv = siw_invalidate_stag(qp->pd, srx->inval_stag); in siw_rdmap_complete()
1230 qp, TERM_ERROR_LAYER_RDMAP, in siw_rdmap_complete()
1238 rv = siw_rqe_complete(qp, &wqe->rqe, wqe->processed, in siw_rdmap_complete()
1242 rv = siw_rqe_complete(qp, &wqe->rqe, wqe->processed, in siw_rdmap_complete()
1254 qp->rx_fpdu->first_ddp_seg) || error == -ENODATA) in siw_rdmap_complete()
1260 } else if (rdma_is_kernel_res(&qp->base_qp.res) && in siw_rdmap_complete()
1265 rv = siw_invalidate_stag(qp->pd, wqe->sqe.sge[0].lkey); in siw_rdmap_complete()
1267 siw_init_terminate(qp, TERM_ERROR_LAYER_RDMAP, in siw_rdmap_complete()
1281 rv = siw_sqe_complete(qp, &wqe->sqe, wqe->processed, in siw_rdmap_complete()
1286 rv = siw_check_tx_fence(qp); in siw_rdmap_complete()
1289 if (qp->attrs.orq_size) in siw_rdmap_complete()
1290 WRITE_ONCE(orq_get_current(qp)->flags, 0); in siw_rdmap_complete()
1296 rv = siw_init_rresp(qp, srx); in siw_rdmap_complete()
1311 if (rx_mem(&qp->rx_tagged)) { in siw_rdmap_complete()
1312 siw_mem_put(rx_mem(&qp->rx_tagged)); in siw_rdmap_complete()
1313 rx_mem(&qp->rx_tagged) = NULL; in siw_rdmap_complete()
1338 struct siw_qp *qp = rd_desc->arg.data; in siw_tcp_rx_data() local
1339 struct siw_rx_stream *srx = &qp->rx_stream; in siw_tcp_rx_data()
1347 siw_dbg_qp(qp, "new data, len %d\n", srx->skb_new); in siw_tcp_rx_data()
1382 qp->rx_fpdu->first_ddp_seg = 0; in siw_tcp_rx_data()
1390 rv = iwarp_pktinfo[qp->rx_stream.rdmap_op].rx_data(qp); in siw_tcp_rx_data()
1412 rv = siw_get_trailer(qp, srx); in siw_tcp_rx_data()
1426 rv = siw_rdmap_complete(qp, 0); in siw_tcp_rx_data()
1432 pr_warn("QP[%u]: RX out of state\n", qp_id(qp)); in siw_tcp_rx_data()
1438 qp->rx_fpdu->more_ddp_segs) && run_completion) in siw_tcp_rx_data()
1439 siw_rdmap_complete(qp, rv); in siw_tcp_rx_data()
1441 siw_dbg_qp(qp, "rx error %d, rx state %d\n", rv, in siw_tcp_rx_data()
1444 siw_qp_cm_drop(qp, 1); in siw_tcp_rx_data()
1449 siw_dbg_qp(qp, "fpdu fragment, state %d, missing %d\n", in siw_tcp_rx_data()