Lines Matching refs:srq

353 	if (!attrs->send_cq || (!attrs->recv_cq && !attrs->srq)) {
400 if (attrs->srq) {
406 qp->srq = to_siw_srq(attrs->srq);
533 qp_init_attr->srq = base_qp->srq;
1003 if (qp->srq || qp->attrs.rq_size == 0) {
1578 struct siw_srq *srq = to_siw_srq(base_srq);
1599 srq->max_sge = attrs->max_sge;
1600 srq->num_rqe = roundup_pow_of_two(attrs->max_wr);
1601 srq->limit = attrs->srq_limit;
1602 if (srq->limit)
1603 srq->armed = true;
1605 srq->is_kernel_res = !udata;
1608 srq->recvq =
1609 vmalloc_user(srq->num_rqe * sizeof(struct siw_rqe));
1611 srq->recvq = vcalloc(srq->num_rqe, sizeof(struct siw_rqe));
1613 if (srq->recvq == NULL) {
1619 size_t length = srq->num_rqe * sizeof(struct siw_rqe);
1621 srq->srq_entry =
1622 siw_mmap_entry_insert(ctx, srq->recvq,
1624 if (!srq->srq_entry) {
1629 uresp.num_rqe = srq->num_rqe;
1639 spin_lock_init(&srq->lock);
1646 if (srq->recvq) {
1648 rdma_user_mmap_entry_remove(srq->srq_entry);
1649 vfree(srq->recvq);
1668 struct siw_srq *srq = to_siw_srq(base_srq);
1672 spin_lock_irqsave(&srq->lock, flags);
1681 if (unlikely(attrs->srq_limit > srq->num_rqe)) {
1685 srq->armed = true;
1687 srq->armed = false;
1689 srq->limit = attrs->srq_limit;
1692 spin_unlock_irqrestore(&srq->lock, flags);
1704 struct siw_srq *srq = to_siw_srq(base_srq);
1707 spin_lock_irqsave(&srq->lock, flags);
1709 attrs->max_wr = srq->num_rqe;
1710 attrs->max_sge = srq->max_sge;
1711 attrs->srq_limit = srq->limit;
1713 spin_unlock_irqrestore(&srq->lock, flags);
1728 struct siw_srq *srq = to_siw_srq(base_srq);
1735 rdma_user_mmap_entry_remove(srq->srq_entry);
1736 vfree(srq->recvq);
1756 struct siw_srq *srq = to_siw_srq(base_srq);
1760 if (unlikely(!srq->is_kernel_res)) {
1762 "[SRQ]: no kernel post_recv for mapped srq\n");
1771 spin_lock_irqsave(&srq->lock, flags);
1774 u32 idx = srq->rq_put % srq->num_rqe;
1775 struct siw_rqe *rqe = &srq->recvq[idx];
1782 if (unlikely(wr->num_sge > srq->max_sge)) {
1797 srq->rq_put++;
1800 spin_unlock_irqrestore(&srq->lock, flags);
1846 void siw_srq_event(struct siw_srq *srq, enum ib_event_type etype)
1849 struct ib_srq *base_srq = &srq->base_srq;
1853 event.element.srq = base_srq;
1856 siw_dbg_pd(srq->base_srq.pd,