Lines Matching refs:srq

53 #include "srq.h"
57 * rvt_driver_srq_init - init srq resources on a per driver basis
80 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq);
96 srq->rq.size = srq_init_attr->attr.max_wr + 1;
97 srq->rq.max_sge = srq_init_attr->attr.max_sge;
98 sz = sizeof(struct ib_sge) * srq->rq.max_sge +
100 if (rvt_alloc_rq(&srq->rq, srq->rq.size * sz,
111 u32 s = sizeof(struct rvt_rwq) + srq->rq.size * sz;
113 srq->ip = rvt_create_mmap_info(dev, s, udata, srq->rq.wq);
114 if (IS_ERR(srq->ip)) {
115 ret = PTR_ERR(srq->ip);
119 ret = ib_copy_to_udata(udata, &srq->ip->offset,
120 sizeof(srq->ip->offset));
126 * ib_create_srq() will initialize srq->ibsrq.
128 spin_lock_init(&srq->rq.lock);
129 srq->limit = srq_init_attr->attr.srq_limit;
141 if (srq->ip) {
143 list_add(&srq->ip->pending_mmaps, &dev->pending_mmaps);
150 kfree(srq->ip);
152 rvt_free_rq(&srq->rq);
170 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq);
184 attr->srq_limit : srq->limit) > attr->max_wr)
187 srq->rq.max_sge * sizeof(struct ib_sge);
209 spin_lock_irq(&srq->rq.kwq->c_lock);
215 owq = srq->rq.wq;
219 okwq = srq->rq.kwq;
223 if (head >= srq->rq.size || tail >= srq->rq.size) {
229 n += srq->rq.size - tail;
242 wqe = rvt_get_rwqe_ptr(&srq->rq, tail);
249 if (++tail >= srq->rq.size)
252 srq->rq.kwq = tmp_rq.kwq;
254 srq->rq.wq = tmp_rq.wq;
261 srq->rq.size = size;
263 srq->limit = attr->srq_limit;
264 spin_unlock_irq(&srq->rq.kwq->c_lock);
269 if (srq->ip) {
270 struct rvt_mmap_info *ip = srq->ip;
271 struct rvt_dev_info *dev = ib_to_rvt(srq->ibsrq.device);
298 spin_lock_irq(&srq->rq.kwq->c_lock);
299 if (attr->srq_limit >= srq->rq.size)
302 srq->limit = attr->srq_limit;
303 spin_unlock_irq(&srq->rq.kwq->c_lock);
308 spin_unlock_irq(&srq->rq.kwq->c_lock);
314 /** rvt_query_srq - query srq data
315 * @ibsrq: srq to query
322 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq);
324 attr->max_wr = srq->rq.size - 1;
325 attr->max_sge = srq->rq.max_sge;
326 attr->srq_limit = srq->limit;
331 * rvt_destroy_srq - destory an srq
332 * @ibsrq: srq object to destroy
337 struct rvt_srq *srq = ibsrq_to_rvtsrq(ibsrq);
343 if (srq->ip)
344 kref_put(&srq->ip->ref, rvt_release_mmap_info);
345 kvfree(srq->rq.kwq);