Lines Matching refs:srq
9 #include "srq.h"
84 struct mlx5_core_srq *srq;
87 srq = xa_load(&table->array, srqn);
88 if (srq)
89 refcount_inc(&srq->common.refcount);
92 return srq;
95 static int create_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
126 srq->srqn = MLX5_GET(create_srq_out, create_out, srqn);
127 srq->uid = in->uid;
133 static int destroy_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
138 MLX5_SET(destroy_srq_in, in, srqn, srq->srqn);
139 MLX5_SET(destroy_srq_in, in, uid, srq->uid);
144 static int arm_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
151 MLX5_SET(arm_rq_in, in, srq_number, srq->srqn);
153 MLX5_SET(arm_rq_in, in, uid, srq->uid);
158 static int query_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
171 MLX5_SET(query_srq_in, in, srqn, srq->srqn);
186 struct mlx5_core_srq *srq,
220 srq->srqn = MLX5_GET(create_xrc_srq_out, create_out, xrc_srqn);
221 srq->uid = in->uid;
228 struct mlx5_core_srq *srq)
233 MLX5_SET(destroy_xrc_srq_in, in, xrc_srqn, srq->srqn);
234 MLX5_SET(destroy_xrc_srq_in, in, uid, srq->uid);
239 static int arm_xrc_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
247 MLX5_SET(arm_xrc_srq_in, in, xrc_srqn, srq->srqn);
249 MLX5_SET(arm_xrc_srq_in, in, uid, srq->uid);
255 struct mlx5_core_srq *srq,
268 MLX5_SET(query_xrc_srq_in, in, xrc_srqn, srq->srqn);
285 static int create_rmp_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
318 srq->srqn = MLX5_GET(create_rmp_out, create_out, rmpn);
319 srq->uid = in->uid;
328 static int destroy_rmp_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
333 MLX5_SET(destroy_rmp_in, in, rmpn, srq->srqn);
334 MLX5_SET(destroy_rmp_in, in, uid, srq->uid);
338 static int arm_rmp_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
365 MLX5_SET(modify_rmp_in, in, rmpn, srq->srqn);
366 MLX5_SET(modify_rmp_in, in, uid, srq->uid);
380 static int query_rmp_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
401 MLX5_SET(query_rmp_in, rmp_in, rmpn, srq->srqn);
417 static int create_xrq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
456 srq->srqn = MLX5_GET(create_xrq_out, create_out, xrqn);
457 srq->uid = in->uid;
463 static int destroy_xrq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
468 MLX5_SET(destroy_xrq_in, in, xrqn, srq->srqn);
469 MLX5_SET(destroy_xrq_in, in, uid, srq->uid);
475 struct mlx5_core_srq *srq,
482 MLX5_SET(arm_rq_in, in, srq_number, srq->srqn);
484 MLX5_SET(arm_rq_in, in, uid, srq->uid);
489 static int query_xrq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
503 MLX5_SET(query_xrq_in, in, xrqn, srq->srqn);
528 static int create_srq_split(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
532 return create_srq_cmd(dev, srq, in);
533 switch (srq->common.res) {
535 return create_xrc_srq_cmd(dev, srq, in);
537 return create_xrq_cmd(dev, srq, in);
539 return create_rmp_cmd(dev, srq, in);
543 static int destroy_srq_split(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
546 return destroy_srq_cmd(dev, srq);
547 switch (srq->common.res) {
549 return destroy_xrc_srq_cmd(dev, srq);
551 return destroy_xrq_cmd(dev, srq);
553 return destroy_rmp_cmd(dev, srq);
557 int mlx5_cmd_create_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
565 srq->common.res = MLX5_RES_XSRQ;
568 srq->common.res = MLX5_RES_XRQ;
571 srq->common.res = MLX5_RES_SRQ;
574 err = create_srq_split(dev, srq, in);
578 refcount_set(&srq->common.refcount, 1);
579 init_completion(&srq->common.free);
581 err = xa_err(xa_store_irq(&table->array, srq->srqn, srq, GFP_KERNEL));
588 destroy_srq_split(dev, srq);
593 int mlx5_cmd_destroy_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
600 tmp = xa_cmpxchg_irq(&table->array, srq->srqn, srq, XA_ZERO_ENTRY, 0);
601 if (WARN_ON(tmp != srq))
604 err = destroy_srq_split(dev, srq);
611 xa_cmpxchg_irq(&table->array, srq->srqn, XA_ZERO_ENTRY, srq, 0);
614 xa_erase_irq(&table->array, srq->srqn);
616 mlx5_core_res_put(&srq->common);
617 wait_for_completion(&srq->common.free);
621 int mlx5_cmd_query_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
625 return query_srq_cmd(dev, srq, out);
626 switch (srq->common.res) {
628 return query_xrc_srq_cmd(dev, srq, out);
630 return query_xrq_cmd(dev, srq, out);
632 return query_rmp_cmd(dev, srq, out);
636 int mlx5_cmd_arm_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
640 return arm_srq_cmd(dev, srq, lwm, is_srq);
641 switch (srq->common.res) {
643 return arm_xrc_srq_cmd(dev, srq, lwm);
645 return arm_xrq_cmd(dev, srq, lwm);
647 return arm_rmp_cmd(dev, srq, lwm);
655 struct mlx5_core_srq *srq;
669 srq = xa_load(&table->array, srqn);
670 if (srq)
671 refcount_inc(&srq->common.refcount);
674 if (!srq)
677 srq->event(srq, eqe->type);
679 mlx5_core_res_put(&srq->common);