Lines Matching refs:srq

1341 static void defer_srq_wr(struct t4_srq *srq, union t4_recv_wr *wqe,
1344 struct t4_srq_pending_wr *pwr = &srq->pending_wrs[srq->pending_pidx];
1347 __func__, srq->cidx, srq->pidx, srq->wq_pidx,
1348 srq->in_use, srq->ooo_count,
1349 (unsigned long long)wr_id, srq->pending_cidx,
1350 srq->pending_pidx, srq->pending_in_use);
1354 t4_srq_produce_pending_wr(srq);
1361 struct c4iw_srq *srq;
1368 srq = to_c4iw_srq(ibsrq);
1369 spin_lock_irqsave(&srq->lock, flag);
1370 num_wrs = t4_srq_avail(&srq->wq);
1372 spin_unlock_irqrestore(&srq->lock, flag);
1393 wqe->recv.wrid = srq->wq.pidx;
1399 if (srq->wq.ooo_count ||
1400 srq->wq.pending_in_use ||
1401 srq->wq.sw_rq[srq->wq.pidx].valid) {
1402 defer_srq_wr(&srq->wq, wqe, wr->wr_id, len16);
1404 srq->wq.sw_rq[srq->wq.pidx].wr_id = wr->wr_id;
1405 srq->wq.sw_rq[srq->wq.pidx].valid = 1;
1406 c4iw_copy_wr_to_srq(&srq->wq, wqe, len16);
1408 __func__, srq->wq.cidx,
1409 srq->wq.pidx, srq->wq.wq_pidx,
1410 srq->wq.in_use,
1412 t4_srq_produce(&srq->wq, len16);
1419 t4_ring_srq_db(&srq->wq, idx, len16, wqe);
1420 spin_unlock_irqrestore(&srq->lock, flag);
1622 if (!qhp->srq) {
1803 if (qhp->srq) {
1805 qhp->srq->idx);
2104 ucontext ? &ucontext->uctx : &rhp->rdev.uctx, !qhp->srq);
2143 if (!attrs->srq) {
2172 if (!attrs->srq) {
2181 if (!attrs->srq)
2188 qhp->wr_waitp, !attrs->srq);
2203 if (!attrs->srq) {
2231 if (!attrs->srq) {
2243 if (!attrs->srq) {
2267 if (!attrs->srq) {
2279 if (!attrs->srq) {
2285 if (!attrs->srq) {
2297 if (!attrs->srq) {
2307 if (!attrs->srq) {
2325 if (!attrs->srq) {
2336 if (attrs->srq)
2337 qhp->srq = to_c4iw_srq(attrs->srq);
2347 if (!attrs->srq)
2352 if (!attrs->srq)
2360 ucontext ? &ucontext->uctx : &rhp->rdev.uctx, !attrs->srq);
2425 void c4iw_dispatch_srq_limit_reached_event(struct c4iw_srq *srq)
2429 event.device = &srq->rhp->ibdev;
2430 event.element.srq = &srq->ibsrq;
2439 struct c4iw_srq *srq = to_c4iw_srq(ib_srq);
2446 c4iw_dispatch_srq_limit_reached_event(srq);
2457 srq->armed = true;
2458 srq->srq_limit = attr->srq_limit;
2482 static void free_srq_queue(struct c4iw_srq *srq, struct c4iw_dev_ucontext *uctx,
2485 struct c4iw_rdev *rdev = &srq->rhp->rdev;
2486 struct sk_buff *skb = srq->destroy_skb;
2487 struct t4_srq *wq = &srq->wq;
2503 res->u.srq.restype = FW_RI_RES_TYPE_SRQ;
2504 res->u.srq.op = FW_RI_RES_OP_RESET;
2505 res->u.srq.srqid = cpu_to_be32(srq->idx);
2506 res->u.srq.eqid = cpu_to_be32(wq->qid);
2519 static int alloc_srq_queue(struct c4iw_srq *srq, struct c4iw_dev_ucontext *uctx,
2522 struct c4iw_rdev *rdev = &srq->rhp->rdev;
2524 struct t4_srq *wq = &srq->wq;
2541 wq->pending_wrs = kcalloc(srq->wq.size,
2542 sizeof(*srq->wq.pending_wrs),
2593 res->u.srq.restype = FW_RI_RES_TYPE_SRQ;
2594 res->u.srq.op = FW_RI_RES_OP_WRITE;
2601 res->u.srq.eqid = cpu_to_be32(wq->qid);
2602 res->u.srq.fetchszm_to_iqid =
2608 res->u.srq.dcaen_to_eqsize =
2616 res->u.srq.eqaddr = cpu_to_be64(wq->dma_addr);
2617 res->u.srq.srqid = cpu_to_be32(srq->idx);
2618 res->u.srq.pdid = cpu_to_be32(srq->pdid);
2619 res->u.srq.hwsrqsize = cpu_to_be32(wq->rqt_size);
2620 res->u.srq.hwsrqaddr = cpu_to_be32(wq->rqt_hwaddr -
2629 pr_debug("%s srq %u eqid %u pdid %u queue va %p pa 0x%llx\n"
2631 __func__, srq->idx, wq->qid, srq->pdid, wq->queue,
2654 void c4iw_copy_wr_to_srq(struct t4_srq *srq, union t4_recv_wr *wqe, u8 len16)
2659 dst = (u64 *)((u8 *)srq->queue + srq->wq_pidx * T4_EQ_ENTRY_SIZE);
2662 if (dst >= (u64 *)&srq->queue[srq->size])
2663 dst = (u64 *)srq->queue;
2665 if (dst >= (u64 *)&srq->queue[srq->size])
2666 dst = (u64 *)srq->queue;
2676 struct c4iw_srq *srq = to_c4iw_srq(ib_srq);
2690 if (!rhp->rdev.lldi.vr->srq.size)
2706 srq->wr_waitp = c4iw_alloc_wr_wait(GFP_KERNEL);
2707 if (!srq->wr_waitp)
2710 srq->idx = c4iw_alloc_srq_idx(&rhp->rdev);
2711 if (srq->idx < 0) {
2717 srq->destroy_skb = alloc_skb(wr_len, GFP_KERNEL);
2718 if (!srq->destroy_skb) {
2723 srq->rhp = rhp;
2724 srq->pdid = php->pdid;
2726 srq->wq.size = rqsize;
2727 srq->wq.memsize =
2729 sizeof(*srq->wq.queue);
2731 srq->wq.memsize = roundup(srq->wq.memsize, PAGE_SIZE);
2733 ret = alloc_srq_queue(srq, ucontext ? &ucontext->uctx :
2734 &rhp->rdev.uctx, srq->wr_waitp);
2740 srq->flags = T4_SRQ_LIMIT_SUPPORT;
2754 uresp.flags = srq->flags;
2756 uresp.srqid = srq->wq.qid;
2757 uresp.srq_size = srq->wq.size;
2758 uresp.srq_memsize = srq->wq.memsize;
2759 uresp.rqt_abs_idx = srq->wq.rqt_abs_idx;
2770 srq_key_mm->addr = virt_to_phys(srq->wq.queue);
2771 srq_key_mm->len = PAGE_ALIGN(srq->wq.memsize);
2774 srq_db_key_mm->addr = (u64)(unsigned long)srq->wq.bar2_pa;
2779 pr_debug("%s srq qid %u idx %u size %u memsize %lu num_entries %u\n",
2780 __func__, srq->wq.qid, srq->idx, srq->wq.size,
2781 (unsigned long)srq->wq.memsize, attrs->attr.max_wr);
2783 spin_lock_init(&srq->lock);
2791 free_srq_queue(srq, ucontext ? &ucontext->uctx : &rhp->rdev.uctx,
2792 srq->wr_waitp);
2794 kfree_skb(srq->destroy_skb);
2796 c4iw_free_srq_idx(&rhp->rdev, srq->idx);
2798 c4iw_put_wr_wait(srq->wr_waitp);
2805 struct c4iw_srq *srq;
2808 srq = to_c4iw_srq(ibsrq);
2809 rhp = srq->rhp;
2811 pr_debug("%s id %d\n", __func__, srq->wq.qid);
2814 free_srq_queue(srq, ucontext ? &ucontext->uctx : &rhp->rdev.uctx,
2815 srq->wr_waitp);
2816 c4iw_free_srq_idx(&rhp->rdev, srq->idx);
2817 c4iw_put_wr_wait(srq->wr_waitp);