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);
2103 ucontext ? &ucontext->uctx : &rhp->rdev.uctx, !qhp->srq);
2139 if (!attrs->srq) {
2162 if (!attrs->srq) {
2171 if (!attrs->srq)
2178 qhp->wr_waitp, !attrs->srq);
2193 if (!attrs->srq) {
2221 if (!attrs->srq) {
2233 if (!attrs->srq) {
2257 if (!attrs->srq) {
2269 if (!attrs->srq) {
2275 if (!attrs->srq) {
2287 if (!attrs->srq) {
2297 if (!attrs->srq) {
2315 if (!attrs->srq) {
2326 if (attrs->srq)
2327 qhp->srq = to_c4iw_srq(attrs->srq);
2337 if (!attrs->srq)
2342 if (!attrs->srq)
2350 ucontext ? &ucontext->uctx : &rhp->rdev.uctx, !attrs->srq);
2416 void c4iw_dispatch_srq_limit_reached_event(struct c4iw_srq *srq)
2420 event.device = &srq->rhp->ibdev;
2421 event.element.srq = &srq->ibsrq;
2430 struct c4iw_srq *srq = to_c4iw_srq(ib_srq);
2437 c4iw_dispatch_srq_limit_reached_event(srq);
2448 srq->armed = true;
2449 srq->srq_limit = attr->srq_limit;
2473 static void free_srq_queue(struct c4iw_srq *srq, struct c4iw_dev_ucontext *uctx,
2476 struct c4iw_rdev *rdev = &srq->rhp->rdev;
2477 struct sk_buff *skb = srq->destroy_skb;
2478 struct t4_srq *wq = &srq->wq;
2494 res->u.srq.restype = FW_RI_RES_TYPE_SRQ;
2495 res->u.srq.op = FW_RI_RES_OP_RESET;
2496 res->u.srq.srqid = cpu_to_be32(srq->idx);
2497 res->u.srq.eqid = cpu_to_be32(wq->qid);
2510 static int alloc_srq_queue(struct c4iw_srq *srq, struct c4iw_dev_ucontext *uctx,
2513 struct c4iw_rdev *rdev = &srq->rhp->rdev;
2515 struct t4_srq *wq = &srq->wq;
2532 wq->pending_wrs = kcalloc(srq->wq.size,
2533 sizeof(*srq->wq.pending_wrs),
2584 res->u.srq.restype = FW_RI_RES_TYPE_SRQ;
2585 res->u.srq.op = FW_RI_RES_OP_WRITE;
2592 res->u.srq.eqid = cpu_to_be32(wq->qid);
2593 res->u.srq.fetchszm_to_iqid =
2599 res->u.srq.dcaen_to_eqsize =
2607 res->u.srq.eqaddr = cpu_to_be64(wq->dma_addr);
2608 res->u.srq.srqid = cpu_to_be32(srq->idx);
2609 res->u.srq.pdid = cpu_to_be32(srq->pdid);
2610 res->u.srq.hwsrqsize = cpu_to_be32(wq->rqt_size);
2611 res->u.srq.hwsrqaddr = cpu_to_be32(wq->rqt_hwaddr -
2620 pr_debug("%s srq %u eqid %u pdid %u queue va %p pa 0x%llx\n"
2622 __func__, srq->idx, wq->qid, srq->pdid, wq->queue,
2645 void c4iw_copy_wr_to_srq(struct t4_srq *srq, union t4_recv_wr *wqe, u8 len16)
2650 dst = (u64 *)((u8 *)srq->queue + srq->wq_pidx * T4_EQ_ENTRY_SIZE);
2653 if (dst >= (u64 *)&srq->queue[srq->size])
2654 dst = (u64 *)srq->queue;
2656 if (dst >= (u64 *)&srq->queue[srq->size])
2657 dst = (u64 *)srq->queue;
2667 struct c4iw_srq *srq = to_c4iw_srq(ib_srq);
2684 if (!rhp->rdev.lldi.vr->srq.size)
2700 srq->wr_waitp = c4iw_alloc_wr_wait(GFP_KERNEL);
2701 if (!srq->wr_waitp)
2704 srq->idx = c4iw_alloc_srq_idx(&rhp->rdev);
2705 if (srq->idx < 0) {
2711 srq->destroy_skb = alloc_skb(wr_len, GFP_KERNEL);
2712 if (!srq->destroy_skb) {
2717 srq->rhp = rhp;
2718 srq->pdid = php->pdid;
2720 srq->wq.size = rqsize;
2721 srq->wq.memsize =
2723 sizeof(*srq->wq.queue);
2725 srq->wq.memsize = roundup(srq->wq.memsize, PAGE_SIZE);
2727 ret = alloc_srq_queue(srq, ucontext ? &ucontext->uctx :
2728 &rhp->rdev.uctx, srq->wr_waitp);
2734 srq->flags = T4_SRQ_LIMIT_SUPPORT;
2748 uresp.flags = srq->flags;
2750 uresp.srqid = srq->wq.qid;
2751 uresp.srq_size = srq->wq.size;
2752 uresp.srq_memsize = srq->wq.memsize;
2753 uresp.rqt_abs_idx = srq->wq.rqt_abs_idx;
2764 srq_key_mm->addr = virt_to_phys(srq->wq.queue);
2765 srq_key_mm->len = PAGE_ALIGN(srq->wq.memsize);
2768 srq_db_key_mm->addr = (u64)(unsigned long)srq->wq.bar2_pa;
2773 pr_debug("%s srq qid %u idx %u size %u memsize %lu num_entries %u\n",
2774 __func__, srq->wq.qid, srq->idx, srq->wq.size,
2775 (unsigned long)srq->wq.memsize, attrs->attr.max_wr);
2777 spin_lock_init(&srq->lock);
2785 free_srq_queue(srq, ucontext ? &ucontext->uctx : &rhp->rdev.uctx,
2786 srq->wr_waitp);
2788 kfree_skb(srq->destroy_skb);
2790 c4iw_free_srq_idx(&rhp->rdev, srq->idx);
2792 c4iw_put_wr_wait(srq->wr_waitp);
2799 struct c4iw_srq *srq;
2802 srq = to_c4iw_srq(ibsrq);
2803 rhp = srq->rhp;
2805 pr_debug("%s id %d\n", __func__, srq->wq.qid);
2808 free_srq_queue(srq, ucontext ? &ucontext->uctx : &rhp->rdev.uctx,
2809 srq->wr_waitp);
2810 c4iw_free_srq_idx(&rhp->rdev, srq->idx);
2811 c4iw_put_wr_wait(srq->wr_waitp);