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;
114 static int create_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
157 srq->srqn = MLX5_GET(create_srq_out, create_out, srqn);
158 srq->uid = in->uid;
164 static int destroy_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
169 MLX5_SET(destroy_srq_in, in, srqn, srq->srqn);
170 MLX5_SET(destroy_srq_in, in, uid, srq->uid);
175 static int arm_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
182 MLX5_SET(arm_rq_in, in, srq_number, srq->srqn);
184 MLX5_SET(arm_rq_in, in, uid, srq->uid);
189 static int query_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
202 MLX5_SET(query_srq_in, in, srqn, srq->srqn);
217 struct mlx5_core_srq *srq,
263 srq->srqn = MLX5_GET(create_xrc_srq_out, create_out, xrc_srqn);
264 srq->uid = in->uid;
271 struct mlx5_core_srq *srq)
276 MLX5_SET(destroy_xrc_srq_in, in, xrc_srqn, srq->srqn);
277 MLX5_SET(destroy_xrc_srq_in, in, uid, srq->uid);
282 static int arm_xrc_srq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
290 MLX5_SET(arm_xrc_srq_in, in, xrc_srqn, srq->srqn);
292 MLX5_SET(arm_xrc_srq_in, in, uid, srq->uid);
298 struct mlx5_core_srq *srq,
311 MLX5_SET(query_xrc_srq_in, in, xrc_srqn, srq->srqn);
328 static int create_rmp_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
376 srq->srqn = MLX5_GET(create_rmp_out, create_out, rmpn);
377 srq->uid = in->uid;
386 static int destroy_rmp_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
391 MLX5_SET(destroy_rmp_in, in, rmpn, srq->srqn);
392 MLX5_SET(destroy_rmp_in, in, uid, srq->uid);
396 static int arm_rmp_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
423 MLX5_SET(modify_rmp_in, in, rmpn, srq->srqn);
424 MLX5_SET(modify_rmp_in, in, uid, srq->uid);
438 static int query_rmp_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
459 MLX5_SET(query_rmp_in, rmp_in, rmpn, srq->srqn);
475 static int create_xrq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
528 srq->srqn = MLX5_GET(create_xrq_out, create_out, xrqn);
529 srq->uid = in->uid;
535 static int destroy_xrq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
540 MLX5_SET(destroy_xrq_in, in, xrqn, srq->srqn);
541 MLX5_SET(destroy_xrq_in, in, uid, srq->uid);
547 struct mlx5_core_srq *srq,
554 MLX5_SET(arm_rq_in, in, srq_number, srq->srqn);
556 MLX5_SET(arm_rq_in, in, uid, srq->uid);
561 static int query_xrq_cmd(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
575 MLX5_SET(query_xrq_in, in, xrqn, srq->srqn);
600 static int create_srq_split(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
604 return create_srq_cmd(dev, srq, in);
605 switch (srq->common.res) {
607 return create_xrc_srq_cmd(dev, srq, in);
609 return create_xrq_cmd(dev, srq, in);
611 return create_rmp_cmd(dev, srq, in);
615 static int destroy_srq_split(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
618 return destroy_srq_cmd(dev, srq);
619 switch (srq->common.res) {
621 return destroy_xrc_srq_cmd(dev, srq);
623 return destroy_xrq_cmd(dev, srq);
625 return destroy_rmp_cmd(dev, srq);
629 int mlx5_cmd_create_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
637 srq->common.res = MLX5_RES_XSRQ;
640 srq->common.res = MLX5_RES_XRQ;
643 srq->common.res = MLX5_RES_SRQ;
646 err = create_srq_split(dev, srq, in);
650 refcount_set(&srq->common.refcount, 1);
651 init_completion(&srq->common.free);
653 err = xa_err(xa_store_irq(&table->array, srq->srqn, srq, GFP_KERNEL));
660 destroy_srq_split(dev, srq);
665 int mlx5_cmd_destroy_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
672 tmp = xa_cmpxchg_irq(&table->array, srq->srqn, srq, XA_ZERO_ENTRY, 0);
673 if (WARN_ON(tmp != srq))
676 err = destroy_srq_split(dev, srq);
683 xa_cmpxchg_irq(&table->array, srq->srqn, XA_ZERO_ENTRY, srq, 0);
686 xa_erase_irq(&table->array, srq->srqn);
688 mlx5_core_res_put(&srq->common);
689 wait_for_completion(&srq->common.free);
693 int mlx5_cmd_query_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
697 return query_srq_cmd(dev, srq, out);
698 switch (srq->common.res) {
700 return query_xrc_srq_cmd(dev, srq, out);
702 return query_xrq_cmd(dev, srq, out);
704 return query_rmp_cmd(dev, srq, out);
708 int mlx5_cmd_arm_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
712 return arm_srq_cmd(dev, srq, lwm, is_srq);
713 switch (srq->common.res) {
715 return arm_xrc_srq_cmd(dev, srq, lwm);
717 return arm_xrq_cmd(dev, srq, lwm);
719 return arm_rmp_cmd(dev, srq, lwm);
727 struct mlx5_core_srq *srq;
741 srq = xa_load(&table->array, srqn);
742 if (srq)
743 refcount_inc(&srq->common.refcount);
746 if (!srq)
749 srq->event(srq, eqe->type);
751 mlx5_core_res_put(&srq->common);