Lines Matching refs:srq
46 struct mlx4_srq *srq; in mlx4_srq_event() local
50 srq = radix_tree_lookup(&srq_table->tree, srqn & (dev->caps.num_srqs - 1)); in mlx4_srq_event()
51 if (srq) in mlx4_srq_event()
52 atomic_inc(&srq->refcount); in mlx4_srq_event()
56 if (!srq) { in mlx4_srq_event()
61 srq->event(srq, event_type); in mlx4_srq_event()
63 if (atomic_dec_and_test(&srq->refcount)) in mlx4_srq_event()
64 complete(&srq->free); in mlx4_srq_event()
166 struct mlx4_mtt *mtt, u64 db_rec, struct mlx4_srq *srq) in mlx4_srq_alloc() argument
174 err = mlx4_srq_alloc_icm(dev, &srq->srqn); in mlx4_srq_alloc()
179 err = radix_tree_insert(&srq_table->tree, srq->srqn, srq); in mlx4_srq_alloc()
191 srq_context->state_logsize_srqn = cpu_to_be32((ilog2(srq->max) << 24) | in mlx4_srq_alloc()
192 srq->srqn); in mlx4_srq_alloc()
193 srq_context->logstride = srq->wqe_shift - 4; in mlx4_srq_alloc()
204 err = mlx4_SW2HW_SRQ(dev, mailbox, srq->srqn); in mlx4_srq_alloc()
209 atomic_set(&srq->refcount, 1); in mlx4_srq_alloc()
210 init_completion(&srq->free); in mlx4_srq_alloc()
216 radix_tree_delete(&srq_table->tree, srq->srqn); in mlx4_srq_alloc()
220 mlx4_srq_free_icm(dev, srq->srqn); in mlx4_srq_alloc()
225 void mlx4_srq_free(struct mlx4_dev *dev, struct mlx4_srq *srq) in mlx4_srq_free() argument
230 err = mlx4_HW2SW_SRQ(dev, NULL, srq->srqn); in mlx4_srq_free()
232 mlx4_warn(dev, "HW2SW_SRQ failed (%d) for SRQN %06x\n", err, srq->srqn); in mlx4_srq_free()
235 radix_tree_delete(&srq_table->tree, srq->srqn); in mlx4_srq_free()
238 if (atomic_dec_and_test(&srq->refcount)) in mlx4_srq_free()
239 complete(&srq->free); in mlx4_srq_free()
240 wait_for_completion(&srq->free); in mlx4_srq_free()
242 mlx4_srq_free_icm(dev, srq->srqn); in mlx4_srq_free()
246 int mlx4_srq_arm(struct mlx4_dev *dev, struct mlx4_srq *srq, int limit_watermark) in mlx4_srq_arm() argument
248 return mlx4_ARM_SRQ(dev, srq->srqn, limit_watermark); in mlx4_srq_arm()
252 int mlx4_srq_query(struct mlx4_dev *dev, struct mlx4_srq *srq, int *limit_watermark) in mlx4_srq_query() argument
264 err = mlx4_QUERY_SRQ(dev, mailbox, srq->srqn); in mlx4_srq_query()
303 struct mlx4_srq *srq; in mlx4_srq_lookup() local
307 srq = radix_tree_lookup(&srq_table->tree, in mlx4_srq_lookup()
311 return srq; in mlx4_srq_lookup()