diff options
author | Eli Cohen <eli@dev.mellanox.co.il> | 2014-01-14 10:45:17 -0500 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2014-01-23 02:23:49 -0500 |
commit | 3bdb31f688276505ede23280885948e934304674 (patch) | |
tree | c5699406b9ed58f6eaa4fe6ab00843425e367c82 /drivers/infiniband/hw | |
parent | ada388f7afad1e2e87acbfe30600fdaff9bd6327 (diff) |
IB/mlx5: Implement modify CQ
Modify CQ is used by ULPs like IPoIB to change moderation parameters. This
patch adds support in mlx5.
Signed-off-by: Eli Cohen <eli@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r-- | drivers/infiniband/hw/mlx5/cq.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c index b72627429745..b4c122eab484 100644 --- a/drivers/infiniband/hw/mlx5/cq.c +++ b/drivers/infiniband/hw/mlx5/cq.c | |||
@@ -818,7 +818,31 @@ void mlx5_ib_cq_clean(struct mlx5_ib_cq *cq, u32 qpn, struct mlx5_ib_srq *srq) | |||
818 | 818 | ||
819 | int mlx5_ib_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period) | 819 | int mlx5_ib_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period) |
820 | { | 820 | { |
821 | return -ENOSYS; | 821 | struct mlx5_modify_cq_mbox_in *in; |
822 | struct mlx5_ib_dev *dev = to_mdev(cq->device); | ||
823 | struct mlx5_ib_cq *mcq = to_mcq(cq); | ||
824 | int err; | ||
825 | u32 fsel; | ||
826 | |||
827 | if (!(dev->mdev.caps.flags & MLX5_DEV_CAP_FLAG_CQ_MODER)) | ||
828 | return -ENOSYS; | ||
829 | |||
830 | in = kzalloc(sizeof(*in), GFP_KERNEL); | ||
831 | if (!in) | ||
832 | return -ENOMEM; | ||
833 | |||
834 | in->cqn = cpu_to_be32(mcq->mcq.cqn); | ||
835 | fsel = (MLX5_CQ_MODIFY_PERIOD | MLX5_CQ_MODIFY_COUNT); | ||
836 | in->ctx.cq_period = cpu_to_be16(cq_period); | ||
837 | in->ctx.cq_max_count = cpu_to_be16(cq_count); | ||
838 | in->field_select = cpu_to_be32(fsel); | ||
839 | err = mlx5_core_modify_cq(&dev->mdev, &mcq->mcq, in); | ||
840 | kfree(in); | ||
841 | |||
842 | if (err) | ||
843 | mlx5_ib_warn(dev, "modify cq 0x%x failed\n", mcq->mcq.cqn); | ||
844 | |||
845 | return err; | ||
822 | } | 846 | } |
823 | 847 | ||
824 | int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata) | 848 | int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata) |