Lines Matching refs:srq

1161 	if (!attrs->srq && (attrs->cap.max_recv_wr > dev->attr.max_rqe)) {  in ocrdma_check_qp_params()
1216 int dpp_credit_lmt, int srq) in ocrdma_copy_qp_uresp() argument
1233 if (!srq) { in ocrdma_copy_qp_uresp()
1260 if (!srq) { in ocrdma_copy_qp_uresp()
1387 (attrs->srq != NULL)); in ocrdma_create_qp()
1588 static void ocrdma_srq_toggle_bit(struct ocrdma_srq *srq, unsigned int idx) in ocrdma_srq_toggle_bit() argument
1593 srq->idx_bit_fields[i] ^= mask; in ocrdma_srq_toggle_bit()
1655 if (is_hw_sq_empty(qp) && (!qp->srq && is_hw_rq_empty(qp))) in ocrdma_discard_cqes()
1672 if (qp->srq) { in ocrdma_discard_cqes()
1675 qp->srq->rq.max_wqe_idx; in ocrdma_discard_cqes()
1678 spin_lock_irqsave(&qp->srq->q_lock, flags); in ocrdma_discard_cqes()
1679 ocrdma_hwq_inc_tail(&qp->srq->rq); in ocrdma_discard_cqes()
1680 ocrdma_srq_toggle_bit(qp->srq, wqe_idx - 1); in ocrdma_discard_cqes()
1681 spin_unlock_irqrestore(&qp->srq->q_lock, flags); in ocrdma_discard_cqes()
1709 if (!qp->srq) { in ocrdma_del_flush_qp()
1767 if (!qp->srq) in ocrdma_destroy_qp()
1780 static int ocrdma_copy_srq_uresp(struct ocrdma_dev *dev, struct ocrdma_srq *srq, in ocrdma_copy_srq_uresp() argument
1787 uresp.rq_dbid = srq->rq.dbid; in ocrdma_copy_srq_uresp()
1789 uresp.rq_page_addr[0] = virt_to_phys(srq->rq.va); in ocrdma_copy_srq_uresp()
1790 uresp.rq_page_size = srq->rq.len; in ocrdma_copy_srq_uresp()
1792 (srq->pd->id * dev->nic_info.db_page_size); in ocrdma_copy_srq_uresp()
1794 uresp.num_rqe_allocated = srq->rq.max_cnt; in ocrdma_copy_srq_uresp()
1806 status = ocrdma_add_mmap(srq->pd->uctx, uresp.rq_page_addr[0], in ocrdma_copy_srq_uresp()
1820 struct ocrdma_srq *srq; in ocrdma_create_srq() local
1827 srq = kzalloc(sizeof(*srq), GFP_KERNEL); in ocrdma_create_srq()
1828 if (!srq) in ocrdma_create_srq()
1831 spin_lock_init(&srq->q_lock); in ocrdma_create_srq()
1832 srq->pd = pd; in ocrdma_create_srq()
1833 srq->db = dev->nic_info.db + (pd->id * dev->nic_info.db_page_size); in ocrdma_create_srq()
1834 status = ocrdma_mbx_create_srq(dev, srq, init_attr, pd); in ocrdma_create_srq()
1839 srq->rqe_wr_id_tbl = kzalloc(sizeof(u64) * srq->rq.max_cnt, in ocrdma_create_srq()
1841 if (srq->rqe_wr_id_tbl == NULL) in ocrdma_create_srq()
1844 srq->bit_fields_len = (srq->rq.max_cnt / 32) + in ocrdma_create_srq()
1845 (srq->rq.max_cnt % 32 ? 1 : 0); in ocrdma_create_srq()
1846 srq->idx_bit_fields = in ocrdma_create_srq()
1847 kmalloc(srq->bit_fields_len * sizeof(u32), GFP_KERNEL); in ocrdma_create_srq()
1848 if (srq->idx_bit_fields == NULL) in ocrdma_create_srq()
1850 memset(srq->idx_bit_fields, 0xff, in ocrdma_create_srq()
1851 srq->bit_fields_len * sizeof(u32)); in ocrdma_create_srq()
1855 status = ocrdma_mbx_modify_srq(srq, &init_attr->attr); in ocrdma_create_srq()
1861 status = ocrdma_copy_srq_uresp(dev, srq, udata); in ocrdma_create_srq()
1866 return &srq->ibsrq; in ocrdma_create_srq()
1869 ocrdma_mbx_destroy_srq(dev, srq); in ocrdma_create_srq()
1871 kfree(srq->rqe_wr_id_tbl); in ocrdma_create_srq()
1872 kfree(srq->idx_bit_fields); in ocrdma_create_srq()
1873 kfree(srq); in ocrdma_create_srq()
1883 struct ocrdma_srq *srq; in ocrdma_modify_srq() local
1885 srq = get_ocrdma_srq(ibsrq); in ocrdma_modify_srq()
1889 status = ocrdma_mbx_modify_srq(srq, srq_attr); in ocrdma_modify_srq()
1896 struct ocrdma_srq *srq; in ocrdma_query_srq() local
1898 srq = get_ocrdma_srq(ibsrq); in ocrdma_query_srq()
1899 status = ocrdma_mbx_query_srq(srq, srq_attr); in ocrdma_query_srq()
1906 struct ocrdma_srq *srq; in ocrdma_destroy_srq() local
1909 srq = get_ocrdma_srq(ibsrq); in ocrdma_destroy_srq()
1911 status = ocrdma_mbx_destroy_srq(dev, srq); in ocrdma_destroy_srq()
1913 if (srq->pd->uctx) in ocrdma_destroy_srq()
1914 ocrdma_del_mmap(srq->pd->uctx, (u64) srq->rq.pa, in ocrdma_destroy_srq()
1915 PAGE_ALIGN(srq->rq.len)); in ocrdma_destroy_srq()
1917 kfree(srq->idx_bit_fields); in ocrdma_destroy_srq()
1918 kfree(srq->rqe_wr_id_tbl); in ocrdma_destroy_srq()
1919 kfree(srq); in ocrdma_destroy_srq()
2336 static int ocrdma_srq_get_idx(struct ocrdma_srq *srq) in ocrdma_srq_get_idx() argument
2341 for (row = 0; row < srq->bit_fields_len; row++) { in ocrdma_srq_get_idx()
2342 if (srq->idx_bit_fields[row]) { in ocrdma_srq_get_idx()
2343 indx = ffs(srq->idx_bit_fields[row]); in ocrdma_srq_get_idx()
2345 if (indx >= srq->rq.max_cnt) in ocrdma_srq_get_idx()
2347 ocrdma_srq_toggle_bit(srq, indx); in ocrdma_srq_get_idx()
2352 if (row == srq->bit_fields_len) in ocrdma_srq_get_idx()
2357 static void ocrdma_ring_srq_db(struct ocrdma_srq *srq) in ocrdma_ring_srq_db() argument
2359 u32 val = srq->rq.dbid | (1 << 16); in ocrdma_ring_srq_db()
2361 iowrite32(val, srq->db + OCRDMA_DB_GEN2_SRQ_OFFSET); in ocrdma_ring_srq_db()
2369 struct ocrdma_srq *srq; in ocrdma_post_srq_recv() local
2373 srq = get_ocrdma_srq(ibsrq); in ocrdma_post_srq_recv()
2375 spin_lock_irqsave(&srq->q_lock, flags); in ocrdma_post_srq_recv()
2377 if (ocrdma_hwq_free_cnt(&srq->rq) == 0 || in ocrdma_post_srq_recv()
2378 wr->num_sge > srq->rq.max_sges) { in ocrdma_post_srq_recv()
2383 tag = ocrdma_srq_get_idx(srq); in ocrdma_post_srq_recv()
2384 rqe = ocrdma_hwq_head(&srq->rq); in ocrdma_post_srq_recv()
2387 srq->rqe_wr_id_tbl[tag] = wr->wr_id; in ocrdma_post_srq_recv()
2391 ocrdma_ring_srq_db(srq); in ocrdma_post_srq_recv()
2393 ocrdma_hwq_inc_head(&srq->rq); in ocrdma_post_srq_recv()
2396 spin_unlock_irqrestore(&srq->q_lock, flags); in ocrdma_post_srq_recv()
2605 if (!qp->srq && (qp->sq_cq == qp->rq_cq)) { in ocrdma_poll_err_scqe()
2694 struct ocrdma_srq *srq; in ocrdma_update_free_srq_cqe() local
2697 srq = get_ocrdma_srq(qp->ibqp.srq); in ocrdma_update_free_srq_cqe()
2699 OCRDMA_CQE_BUFTAG_SHIFT) & srq->rq.max_wqe_idx; in ocrdma_update_free_srq_cqe()
2703 ibwc->wr_id = srq->rqe_wr_id_tbl[wqe_idx]; in ocrdma_update_free_srq_cqe()
2704 spin_lock_irqsave(&srq->q_lock, flags); in ocrdma_update_free_srq_cqe()
2705 ocrdma_srq_toggle_bit(srq, wqe_idx - 1); in ocrdma_update_free_srq_cqe()
2706 spin_unlock_irqrestore(&srq->q_lock, flags); in ocrdma_update_free_srq_cqe()
2707 ocrdma_hwq_inc_tail(&srq->rq); in ocrdma_update_free_srq_cqe()
2724 if (!qp->srq && (qp->sq_cq == qp->rq_cq)) { in ocrdma_poll_err_rcqe()
2768 if (qp->ibqp.srq) { in ocrdma_poll_success_rcqe()