Lines Matching refs:srq
1340 static void defer_srq_wr(struct t4_srq *srq, union t4_recv_wr *wqe, in defer_srq_wr() argument
1343 struct t4_srq_pending_wr *pwr = &srq->pending_wrs[srq->pending_pidx]; in defer_srq_wr()
1346 __func__, srq->cidx, srq->pidx, srq->wq_pidx, in defer_srq_wr()
1347 srq->in_use, srq->ooo_count, in defer_srq_wr()
1348 (unsigned long long)wr_id, srq->pending_cidx, in defer_srq_wr()
1349 srq->pending_pidx, srq->pending_in_use); in defer_srq_wr()
1353 t4_srq_produce_pending_wr(srq); in defer_srq_wr()
1360 struct c4iw_srq *srq; in c4iw_post_srq_recv() local
1367 srq = to_c4iw_srq(ibsrq); in c4iw_post_srq_recv()
1368 spin_lock_irqsave(&srq->lock, flag); in c4iw_post_srq_recv()
1369 num_wrs = t4_srq_avail(&srq->wq); in c4iw_post_srq_recv()
1371 spin_unlock_irqrestore(&srq->lock, flag); in c4iw_post_srq_recv()
1392 wqe->recv.wrid = srq->wq.pidx; in c4iw_post_srq_recv()
1398 if (srq->wq.ooo_count || in c4iw_post_srq_recv()
1399 srq->wq.pending_in_use || in c4iw_post_srq_recv()
1400 srq->wq.sw_rq[srq->wq.pidx].valid) { in c4iw_post_srq_recv()
1401 defer_srq_wr(&srq->wq, wqe, wr->wr_id, len16); in c4iw_post_srq_recv()
1403 srq->wq.sw_rq[srq->wq.pidx].wr_id = wr->wr_id; in c4iw_post_srq_recv()
1404 srq->wq.sw_rq[srq->wq.pidx].valid = 1; in c4iw_post_srq_recv()
1405 c4iw_copy_wr_to_srq(&srq->wq, wqe, len16); in c4iw_post_srq_recv()
1407 __func__, srq->wq.cidx, in c4iw_post_srq_recv()
1408 srq->wq.pidx, srq->wq.wq_pidx, in c4iw_post_srq_recv()
1409 srq->wq.in_use, in c4iw_post_srq_recv()
1411 t4_srq_produce(&srq->wq, len16); in c4iw_post_srq_recv()
1418 t4_ring_srq_db(&srq->wq, idx, len16, wqe); in c4iw_post_srq_recv()
1419 spin_unlock_irqrestore(&srq->lock, flag); in c4iw_post_srq_recv()
1621 if (!qhp->srq) { in __flush_qp()
1802 if (qhp->srq) { in rdma_init()
1804 qhp->srq->idx); in rdma_init()
2103 ucontext ? &ucontext->uctx : &rhp->rdev.uctx, !qhp->srq); in c4iw_destroy_qp()
2142 if (!attrs->srq) { in c4iw_create_qp()
2171 if (!attrs->srq) { in c4iw_create_qp()
2180 if (!attrs->srq) in c4iw_create_qp()
2187 qhp->wr_waitp, !attrs->srq); in c4iw_create_qp()
2202 if (!attrs->srq) { in c4iw_create_qp()
2230 if (!attrs->srq) { in c4iw_create_qp()
2242 if (!attrs->srq) { in c4iw_create_qp()
2266 if (!attrs->srq) { in c4iw_create_qp()
2278 if (!attrs->srq) { in c4iw_create_qp()
2284 if (!attrs->srq) { in c4iw_create_qp()
2296 if (!attrs->srq) { in c4iw_create_qp()
2306 if (!attrs->srq) { in c4iw_create_qp()
2324 if (!attrs->srq) { in c4iw_create_qp()
2335 if (attrs->srq) in c4iw_create_qp()
2336 qhp->srq = to_c4iw_srq(attrs->srq); in c4iw_create_qp()
2346 if (!attrs->srq) in c4iw_create_qp()
2351 if (!attrs->srq) in c4iw_create_qp()
2359 ucontext ? &ucontext->uctx : &rhp->rdev.uctx, !attrs->srq); in c4iw_create_qp()
2424 void c4iw_dispatch_srq_limit_reached_event(struct c4iw_srq *srq) in c4iw_dispatch_srq_limit_reached_event() argument
2428 event.device = &srq->rhp->ibdev; in c4iw_dispatch_srq_limit_reached_event()
2429 event.element.srq = &srq->ibsrq; in c4iw_dispatch_srq_limit_reached_event()
2438 struct c4iw_srq *srq = to_c4iw_srq(ib_srq); in c4iw_modify_srq() local
2445 c4iw_dispatch_srq_limit_reached_event(srq); in c4iw_modify_srq()
2456 srq->armed = true; in c4iw_modify_srq()
2457 srq->srq_limit = attr->srq_limit; in c4iw_modify_srq()
2480 static void free_srq_queue(struct c4iw_srq *srq, struct c4iw_dev_ucontext *uctx, in free_srq_queue() argument
2483 struct c4iw_rdev *rdev = &srq->rhp->rdev; in free_srq_queue()
2484 struct sk_buff *skb = srq->destroy_skb; in free_srq_queue()
2485 struct t4_srq *wq = &srq->wq; in free_srq_queue()
2501 res->u.srq.restype = FW_RI_RES_TYPE_SRQ; in free_srq_queue()
2502 res->u.srq.op = FW_RI_RES_OP_RESET; in free_srq_queue()
2503 res->u.srq.srqid = cpu_to_be32(srq->idx); in free_srq_queue()
2504 res->u.srq.eqid = cpu_to_be32(wq->qid); in free_srq_queue()
2517 static int alloc_srq_queue(struct c4iw_srq *srq, struct c4iw_dev_ucontext *uctx, in alloc_srq_queue() argument
2520 struct c4iw_rdev *rdev = &srq->rhp->rdev; in alloc_srq_queue()
2522 struct t4_srq *wq = &srq->wq; in alloc_srq_queue()
2539 wq->pending_wrs = kcalloc(srq->wq.size, in alloc_srq_queue()
2540 sizeof(*srq->wq.pending_wrs), in alloc_srq_queue()
2591 res->u.srq.restype = FW_RI_RES_TYPE_SRQ; in alloc_srq_queue()
2592 res->u.srq.op = FW_RI_RES_OP_WRITE; in alloc_srq_queue()
2599 res->u.srq.eqid = cpu_to_be32(wq->qid); in alloc_srq_queue()
2600 res->u.srq.fetchszm_to_iqid = in alloc_srq_queue()
2606 res->u.srq.dcaen_to_eqsize = in alloc_srq_queue()
2614 res->u.srq.eqaddr = cpu_to_be64(wq->dma_addr); in alloc_srq_queue()
2615 res->u.srq.srqid = cpu_to_be32(srq->idx); in alloc_srq_queue()
2616 res->u.srq.pdid = cpu_to_be32(srq->pdid); in alloc_srq_queue()
2617 res->u.srq.hwsrqsize = cpu_to_be32(wq->rqt_size); in alloc_srq_queue()
2618 res->u.srq.hwsrqaddr = cpu_to_be32(wq->rqt_hwaddr - in alloc_srq_queue()
2629 __func__, srq->idx, wq->qid, srq->pdid, wq->queue, in alloc_srq_queue()
2652 void c4iw_copy_wr_to_srq(struct t4_srq *srq, union t4_recv_wr *wqe, u8 len16) in c4iw_copy_wr_to_srq() argument
2657 dst = (u64 *)((u8 *)srq->queue + srq->wq_pidx * T4_EQ_ENTRY_SIZE); in c4iw_copy_wr_to_srq()
2660 if (dst >= (u64 *)&srq->queue[srq->size]) in c4iw_copy_wr_to_srq()
2661 dst = (u64 *)srq->queue; in c4iw_copy_wr_to_srq()
2663 if (dst >= (u64 *)&srq->queue[srq->size]) in c4iw_copy_wr_to_srq()
2664 dst = (u64 *)srq->queue; in c4iw_copy_wr_to_srq()
2674 struct c4iw_srq *srq = to_c4iw_srq(ib_srq); in c4iw_create_srq() local
2688 if (!rhp->rdev.lldi.vr->srq.size) in c4iw_create_srq()
2704 srq->wr_waitp = c4iw_alloc_wr_wait(GFP_KERNEL); in c4iw_create_srq()
2705 if (!srq->wr_waitp) in c4iw_create_srq()
2708 srq->idx = c4iw_alloc_srq_idx(&rhp->rdev); in c4iw_create_srq()
2709 if (srq->idx < 0) { in c4iw_create_srq()
2715 srq->destroy_skb = alloc_skb(wr_len, GFP_KERNEL); in c4iw_create_srq()
2716 if (!srq->destroy_skb) { in c4iw_create_srq()
2721 srq->rhp = rhp; in c4iw_create_srq()
2722 srq->pdid = php->pdid; in c4iw_create_srq()
2724 srq->wq.size = rqsize; in c4iw_create_srq()
2725 srq->wq.memsize = in c4iw_create_srq()
2727 sizeof(*srq->wq.queue); in c4iw_create_srq()
2729 srq->wq.memsize = roundup(srq->wq.memsize, PAGE_SIZE); in c4iw_create_srq()
2731 ret = alloc_srq_queue(srq, ucontext ? &ucontext->uctx : in c4iw_create_srq()
2732 &rhp->rdev.uctx, srq->wr_waitp); in c4iw_create_srq()
2738 srq->flags = T4_SRQ_LIMIT_SUPPORT; in c4iw_create_srq()
2752 uresp.flags = srq->flags; in c4iw_create_srq()
2754 uresp.srqid = srq->wq.qid; in c4iw_create_srq()
2755 uresp.srq_size = srq->wq.size; in c4iw_create_srq()
2756 uresp.srq_memsize = srq->wq.memsize; in c4iw_create_srq()
2757 uresp.rqt_abs_idx = srq->wq.rqt_abs_idx; in c4iw_create_srq()
2768 srq_key_mm->addr = virt_to_phys(srq->wq.queue); in c4iw_create_srq()
2769 srq_key_mm->len = PAGE_ALIGN(srq->wq.memsize); in c4iw_create_srq()
2772 srq_db_key_mm->addr = (u64)(unsigned long)srq->wq.bar2_pa; in c4iw_create_srq()
2778 __func__, srq->wq.qid, srq->idx, srq->wq.size, in c4iw_create_srq()
2779 (unsigned long)srq->wq.memsize, attrs->attr.max_wr); in c4iw_create_srq()
2781 spin_lock_init(&srq->lock); in c4iw_create_srq()
2789 free_srq_queue(srq, ucontext ? &ucontext->uctx : &rhp->rdev.uctx, in c4iw_create_srq()
2790 srq->wr_waitp); in c4iw_create_srq()
2792 kfree_skb(srq->destroy_skb); in c4iw_create_srq()
2794 c4iw_free_srq_idx(&rhp->rdev, srq->idx); in c4iw_create_srq()
2796 c4iw_put_wr_wait(srq->wr_waitp); in c4iw_create_srq()
2803 struct c4iw_srq *srq; in c4iw_destroy_srq() local
2806 srq = to_c4iw_srq(ibsrq); in c4iw_destroy_srq()
2807 rhp = srq->rhp; in c4iw_destroy_srq()
2809 pr_debug("%s id %d\n", __func__, srq->wq.qid); in c4iw_destroy_srq()
2812 free_srq_queue(srq, ucontext ? &ucontext->uctx : &rhp->rdev.uctx, in c4iw_destroy_srq()
2813 srq->wr_waitp); in c4iw_destroy_srq()
2814 c4iw_free_srq_idx(&rhp->rdev, srq->idx); in c4iw_destroy_srq()
2815 c4iw_put_wr_wait(srq->wr_waitp); in c4iw_destroy_srq()