Lines Matching refs:srq
51 struct qib_srq *srq = to_isrq(ibsrq); in qib_post_srq_receive() local
61 if ((unsigned) wr->num_sge > srq->rq.max_sge) { in qib_post_srq_receive()
67 spin_lock_irqsave(&srq->rq.lock, flags); in qib_post_srq_receive()
68 wq = srq->rq.wq; in qib_post_srq_receive()
70 if (next >= srq->rq.size) in qib_post_srq_receive()
73 spin_unlock_irqrestore(&srq->rq.lock, flags); in qib_post_srq_receive()
79 wqe = get_rwqe_ptr(&srq->rq, wq->head); in qib_post_srq_receive()
87 spin_unlock_irqrestore(&srq->rq.lock, flags); in qib_post_srq_receive()
106 struct qib_srq *srq; in qib_create_srq() local
123 srq = kmalloc(sizeof(*srq), GFP_KERNEL); in qib_create_srq()
124 if (!srq) { in qib_create_srq()
132 srq->rq.size = srq_init_attr->attr.max_wr + 1; in qib_create_srq()
133 srq->rq.max_sge = srq_init_attr->attr.max_sge; in qib_create_srq()
134 sz = sizeof(struct ib_sge) * srq->rq.max_sge + in qib_create_srq()
136 srq->rq.wq = vmalloc_user(sizeof(struct qib_rwq) + srq->rq.size * sz); in qib_create_srq()
137 if (!srq->rq.wq) { in qib_create_srq()
148 u32 s = sizeof(struct qib_rwq) + srq->rq.size * sz; in qib_create_srq()
150 srq->ip = in qib_create_srq()
152 srq->rq.wq); in qib_create_srq()
153 if (!srq->ip) { in qib_create_srq()
158 err = ib_copy_to_udata(udata, &srq->ip->offset, in qib_create_srq()
159 sizeof(srq->ip->offset)); in qib_create_srq()
165 srq->ip = NULL; in qib_create_srq()
170 spin_lock_init(&srq->rq.lock); in qib_create_srq()
171 srq->rq.wq->head = 0; in qib_create_srq()
172 srq->rq.wq->tail = 0; in qib_create_srq()
173 srq->limit = srq_init_attr->attr.srq_limit; in qib_create_srq()
185 if (srq->ip) { in qib_create_srq()
187 list_add(&srq->ip->pending_mmaps, &dev->pending_mmaps); in qib_create_srq()
191 ret = &srq->ibsrq; in qib_create_srq()
195 kfree(srq->ip); in qib_create_srq()
197 vfree(srq->rq.wq); in qib_create_srq()
199 kfree(srq); in qib_create_srq()
215 struct qib_srq *srq = to_isrq(ibsrq); in qib_modify_srq() local
227 attr->srq_limit : srq->limit) > attr->max_wr) { in qib_modify_srq()
233 srq->rq.max_sge * sizeof(struct ib_sge); in qib_modify_srq()
258 spin_lock_irq(&srq->rq.lock); in qib_modify_srq()
263 owq = srq->rq.wq; in qib_modify_srq()
266 if (head >= srq->rq.size || tail >= srq->rq.size) { in qib_modify_srq()
272 n += srq->rq.size - tail; in qib_modify_srq()
285 wqe = get_rwqe_ptr(&srq->rq, tail); in qib_modify_srq()
292 if (++tail >= srq->rq.size) in qib_modify_srq()
295 srq->rq.wq = wq; in qib_modify_srq()
296 srq->rq.size = size; in qib_modify_srq()
300 srq->limit = attr->srq_limit; in qib_modify_srq()
301 spin_unlock_irq(&srq->rq.lock); in qib_modify_srq()
305 if (srq->ip) { in qib_modify_srq()
306 struct qib_mmap_info *ip = srq->ip; in qib_modify_srq()
307 struct qib_ibdev *dev = to_idev(srq->ibsrq.device); in qib_modify_srq()
334 spin_lock_irq(&srq->rq.lock); in qib_modify_srq()
335 if (attr->srq_limit >= srq->rq.size) in qib_modify_srq()
338 srq->limit = attr->srq_limit; in qib_modify_srq()
339 spin_unlock_irq(&srq->rq.lock); in qib_modify_srq()
344 spin_unlock_irq(&srq->rq.lock); in qib_modify_srq()
353 struct qib_srq *srq = to_isrq(ibsrq); in qib_query_srq() local
355 attr->max_wr = srq->rq.size - 1; in qib_query_srq()
356 attr->max_sge = srq->rq.max_sge; in qib_query_srq()
357 attr->srq_limit = srq->limit; in qib_query_srq()
367 struct qib_srq *srq = to_isrq(ibsrq); in qib_destroy_srq() local
373 if (srq->ip) in qib_destroy_srq()
374 kref_put(&srq->ip->ref, qib_release_mmap_info); in qib_destroy_srq()
376 vfree(srq->rq.wq); in qib_destroy_srq()
377 kfree(srq); in qib_destroy_srq()