Lines Matching refs:srq

31 #include <dev/mlx5/srq.h>
39 struct mlx5_core_srq *srq;
43 srq = radix_tree_lookup(&table->tree, srqn);
44 if (srq)
45 atomic_inc(&srq->refcount);
49 if (!srq) {
54 srq->event(srq, event_type);
56 if (atomic_dec_and_test(&srq->refcount))
57 complete(&srq->free);
73 printf("mlx5_core: WARN: ""%s: %d: Unknown srq state = 0x%x\n", __func__, __LINE__, MLX5_GET(srqc, srqc, state));
113 struct mlx5_core_srq *srq;
117 srq = radix_tree_lookup(&table->tree, srqn);
118 if (srq)
119 atomic_inc(&srq->refcount);
123 return srq;
143 static int create_rmp_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
165 err = mlx5_core_create_rmp(dev, create_in, inlen, &srq->srqn);
172 struct mlx5_core_srq *srq)
174 return mlx5_core_destroy_rmp(dev, srq->srqn);
177 static int query_rmp_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
189 err = mlx5_core_query_rmp(dev, srq->srqn, rmp_out);
202 static int arm_rmp_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq, u16 lwm)
204 return mlx5_core_arm_rmp(dev, srq->srqn, lwm);
208 struct mlx5_core_srq *srq,
235 err = mlx5_core_create_xsrq(dev, create_in, inlen, &srq->srqn);
245 struct mlx5_core_srq *srq)
247 return mlx5_core_destroy_xsrq(dev, srq->srqn);
251 struct mlx5_core_srq *srq,
261 err = mlx5_core_query_xsrq(dev, srq->srqn, xrcsrq_out);
271 struct mlx5_core_srq *srq, u16 lwm)
273 return mlx5_core_arm_xsrq(dev, srq->srqn, lwm);
276 static int create_srq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
288 srq->srqn = be32_to_cpu(out.srqn) & 0xffffff;
294 struct mlx5_core_srq *srq)
302 in.srqn = cpu_to_be32(srq->srqn);
307 static int query_srq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
315 in.srqn = cpu_to_be32(srq->srqn);
320 static int arm_srq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
331 in.srqn = cpu_to_be32(srq->srqn);
337 static int create_srq_split(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
342 return create_srq_cmd(dev, srq, in, inlen);
343 else if (srq->common.res == MLX5_RES_XSRQ)
344 return create_xrc_srq_cmd(dev, srq, in, inlen);
346 return create_rmp_cmd(dev, srq, in, inlen);
349 static int destroy_srq_split(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq)
352 return destroy_srq_cmd(dev, srq);
353 else if (srq->common.res == MLX5_RES_XSRQ)
354 return destroy_xrc_srq_cmd(dev, srq);
356 return destroy_rmp_cmd(dev, srq);
359 int mlx5_core_create_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
366 srq->common.res = is_xrc ? MLX5_RES_XSRQ : MLX5_RES_SRQ;
368 err = create_srq_split(dev, srq, in, inlen, is_xrc);
372 atomic_set(&srq->refcount, 1);
373 init_completion(&srq->free);
376 err = radix_tree_insert(&table->tree, srq->srqn, srq);
379 mlx5_core_warn(dev, "err %d, srqn 0x%x\n", err, srq->srqn);
386 destroy_srq_split(dev, srq);
392 int mlx5_core_destroy_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq)
399 tmp = radix_tree_delete(&table->tree, srq->srqn);
402 mlx5_core_warn(dev, "srq 0x%x not found in tree\n", srq->srqn);
405 if (tmp != srq) {
406 mlx5_core_warn(dev, "corruption on srqn 0x%x\n", srq->srqn);
410 err = destroy_srq_split(dev, srq);
414 if (atomic_dec_and_test(&srq->refcount))
415 complete(&srq->free);
416 wait_for_completion(&srq->free);
422 int mlx5_core_query_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
426 return query_srq_cmd(dev, srq, out);
427 else if (srq->common.res == MLX5_RES_XSRQ)
428 return query_xrc_srq_cmd(dev, srq, out);
430 return query_rmp_cmd(dev, srq, out);
434 int mlx5_core_arm_srq(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
438 return arm_srq_cmd(dev, srq, lwm, is_srq);
439 else if (srq->common.res == MLX5_RES_XSRQ)
440 return arm_xrc_srq_cmd(dev, srq, lwm);
442 return arm_rmp_cmd(dev, srq, lwm);